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

{ 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   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  

Рис. 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   Paris Paris Paris Paris Paris Paris p1 p4 p6 p1 p4 p6 Nut Screw Cog Nut Screw Cog Red Red Red Red Red Red   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. Примеры деления


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: