Скачиваний:
180
Добавлен:
02.05.2014
Размер:
2.66 Mб
Скачать

6.4. Семантика

В этом разделе мы дадим толкование приведенного в разделе 6.3 синтаксиса и обсудим некоторые конкретные примеры. Операторы будут рассматриваться в такой последовательности: объединение, пересечение, вычитание, произведение, выборка, проекция, естественное соединение и деление (оператор RENAME уже рассматривался в разделе 6.2).

Объединение

В математике объединением двух множеств называется множество, состоящее из всех элементов, принадлежащих хотя бы одному из исходных множеств. Поскольку от- ношение является множеством (точнее, содержит множество), а именно — множеством кортежей, очевидно, что можно получить объединение двух таких множеств. Результа- том выполнения этой операции будет множество, состоящее из всех кортежей, которые принадлежат хотя бы одному из исходных отношений. Например, объединение множе- ства кортежей описания поставщиков переменной-отношения S и множества кортежей описания деталей переменной-отношения Р, определенно, будет множеством.

Однако, хотя результатом объединения является множество, оно не всегда будет от- ношением, поскольку в отношении не может быть кортежей разных типов. Нам же, без- условно, требуется, чтобы результатом операции объединения обязательно было отно- шение, поскольку необходимо соблюдать свойство реляционной замкнутости. Поэтому объединение в реляционной алгебре — это не обычное математическое объединение, а, скорее, специальный вид объединения, требующий, чтобы отношения на входе были со- вместимы по типу, т.е. чтобы, например, оба отношения содержали кортежи поставщи- ков или кортежи деталей, но не комбинацию этих типов кортежей. Если два исходных отношения совместимы по типу, то результат их объединения также будет отношением и свойство замкнутости будет сохранено2.

Теперь дадим точное определение оператора реляционного объединения. Для задан- ных отношений А и В одного и того же типа объединением этих двух отношений (что за- писывается как A UNION В) называется новое отношение того же типа с телом, состоя- щим из множества всех кортежей t, которые принадлежат либо отношению А, либо от- ношению В, либо обоим отношениям одновременно.

Пример. Пусть отношения А и В будут такими, как показано на рис. 6.2 (отношение А представляет поставщиков из Лондона, а отношение В — поставщиков, которые, скажем, поставляют деталь под номером 'Р1'). Тогда выражение A UNION В (см. рис. 6.2, а) представляет поставщиков, которые или находятся в Лондоне, или поставляют деталь под номером 'Р1' (или и то, и другое). Обратите внимание, что результат имеет три кор- тежа, а не четыре — повторяющиеся кортежи удаляются по определению. Вопрос удале- ния дубликатов не возникает в других традиционных операциях над множествами. Фак- тически еще существует только одна операция (помимо объединения), где этот вопрос актуален, — операция проекции (подробнее о ней речь идет далее в этом разделе).

А В

S#

SNAME

STATUS

CITY

S#

SNAME

STATUS

CITY

SI S4

Smith Clark

20 20

London London

SI S2

Smith Jones

20 10

London Paris

а) Объединение (A UNION В)

S#

SNAME

STATUS

CITY

SI S4 S2

Smith Clark Jones

20 20 10

London London Paris

б) Пересечение

(A INTERSECT В)

S#

SNAME

STATUS

CITY

SI

Smith

20

London

в) Вычитание (A MINUS В)

г) Вычитание (В MINUS A)

S#

SNAME

STATUS

CITY

S#

SNAME

STATUS

CITY

1

S4

Clark

20

London

S2

Jones

10

Paris

1

Рис. 6.2. Примеры операций объединения, пересечения и вычитания

Пересечение

Как и для оператора объединения, для реляционного оператора пересечения (и по тем же причинам) необходимо, чтобы его операнды были совместимы по типу. Итак, пересе- чением двух совместимых по типу отношений А и В (что записывается как A INTERSECT В) называется отношение того же типа с телом, состоящим из множества всех кортежей t, ко- торые принадлежат одновременно обоим исходным отношениям А и В.

Пример. Пусть вновь отношения А и В будут такими, как показано на рис. 6.2. Тогда выражение A INTERSECT В (см. рис. 6.2, б) представляет поставщиков, которые находят- ся в Лондоне и поставляют деталь под номером 'Р1'.

Вычитание

Как и для операторов объединения и пересечения, для реляционного оператора вычи- тания необходимо, чтобы его операнды были совместимы по типу. Тогда вычитанием двух совместимых по типу отношений А и В (что записывается как A MINUS В, причем

порядок их указания здесь играет роль) называется отношение того же типа, что и отно- шения А и В, с телом, состоящим из множества всех кортежей t, которые принадлежат отношению А, но не принадлежат отношению В.

Пример. Пусть еще раз отношения А и В будут такими, как показано на рис. 6.2. Тогда выражение A MINUS В (см. рис. 6.2, в) представляет поставщиков, которые находятся в Лондоне и не поставляют деталь под номером 'Р1', а выражение В MINUS А (см. рис. 6.2, г) представляет поставщиков, которые поставляют деталь под номером ' Р1' и не находятся в Лондоне. Заметьте, что при вычитании учитывается порядок следования операндов, точно так, как в обычной арифметике (например, 5-2и2-5 — это не одно и то же).

Произведение

В математике декартово произведение (или для краткости— просто произведение) двух множеств является множеством всех таких упорядоченных пар элементов, что пер- вый элемент в каждой паре берется из первого множества, а второй элемент в каждой паре берется из второго множества. Следовательно, декартово произведение двух отно- шений должно быть множеством упорядоченных пар кортежей. Но, опять-таки, необ- ходимо сохранить свойство замкнутости; иначе говоря, результат должен содержать кор- тежи, а не упорядоченные пары кортежей. Поэтому версия декартова произведения в ре- ляционной алгебре представляет собой расширенную форму операции, в которой каждая упорядоченная пара кортежей заменяется одним кортежем, образованным из двух сцеп- ленных кортежей этой пары. "Сцепление" здесь означает объединение (в смысле теории множеств, а не реляционной алгебры), т.е. кортежи { Altai, A2ta2, Amtam }и{

Bltbl, B2:b2, Bntbn } объединяются в один кортеж.

{ Altai, A2ta2, Amtam, Bltbl, B2tb2, Bntbn }

Другая проблема, возникающая в связи с декартовым произведением, заключается в том, что результирующее отношение должно иметь правильно сформированный заголовок. Очевидно, что заголовок результирующего отношения должен содержать все атрибуты из двух исходных отношений. Однако, если эти два заголовка имеют какие-то общие имена атрибутов, возникает проблема. Если допустить подобную операцию, то результирующий заголовок будет иметь два одинаковых атрибута, а значит, будет "неверно сформированным". Поэтому, чтобы построить декартово произведение двух отношений, которые имеют какие-то общие имена атрибутов, не- обходимо прежде применить оператор RENAME для переименования соответствующих атрибутов.

В результате можно определить (реляционное) декартово произведение двух отно- шений А и В (что записывается как A TIMES В), где отношения А и В не имеют общих имен атрибутов, как новое отношение с заголовком, представляющим собой объедине- ние заголовков двух исходных отношений А и В, и с телом, состоящим из множества всех кортежей t, таких, что каждый кортеж t представляет собой объединение двух кортежей, один из которых принадлежит отношению А, а другой — отношению В. Обратите внима- ние, что кардинальность результата равняется произведению кардинальностей исходных отношений А и В, а степень равняется сумме их степеней.

Пример. Пусть отношения А и В будут такими, как показано на рис. 6.3 (отношение А представляет, например, номера всех существующих на данный момент поставщиков, а отношение В — номера всех поставляемых на текущий момент деталей). Тогда произве- дение A TIMES В — это набор всех возможных на текущий момент пар из значений но- мера поставщика и номера детали.

A SJ^ SI S2 S3 S4 S5

В

p# PI

P2 P3 P4 P5 P6

Декартово произведение (A TIMES B)

s#

p#

si

PI

si

P2

SI

P3

SI

P4

SI

P5

SI

P6

S2

PI

S3

PI

S4

PI

S2

P2

S3

P2

S4

P2

S2

P3

S3

P3

S4

P3

S2

P4

S3

P4

S4

P4

S2

P5

S3

P5

S4

P5

S2

P6

S3

P6

S4

P6

S5

PI

S5

P2

S5

P3

S5

P4

S5

P5

S5

P6

Рис. 6.3. Пример операции декартова произведения

Выборка

Пусть задано отношение А с атрибутами X и У (и, возможно, с другими атрибутами), а символ в обозначает любой скалярный оператор сравнения (=, >, > и т.д.), такой, что условие X G Y корректно определено и при заданных значениях атрибутов X и Y его проверка дает значение истина или ложь. Тогда ©-выборкой из отношения А по атри- бутам X и Y (что записывается, например, как S WHERE CITY = 'London', причем именно в этом порядке) называется отношение, имеющее тот же заголовок, что и отношение А, и тело, содержащее множество всех кортежей t отношения А, для которых проверка усло- вия X в Y дает значение истина.

Необходимо отметить следующее.

1. Обращение к оператору выбора, в частности литерал, может быть указано как вме- сто атрибута X, так и вместо атрибута Y (или вместо обоих); на практике это обыч- ный случай. Тем не менее этот "обычный случай" следует рассматривать всего лишь как сокращение. Например, оператор выборки

S WHERE CITY = 'London',

по сути, является всего лишь сокращенной записью следующего выражения: { EXTEND S ADD 'London' AS TEMP ) WHERE CITY = TEMP

(здесь имя TEMP может быть произвольным). Оператор EXTEND будет рассмотрен в разделе 6.7.

\2. Условия в форме b (где b — обращение к оператору логического выбора) являются допустимыми.

3. В приведенном определении операции выборки в выражении WHERE допускаются только единичные операции сравнения. Однако на основании свойства замкнутости можно недвусмысленно расширить определение до такой формы, в которой усло- вие в выражении WHERE будет содержать произвольное число логических сочетаний подобных единичных сравнений благодаря следующим тождествам.

A WHERE cl AND с2 з (A WHERE cl ) INTERSECT ( A WHERE с2 ) A WHERE cl OR с2 = ( A WHERE cl ) UNION ( A WHERE c2 ) A WHERE NOT с = A MINUS ( A WHERE С )

Поэтому впредь мы будем подразумевать, что параметр <логическое выражение> в предложении WHERE для операции выборки содержит произвольное число логических сочетаний единичных сравнений (с использованием круглых скобок, если необходи- мо указать желаемый порядок вычисления), где каждое единичное сравнение, в свою очередь, включает либо атрибуты указанного отношения, либо обращение к операто- ру выборки, либо и то, и другое. Обратите внимание, что значение параметра Логическое выражениё> может быть истолковано как истина или ложь для каждого заданного кортежа в отдельности независимо от остальных. Описанное выше значе- ние параметра <логическое выражениё> принято называть условием выборки.

В результате выполнения оператора выборки будет получено "горизонтальное" под- множество заданного отношения, т.е. такое подмножество кортежей заданного отноше- ния, для которого удовлетворяется указанное условие выборки. На рис. 6.4 приводится несколько примеров операции выборки.

S WHERE CITY = 'London'

S#

SNAME

STATUS

CITY

SI

Smith

20

London

S4

Clark

20

London

P WHERE WEIGHT <

P#

PNAME

COLOR

WEIGHT

CITY

WEIGHT (14.0)

PI

Nut

Red

12.0

London

P5

Cam

Blue

12.0

Paris

SP WHERE S# - S# ( 'S6' ) OR P# - P# ( 'P7' )

S#

P#

QTY

Puc. 6.4. Примеры операций выборки

Проекция

Пусть задано отношение А с атрибутами X, Y, ... , Z (и, возможно, с другими). То- гда проекцией отношения А по атрибутам X, У, ... , Z (что записывается как А { X, Y, ... , Z }) называется отношение, удовлетворяющее следующим требованиям.

■ Его заголовок получается из заголовка отношения А посредством удаления из него всех атрибутов, не входящих в множество {X, Y, ... , Z}.

■ Его тело содержит множество всех кортежей вида {X:x, Y:y, ... , Z:z}, таких, для которых в отношении А значение атрибута X равно х, значение атрибута Y рав- но у значение атрибута Z равно г.

Таким образом, с помощью оператора проекции создается "вертикальное" подмноже- ство заданного отношения, т.е. подмножество, получаемое путем исключения всех атри- бутов, не указанных в заданном списке атрибутов, с последующим исключением дубли- рующихся кортежей (подкортежей) из того, что осталось от исходного отношения.

Из этого определения можно сделать следующие выводы.

  1. Никакой атрибут не может быть указан в списке атрибутов более одного раза (почему?).

  2. Если в списке атрибутов указаны все атрибуты отношения А, то такая проекция представляет собой тождественную проекцию.

  3. Проекция вида А{ } (т.е. такая, в которой список атрибутов пуст) также допустима. Она представляет собой нулевую проекцию. Подробности приводятся в упр. 6.8- 6.10 в конце этой главы.

Несколько примеров операции проекции показано на рис. 6.5. Обратите внимание, что в первом примере (проекция отношения поставщиков по атрибуту CITY), несмотря на то что исходное отношение S имеет пять кортежей (и, следовательно, пять значений городов), в результирующем отношении присутствует только три города, поскольку дублирующиеся кортежи исключены. Аналогичные замечания можно сделать и для других примеров.

S {CITY }

CITY

London

Paris

Athens

P { COLOR, CITY }

COLOR

CITY

Red

London

Green

Paris

Blue

Rome

Blue

Paris

