Введение в системы БД (542480), страница 50
Текст из файла (страница 50)
Этой практики мы будем придерживаться и в данной книге. Далее приводится определение (оно несколько абстрактное, но мы считаем, что читатели уже знают о естественном соединении на интуитивно г!онятном уровне из главы 3). Пусть отношения А и В имеют заголовки ( Х1, Х2, ..., Хп, Х1, Х2, ... , Хп ) ( Х1, Хг, ... , Хп, Е1, Ег, ... , Ер ) соответственно, т.е. атрибуты Х1, Х2, ..., Хп (и только они) — общие для двух этих отношений, Х1, Х2, ..., Хв — остальные атрибуты отношения А и Е1, Е2, ..., Ер — остальные атрибуты отношения В. Далее мы будем рассматривать выражения (Х1, Х2, Хв), (Х1, Х2, ..., Хп) и (21, Е2, ..., Ер) как три составных атрибута Х, Х и Е соответственно.
Тогда естественным соединением отношений А и В (что записывается как А 3013 В) называется отношение с заголовком (Х, Х, Е) н телом, содержащим множество всех кортежей вида (Х:х, Х:у, Е!з), таких, для которых в отношении А значение атрибута Х равно х, а значение атрибута Х равно у и в отношении В значение атрибута Х равно у, а значение атрибута Е равно з.
Пример естественного соединения (естественное соединение Б 3013 Р по общему атрибуту 01ТХ) приведен на рис. 6.6. ЯЫАМЕ ЯТАТ1!В С1ТУ Р№ РЫАМЕ С01.0К ЖЕ10НТ Рис. б.б. Естественное соединение 3 701й Р Занечание. Хотелось бы еше раз остановиться на том факте (хотя это неоднократно отмечалось выше и явно показано на рис. 6.6), что соединения необязательно выполняются по внешнему ключу н соответствующему первичному ключу, хотя такие соединения весьма распространены и являются важным частным случаем. Теперь обратимся к операции О-соединения. Она предназначается для тех случаев (сравнительио редких, но всем известных), когда нужно соединить два отношения на основе некоторых условий, отличных от эквивалентности.
Пусть отношения А и В не имеют общих 205 Глава б. Реляционная алгебра Я1 31 Я1 32 32 ЯЗ 33 Я4 Я4 Я4 Яш!!Ь Яш!1Ь Яш!1Ь допев допев В!аке В!ахе С1аг!с С1аг!с С!аг)г 20 20 20 10 10 30 30 20 20 20 Ьопдоп 1.опдоп Ьопдоп Раг!я Раг!в Раг!я Раг1в Ьопдоп 1 опдоп Ьопдоп Р1 Р4 Рб Р2 Р5 Р2 Р5 Р1 Р4 Рб ЫцФ Всгезч Сое Во!! Саш Во!С Саш Хц! Всгезч Со Кед Кед Кед Сгееп В!це Сгееп В1це Кед Кед Кед 12.0 14.0 19.0 17.0 12.0 17.0 12.0 12.0 14.0 19.0 имен атрибутов (как и в рассмотренной выше операции декартова произведения) и О опреде- ляется так же, как и в операции выборки. Тогда е)-соединением отношения А по атрибуту Х с отношением В по атрибугу У называется результат вычисления следующею выражения.
( А Т1МЕЯ В ) ИНЕНЕ Х О У Другими словами, О-соединение — это отношение с тем же заголовком, что и при декартовом произведении отношений А и В, и с телом, содержащим множество кортежей 1, таких, что кортеж Е принадлежит этому декартову произведению и вычисление условия Х О У для кортежа б дает значение истина. В качестве примера предположим, что необходима вычислить "больше чаи"- соединение отношения Я по атрибуту С1ТУ с отношением Р по атрибуту С1ТУ (предполагается, что операция ">" имеет смысл для сравнения названий городов и интерпретируется просто как "далее в алфавитном порядке").
Соответствующим выражением реляционной алгебры будет следующее. ( ( Я ЕЕНАМЕ С1ТУ АЯ ЯС1ТУ ) Т1МЕЯ ( Р НЕМАНЕ С1ТУ АЯ РСПУ ) ] ИНЕВЕ ЯСПУ > РС1ТУ Обратите внимание на переименование атрибутов в этом примере. Конечно, достаточно было бы переименовать лишь один из двух атрибутов СПУ. Единственный смысл двойного переименования — это симметрия. Результат вычисления данного выражения показан на рис. 6.7. Я№ Яг)АМЕ Р№ Р!ч'АМЕ ЯТАТ()Я ЯС1Т с' ЖЕ1ОНТ РС1Т"с' СОТ ОК Рис. 6.7. "Больше чем"-соединение отношений поставщиков и деталей но атрибуту названия города Если условие О является условием "равно", то О-соединение называется равно- соединением.
Из определения следует, что результат равно-соединения должен включать два атрибута, значения которых должны быть равны в каждом кортеже отношения. Если исключить один из этих атрибутов (с помощью операции проекции), результатом будет обычное естественное соединение! Например, выражение, представляющее естественное соединение отношений поставщиков и деталей (по атрибуту города) Я 101И Р, эквивалентно следующему более сложному выражению.
( ( Я ТУМЕЯ ( Р НЕМАНЕ СПУ АЯ РСПУ ] ) ИНЕНЕ С1ТУ - "РС1ТУ ) ( АЬЪ ВНТ С1ТУ ) Замечание. В языке Тцсопа) Р нет прямой поддержки оператора О-соединения, поскольку он не так уж часто используется на практике и, как мы уже видели, не является примитивным. 206 Часть 11. Реляционная модель Я2 Я2 Я2 ЯЗ ЯЗ ЯЗ Запев Запев Запев В1а1се В!а1се В! а1се 10 10 10 30 30 30 Раг1я Рапя Рапя Рапя Рапя Раггя Р1 Р4 РВ Р1 Р4 Рб хцс Ясгесч СоН )чцг Ясгесч Со Кед Кед Кес1 Кед Кес1 Кед 12 14 19 12 14 19 Еопдоп Еопдоп 1.опдоп Еопдоп Еопдоп Ьопдоп Деление В (6.3) вводятся два разных оператора деления — Яшай Р»чЫе и Огеас Р»ч»де. В языке Тц(она! Р оператору <деление>, список <рег> которого состоит только из одного параметра <реляционное вираиение>, соответствует операция Бшай Р»ч»де, а оператору <деление>, список <рег> которого состоит из двух разделенных запятыми параметров <реляционное внрииение>, соответствует операция Огеас Р!ч!де.
Приведенное далее описание относится только к частному ограниченному случаю операции Бшай Р»чие. Оператор Огеас РгкЫе и подробности, касающиеся операции Бшай Р»чЫе, приводятся в [6.3). Необходимо сказать, что рассмотренная здесь версия оператора Бшай Р|чЫе отличается от оригинального оператора, предложенного Коддом. Фактически зто улучшенная версия, в которой исправлены недостатки, вызывавшие трудности при работе с пустыми отношениями.
Данная версия также отличается от оператора Бшай Р!чЫе, рассмотренного в нескольких первых изданиях настоящей книги. Дадим теперь определение оператора деления. Пусть отношения й и В имеют заголовки ( Х1, Х2, ... , Хя ) и ( 11, 12, ... , Хп ) соответственно (т.е. заголовки отношений я и В не пересекаются). Пусть также отношение С имеет следующий заголовок. ( Х1, Х2, ..., Хц, 11, Х2, ..., Хл ) (Иначе говоря, заголовок отношения С является объединением заголовков отношений й и В.) Далее будем рассматривать множества ( Х1, Х2, ..., Хя ) и ( 11, Х2, Хп ) как составные атрибуты Х и Х соответственно.
Тогда результатом деления отношения А на отношение В по отношению С (что записывается как Л 01С71РЕВХ В РЕВ С, где отношение Ь представляет собой делимое, отношение  — делитель, а отношение С вЂ” "посредник") называется отношение с заголовком (Х) и телом, содержащим множество всех кортежей вила (Х:х), таких, что кортеж вида (Х:х, Х:у) принадлежит отношению В для всех кортежей вида (Х:у», принадлежащих отношению В. С Нестрого зто можно сформулировать так: результат содержит такие Х-значения нз отношения в, для которых соответствующие т'-значения из отношения С включают все 'т'-значения из отношения В.
На рис, 6.8 показаны некоторые простые примеры операции деления. В каждом случае делимое (отношение РЕМИ) — это проекция текущего значения переменной- отношения Б по атрибуту Б(», посредник (МЕР) — это проекция текущего значения переменной-отношения БР по атрибутам Б(» и Р$, а три делителя (отношеиия РОВ) — такие, как показано на рисунке. В частности, обратите внимание на последний пример, в котором делителем является отношение, содержащее номера всех известных в данный момент деталей.
В результате, очевидно, получим номера поставщиков, поставляющих все типы зтих деталей. Как видно из примера, оператор 01Ч1РЕВХ полезен именно для запросов такого рода. Более того, если запрос на обычном языке включает слово "все" ("определить поставщиков всех типов деталей" ), то почти наверняка понадобится использовать операцию деленияз.
Тем не менее следует отметить, что подобные запросы удобнее записывать в терминах реляционных сравнений (раздел 6.9). З Действительна, операция деления задумывалась Квддам как алгебраический аналог квантора всеобщности (глава 7С, а проекция — как алгебраический аналог квантара существования. го7 Глава б. Релиз(иониаи алгебра Рис. б.8.
Примеры оиераиии деления Ассоциативность и коммутативность Легко проверить, что операция объединения (ОИ1ОИ) ассоциативна, т.е. если л, В и С вЂ” произвольные реляционные выражения (дающие совместимые по типу результаты), то приведенные ниже два выражения логически эквивалентны. ( а ОИ10И В ) ОИ10И С А ОИ1ОИ ( В ОИ1ОИ С ) Следовательно, для удобства можно разрешить запись последовательных операторов обьединения без использования круглых скобок.
Поэтому предыдущие выражения можно однозначно упростить следующим образом. А ОИ10М В ОИ1ОИ С Аналогичные замечания можно сделать и для операций пересечения (?ИТЕКЯЕСТ), декартова произведения (Т?МЕЯ) и соединения (ЯО?И) (но не операции вычитания М1ИОЯ). Заметим также, что операции объединения (ОИ?ОИ), пересечения (?ИТЕНЯЕСТ), декартова произведения (Т1МЕЯ) и соединения (10?И) (но не операция вычитания М1ИОЯ) еще и коммутативны, т.е. выражения й ОИ?ОИ В и В ОИ?ОИ Ъ эквивалентны, что справедливо и для операций пересечения, декартова произведения и соединения.