Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Реляционная_алгебра.doc
Скачиваний:
2
Добавлен:
22.11.2019
Размер:
2.61 Mб
Скачать

Пусть отношения а и в имеют заголовки

{ X1, X2, …,Xm, Y1, Y2, …, Yn }

и

{ Y1, Y2, …, Yn, Z1, Z2, …, Zp }

соответственно; т. е. атрибуты Y1, Y2, …, Yn (и только они) – общие для двух отношений; X1, X2, …,Xm – остальные атрибуты отношения А; Z1, Z2, …, Zp - остальные атрибуты отношения В. Предположим также, что соответствующие атрибуты (т. е. атрибуты с одинаковыми именами) определены на одном и том же домене. Давайте теперь рассматривать выражения {X1, X2, …,Xm}, {Y1, Y2, …, Yn} и {Z1, Z2, …, Zp } как три составных атрибута X, Y, Z соответственно. Тогда естественным соединением отношений А и В (A JOIN B) называется отношение с заголовком {X,Y,Z} и телом, содержащим множество всех кортежей {X:x, Y:y, Z:z}, таких для которых в отношении А значение атрибута Х равно х, а атрибута У равно у, и в отношении В значение атрибута У равно у, а атрибута Z равно z.

Пример естественного соединения (естественное соединение S JOIN P по общему атрибуту CITY) приведен на рис. 6.7.

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

Соединение, как мы уже мы определили, обладает и свойством ассоциативности, и свойством коммуникативности. Отсюда следует, что выражения

( A JOIN B ) JOIN C

и

A JOIN ( B JOIN C )

могут быть однозначно упрощены к следующему:

A JOIN B JOIN C

Кроме того, выражения

A JOIN B

и

В JOIN А

эквивалентны.

S#

SNAME

STATUS

CITY

P#

PNAME

COLOR

WEIGHT

S1

S1

S1

S2

S2

S3

S3

S4

S4

S4

Smith

Smith

Smith

Jones

Jones

Blake

Blake

Clark

Clark

Clark

20

20

20

10

10

30

30

20

20

20

London

London

London

Paris

Paris

Paris

Paris

London

London

London

P1

P4

P6

P2

P5

P2

P5

P1

P4

P6

Nut

Screw

Cog

Bolt

Cam

Bolt

Cam

Nut

Screw

Cog

Red

Red

Red

Green

Blue

Green

Blue

Red

Red

Red

12

14

19

17

12

17

12

12

14

19

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

Отметим также, что если отношения А и В не имеют общих имен атрибутов, то выражение A JOIN B эквивалентно A TIMES B (т. е. естественное соединение превращается в этом случае в декартово произведение).

θ-соединение

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

(A TIMES B) WHERE X θ Y

Другими словами, θ-соединение – это отношение с тем же заголовком, что и при декартовом произведении отношений А и В, и с телом, содержащим множество кортежей t, таких что t принадлежит этому декартову произведению и вычисление условия «Х θ У» дает значение истина для этого кортежа. Атрибуты Х и У должны быть определены на одном и том же домене, а операция должна иметь смысл для этого домена.

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

( ( S RENAME CITY AS SCITY )

TIMES

(P RENAME CITY AS PCITY ) )

WHERE SCITY > PCITY

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

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

Если θ обозначает «равно», то θ-соединение называется равно-соединением. Из определения следует, что результат равно-соединения должен включать два таких атрибута, значения которых должны быть равны в каждом кортеже отношения. Если один из этих атрибутов исключается (что может быть сделано операцией проекции), результатом будет просто естественное соединение! Следовательно, естественное соединение – это тоже не примитивная операция; она является проекцией выборки из произведения (опять-таки с некоторыми соответствующими операциями переименования атрибутов). Например, выражение, представляющее естественное соединение отношений поставщиков и деталей (по атрибуту города)

S#

SNAME

STATUS

SCITY

P#

PNAME

COLOR

WEIGHT

PCITY

s2

s2

s2

s3

s3

s3

Jones

Jones

Jones

Blake

Blake

Blake

10

10

10

30

30

30

Paris

Paris

Paris

Paris

Paris

Paris

p1

p4

p6

p1

p4

p6

Nut

Screw

Cog

Nut

Screw

Cog

Red

Red

Red

Red

Red

Red

12

14

19

12

14

19

London

London

London

London

London

London

Рис. 6. 8. Больше-соединение отношений поставщиков и деталей по атрибуту города

S JOIN P,

эквивалентно следующему более сложному выражению:

( ( S TIMES (P RENAME CITY AS PCITY ) ) WHERE CITY = PCITY )

[ S#, SNAME, STATUS, SITY, P#, PNAME, COLOR, WEIGHT ]

Деление

Пусть отношения А и В имеют заголовки

{ X1, X2, … , Xm, Y1, Y2, …Yn }

и

{ Y1, Y2, … , Yn }

соответственно, т. е. атрибуты Y1, Y2, …Yn - общие для двух отношений, и отношение А имеет дополнительные атрибуты X1, X2, … , Xm, а отношение В не имеет дополнительных атрибутов. (Отношения А и В представляют соответственно делимое и делитель.) Предположим также, что соответствующие атрибуты (т. е. атрибуты с одинаковыми именами) определены на одном и том же домене. Пусть теперь выражения {X1, X2, …, Xm} и { Y1, Y2, … , Yn } обозначают два составных атрибута Х и У соответственно. Тогда делением отношений А на В (A DIVIDEBY B) называется отношение с заголовком {X} и телом, содержащим множество всех кортежей {X:x}, таких что существует кортеж {X:x, Y:y}, который принадлежит отношению А для всех кортежей {Y:y}, принадлежащих отношению В. Нестрого это можно сформулировать так: результат содержит такие Х-значения из отношения А, для которых соответствующие У-значения (из А) включают все У-значения из отношения В.

На рис. 6. 9. показаны некоторые простые примеры деления. В каждом случае делимое (отношение DEND) – это проекция отношения SP по атрибутам S# и Р#; а делители (отношения DOR) – такие, как показано на рисунке. В частности, обратите внимание на последний пример, в котором делителем является отношение, содержащее номера всех известных в данный момент деталей; в результате, очевидно, получим номера поставщиков, поставляющих все эти детали. Как видно из этого примера, оператор DIVIDEBY полезен именно для запросов такого рода. Более того, если запрос на обычном языке включает слово «все» («получить поставщиков, поставляющих все детали»), тогда почти наверняка понадобится операция деления.

Прежде чем завершить раздел, необходимо отметить, что следует быть осторожным при использовании этой операции; в частности, трудности возникают в связи с пустыми отношениями. Улучшенная форма оператора DIVIDEBY PER позволяет избежать этих трудностей, но, к сожалению, она сложнее первоначальной. Ее описание можно найти в комментариях к [6.4].Стоит отметить, что запросы типа деления часто проще описываются в терминах реляционных сравнений (об этом речь идет несколько ниже).

DEND

S#

P#

S1

S1

S1

S1

S1

S1

P1

P2

P3

P4

P5

P6

S2

S2

S3

S4

S4

S4

P1

P2

P2

P2

P4

P5

DOR

P#

DOR

P#

DOR

P#

P1

P2

P4

P1

P2

P3

P4

P5

P6

DEND DIVIDEBY DOR

S#

S#

S#

S1

S2

S1

S4

S1

Рис. 6. 9. Примеры деления