( S WHERE CITY = 'PARIS' ) { S# }

S#

S2 S3

Рис. 6.5. Примеры операций проекции

Отметим, что часто на практике удобно указывать не те атрибуты, по которым берет- ся проекция, а те, которые проекцией "отбрасываются". Например, удобнее сказать "проекция, исключающая из отношения Р атрибут WEIGHT " вместо "проекция отношения Р по атрибутам PI, PNAME, COLOR и CITY".

Р { ALL BUT WEIGHT }

Соединение

Операция соединения имеет несколько разновидностей. Однако наиболее важным, без со- мнения, является естественное соединение, причем настолько важным, что общий термин соединение почти всегда используется для обозначения именно естественного соединения. Этой практики мы будем придерживаться и в данной книге. Далее приводится определение (оно несколько абстрактное, но мы считаем, что читатели уже знают о естественном соедине- нии на интуитивно понятном уровне из главы 3). Пусть отношения А и В имеют заголовки

{ XI, Х2, ... , Xm, Yl, Y2, ... , Yn }

и

{ Yl, Y2, ... , Yn, Zl, Z2, ... , Zp }

соответственно, т.е. атрибуты Yl, Y2, ... , Yn (и только они) — общие для двух этих от- ношений, XI, Х2, ... , Xm — остальные атрибуты отношения А и Zl, Z2, ... , Zp — ос- тальные атрибуты отношения В. Далее мы будем рассматривать выражения {XI, Х2, ... , Xm}, {Yl, Y2, ... , Уп}и{21, Z2, ... , Zp} как три составных атрибута X, У и Z соответ- ственно. Тогда естественным соединением отношений А и В (что записывается как A JOIN В) называется отношение с заголовком {X, Y, Z} и телом, содержащим множество всех кортежей вида {Х:х, У:у, Z:z}, таких, для которых в отношении А значение атрибута X равно х, а значение атрибута У равно у и в отношении В значение атрибута У равно у, а зна- чение атрибута Z равно г.

Пример естественного соединения (естественное соединение S JOIN Р по общему ат- рибуту СИУ) приведен на рис. 6.6.

s#

SNAME

STATUS

CITY

P#

PNAME

COLOR

WEIGHT

SI

Smith

20

London

PI

Nut

Red

12.0

SI

Smith

20

London

P4

Screw

Red

14.0

SI

Smith

20

London

P6

Cog

Red

19.0

S2

Jones

10

Paris

P2

Bolt

Green

17.0

S2

Jones

10

Paris

P5

Cam

Blue

12.0

S3

Blake

30

Paris

P2

Bolt

Green

17.0

S3

Blake

30

Paris

P5

Cam

Blue

12.0

S4

Clark

20

London

PI

Nut

Red

12.0

S4

Clark

20

London

P4

Screw

Red

14.0

S4

Clark

20

London

P6

Cog

Red

19.0

Рис. 6.6. Естественное соединение S JOIN P

Замечание. Хотелось бы еще раз остановиться на том факте (хотя это неоднократно отмечалось выше и явно показано на рис. 6.6), что соединения необязательно выполня- ются по внешнему ключу и соответствующему первичному ключу, хотя такие соедине- ния весьма распространены и являются важным частным случаем.

Теперь обратимся к операции ©-соединения. Она предназначается для тех случаев (сравнительно редких, но всем известных), когда нужно соединить два отношения на основе некоторых условий, отличных от эквивалентности. Пусть отношения А и В не имеют общих

имен атрибутов (как и в рассмотренной выше операции декартова произведения) и 0 опреде- ляется так же, как и в операции выборки. Тогда в-соединением отношения А по атрибуту X с отношением В по атрибуту Y называется результат вычисления следующего выражения.

( A TIMES В ) WHERE X © Y

Другими словами, в-соединение — это отношение с тем же заголовком, что и при декартовом произведении отношений А и В, и с телом, содержащим множество кортежей t, таких, что кортеж t принадлежит этому декартову произведению и вычисление усло- вия X © Y для кортежа t дает значение истина.

В качестве примера предположим, что необходимо вычислить "больше чем"- соединение отношения S по атрибуту CITY с отношением Р по атрибуту CITY (предполагается, что операция ">" имеет смысл для сравнения названий городов и ин- терпретируется просто как "далее в алфавитном порядке"). Соответствующим выраже- нием реляционной алгебры будет следующее.

( ( S RENAME CITY AS SCITY ) TIMES ( P RENAME CITY AS PCITY ) )

WHERE SCITY > PCITY

Обратите внимание на переименование атрибутов в этом примере. Конечно, доста- точно было бы переименовать лишь один из двух атрибутов CITY. Единственный смысл двойного переименования — это симметрия. Результат вычисления данного выражения показан на рис. 6.7.

s#

SNAME

STATUS

SCITY

P#

PNAME

COLOR

WEIGHT

PCITY

S2

Jones

10

Paris

PI

Nut

Red

12

London

S2

Jones

10

Paris

P4

Screw

Red

14

London

S2

Jones

10

Paris

P6

Cog

Red

19

London

S3

Blake

30

Paris

PI

Nut

Red

12

London

S3

Blake

30

Paris

P4

Screw

Red

14

London

S3

Blake

30

Paris

P6

Cog

Red

19

London

Рис. 6.7. "Больше чем "-соединение отношений поставщиков и деталей по атрибуту на- звания города

Если условие © является условием "равно", то ©-соединение называется равно- соединением. Из определения следует, что результат равно-соединения должен вклю- чать два атрибута, значения которых должны быть равны в каждом кортеже отношения. Если исключить один из этих атрибутов (с помощью операции проекции), результатом будет обычное естественное соединение! Например, выражение, представляющее есте- ственное соединение отношений поставщиков и деталей (по атрибуту города) S JOIN Р, эквивалентно следующему более сложному выражению.

( ( S TIMES ( Р RENAME CITY AS PCITY ) )

WHERE CITY = PCITY )

{ ALL BUT CITY }

Замечание. В языке Tutorial D нет прямой поддержки оператора ©-соединения, по- скольку он не так уж часто используется на практике и, как мы уже видели, не является примитивным.

Деление

В [6.3] вводятся два разных оператора деления — Small Divide и Great Divide. В языке Tutorial D оператору <деление>, список <рег> которого состоит только из одного парамет- ра реляционное выражениё>, соответствует операция Small Divide, а оператору <деление>, список <рег> которого состоит из двух разделенных запятыми параметров реляционное выражениё>, соответствует операция Great Divide. Приведенное далее описание относится только к частному ограниченному случаю операции Small Divide. Оператор Great Divide и подробности, касающиеся операции Small Divide, приводятся в [6.3].

Необходимо сказать, что рассмотренная здесь версия оператора Small Divide отлича- ется от оригинального оператора, предложенного Коддом. Фактически это улучшенная версия, в которой исправлены недостатки, вызывавшие трудности при работе с пустыми отношениями. Данная версия также отличается от оператора Small Divide, рассмотрен- ного в нескольких первых изданиях настоящей книги.

Дадим теперь определение оператора деления. Пусть отношения А и В имеют заго- ловки {XI, Х2, ... , Xm } и { Yl, Y2, ... , Yn } соответственно (т.е. заголовки от- ношений А и В не пересекаются). Пусть также отношение С имеет следующий заголовок.

{ XI, Х2, ... , Xm, Yl, Y2, ... , Yn } .

(Иначе говоря, заголовок отношения С является объединением заголовков отноше- ний А и В.) Далее будем рассматривать множества { XI, Х2, ... , Xm } и { Yl, Y2, ... , Yn } как составные атрибуты X и Y соответственно. Тогда результатом деления отношения А на отношение В по отношению С (что записывается как A DIVIDEBY В PER С, где отношение А представляет собой делимое, отношение В — делитель, а от- ношение С— "посредник") называется отношение с заголовком {X} и телом, содер- жащим множество всех кортежей вида {Х:х}, таких, что кортеж вида {Х;х, Y:y} при- надлежит отношению В для всех кортежей вида {Y:y}, принадлежащих отношению В. Нестрого это можно сформулировать так: результат содержит такие Х-значения из от- ношения А, для которых соответствующие Y-значения из отношения С включают все Y-значения из отношения В.

На рис. 6.8 показаны некоторые простые примеры операции деления. В каждом слу- чае делимое (отношение DEND) — это проекция текущего значения переменной- отношения S по атрибуту Sf, посредник (MED) — это проекция текущего значения пере- менной-отношения SP по атрибутам S# и Р#, а три делителя (отношения DOR)— такие, как показано на рисунке. В частности, обратите внимание на последний пример, в кото- ром делителем является отношение, содержащее номера всех известных в данный мо- мент деталей. В результате, очевидно, получим номера поставщиков, поставляющих все типы этих деталей. Как видно из примера, оператор DIVIDEBY полезен именно для запро- сов такого рода. Более того, если запрос на обычном языке включает слово "все" ("определить поставщиков всех типов деталей"), то почти наверняка понадобится ис- пользовать операцию деления3. Тем не менее следует отметить, что подобные запросы удобнее записывать в терминах реляционных сравнений (раздел 6.9).

MED

DEND

S# SI S2 S3 S4 S5

s#

p#

SI

PI

SI

P2

SI

P3

SI

P4

SI

P5

SI

P6

S2

PI

S2

P2

S3

P2

S4

P2

S4

P4

S4

P5

DOR

P#

DOR

P#

DOR

P#

PI

P2 P4

PI P2 P3 P4 P5 P6

DEND DIVIDEBY DOR PER MED

S#

SI S2

S#

SI S4

S# SI

Рис. 6.8. Примеры операции деления

Ассоциативность и коммутативность

Легко проверить, что операция объединения (UNION) ассоциативна, т.е. если А, В и С — произвольные реляционные выражения (дающие совместимые по типу результаты), то приведенные ниже два выражения логически эквивалентны.

( A UNION В ) UNION С A UNION ( В UNION С )

Следовательно, для удобства можно разрешить запись последовательных операторов объединения без использования круглых скобок. Поэтому предыдущие выражения мож- но однозначно упростить следующим образом.

A UNION В UNION С

Аналогичные замечания можно сделать и для операций пересечения (INTERSECT), де- картова произведения (TIMES) и соединения (JOIN) (но не операции вычитания MINUS).

Заметим также, что операции объединения (UNION), пересечения (INTERSECT), декар- това произведения (TIMES) и соединения (JOIN) (но не операция вычитания MINUS) еще и коммутативны, т.е. выражения A UNION В и В UNION А эквивалентны, что справедливо и для операций пересечения, декартова произведения и соединения.

Замечание. К вопросу ассоциативности и коммутативности мы еще вернемся в гла- ве 17. А относительно операции декартова произведения мимоходом заметим, что в тео- рии множеств она не является ни ассоциативной, ни коммутативной, но ее расширенная версия, как мы ее здесь определили, и ассоциативна, и коммутативна.

Наконец, отметим, что если отношения А и В не имеют общих атрибутов, то операция A JOIN В эквивалентна операции A TIMES В [5.5], т.е. в таком случае естественное со- единение вырождается в декартово произведение. По этой причине в версии языка Tutorial D, описанной в [3.3] оператор TIMES не поддерживается.

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]