Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
160
Добавлен:
16.03.2016
Размер:
6 Мб
Скачать
☆

4.4.3. Операция соединения отношений

Общая операция соединения (называемая также соединением по условию) требует наличия двух операндов – соединяемых отношений и третьего операнда – простого условия. Пусть соединяются отношения AиB. Как и в случае операции ограничения, условие соединенияcompимеет вид либо (a comp-op b), либо (a comp-op const), гдеaиb– имена атрибутов отношенийAиB,const– литерально заданная константа, иcomp-op– допустимая в данном контексте операция сравнения.

Тогда по определению результатом операции соединения A JOIN B WHERE compсовместимых по взятию расширенного декартова произведения отношенийAиBявляется отношение, получаемое путем выполнения операции ограничения по условиюcompрасширенного декартова произведения отношенийAиB (A JOIN B WHERE comp (A TIMES B) WHERE comp).

Если тщательно осмыслить это определение, то станет ясно, что в общем случае применение условия соединения существенно уменьшит мощность результата промежуточного декартова произведения отношений-операндов только в том случае, если условие соединения имеет вид (a comp-op b), гдеaиb– имена атрибутов разных отношений-операндов. Поэтому на практике обычно считают реальными операциями соединения именно те операции, которые основываются на условии соединения приведенного вида.

В подразделе, касающемся операции ограничения, мы определили трактовку использования в качестве ограничивающего условия произвольного булевского выражения, которое составлено из простых условий над атрибутами отношения-операнда и литеральными константами. Конечно же, и в операции соединения может задаваться произвольное логическое выражение, составленное из простых условий над атрибутами отношений-операндов и константами. Операцию соединения с таким условием compразумно считать операциейдействительногосоединения, если оно имеет вид (или может быть преобразовано к виду)comp1 AND (a comp-op b), гдеaиb– имена атрибутов разных отношений-операндов.

Для иллюстрации операций соединения мы немного изменим заголовки и тела отношений, которые использовались ранее в примерах этой лекции. Пусть теперь имеются отношения СЛУЖАЩИЕ {СЛУ_НОМЕР, СЛУ_ИМЯ, СЛУ_ЗАРП, ПРО_НОМ}(атрибутПРО_НОМсодержит номера проектов, в которых участвует каждый служащий) иПРОЕКТЫ {ПРО_НОМ, ПРОЕКТ_РУК, ПРО_ЗАРП}(ПРО_НОМ– номер проекта,ПРОЕКТ_РУК– имя служащего-руководителя проекта,ПРО_ЗАРП– средняя заработная плата служащих, участвующих в проекте). Примерное содержимое тел отношенийСЛУЖАЩИЕиПРОЕКТЫпоказано нарис. 4.7.

Рис. 4.7.Отношения СЛУЖАЩИЕ и ПРОЕКТЫ

Тогда осмысленной операцией соединения общего вида будет СЛУЖАЩИЕ JOIN ПРОЕКТЫ WHERE (СЛУ_ЗАРП > ПРО_ЗАРП)(выдать данные о служащих, получающих заработную плату, превышающую среднюю заработную плату любого проекта). Результаты этого запроса показаны нарис. 4.8.

Рис. 4.8.Результат операции СЛУЖАЩИЕ JOIN ПРОЕКТЫ WHERE (СЛУ_ЗАРП > ПРО_ЗАРП)

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

Существует важный частный случай соединения – эквисоединение (EQUIJOIN) и простое, но важное расширение операции эквисоединения – естественное соединение (NATURAL JOIN). Операция соединения называетсяоперацией эквисоединения, если условие соединения имеет вид (a = b), гдеaиb– атрибуты разных операндов соединения. Этот случай важен потому, что он чаще всего встречается на практике, и для него существуют наиболее эффективные алгоритмы реализации.

Операция естественного соединения применяется к паре отношенийAиB, обладающих (возможно, составным) общим атрибутомc(т. е. атрибутом с одним и тем же именем и определенным на одном и том же домене). ПустьABобозначает объединение заголовков отношенийAиB. Тогдаестественное соединениеAиB– это спроецированный наABрезультат эквисоединенияAиBпо условию A.c = B.c15). Хотя операция естественного соединения выражается через операции переименования, соединения общего вида и проекции, для нее обычно используется сокращенная форма, называемаяNATURAL JOIN.

На рис. 4.9приведены результаты операцийСЛУЖАЩИЕ JOIN (ПРОЕКТЫ RENAME (ПРО_НОМ, ПРО_НОМ1)) WHERE (СЛУ_ЗАРП = ПРО_ЗАРП)(эквисоединение отношенийСЛУЖАЩИЕиПРОЕКТЫ: найти всех служащих, получающих зарплату, равную средней заработной плате в каком-либо проекте) иСЛУЖАЩИЕ NATURAL JOIN ПРОЕКТЫ(естественное соединение – выдать полную информацию о служащих и проектах, в которых они участвуют).

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

15 Здесь A.c и B.c представляют собой так называемые квалифицированные (уточненные) имена атрибутов (часто такой способ именования называют точечной нотацией). Мы будем использовать подобную нотацию в тех случаях, когда требуется явно показать, схеме какого отношения принадлежит данный атрибут.

Рис. 4.9.Результаты операций эквисоединения и естественного соединения отношений СЛУЖАЩИЕ и ПРОЕКТЫ