Ответы на вопросы по Базам (1084490), страница 7
Текст из файла (страница 7)
Замечание. Естественное соединение эквивалентно следующей последовательности реляционных операций:
-
Переименовать одинаковые атрибуты в отношениях
-
Выполнить декартово произведение отношений
-
Выполнить выборку по совпадающим значениям атрибутов, имевших одинаковые имена
-
Выполнить проекцию, удалив повторяющиеся атрибуты
-
Переименовать атрибуты, вернув им первоначальные имена
Замечание. Можно выполнять последовательное естественное соединение нескольких отношений. Нетрудно проверить, что естественное соединение (как, впрочем, и соединение общего вида) обладает свойством ассоциативности, т.е.
поэтому такие соединения можно записывать, опуская скобки:
Пример 10. В предыдущем примере ответ на вопрос "какие детали поставляются поставщиками", более просто записывается в виде естественного соединения трех отношений
(для удобства просмотра порядок атрибутов изменен, это является допустимым по свойствам отношений):
| Номер поставщика PNUM | Наименование поставщика PNAME | Номер детали DNUM | Наименование детали DNAME | Поставляемое количество VOLUME |
| 1 | Иванов | 1 | Болт | 100 |
| 1 | Иванов | 2 | Гайка | 200 |
| 1 | Иванов | 3 | Винт | 300 |
| 2 | Петров | 1 | Болт | 150 |
| 2 | Петров | 2 | Гайка | 250 |
| 3 | Сидоров | 1 | Болт | 1000 |
Таблица 20 Отношение P JOIN PD JOIN D
Деление
Определение 11. Пусть даны отношения
и
, причем атрибуты
- общие для двух отношений. Делением отношений
на
называется отношение с заголовком
и телом, содержащим множество кортежей
, таких, что для всех кортежей
в отношении
найдется кортеж
.
Отношение
выступает в роли делимого, отношение
выступает в роли делителя. Деление отношений аналогично делению чисел с остатком.
Синтаксис операции деления:
Замечание. Типичные запросы, реализуемые с помощью операции деления, обычно в своей формулировке имеют слово "все" - "какие поставщики поставляют все детали?".
Пример 11. В примере с поставщиками, деталями и поставками ответим на вопрос, "какие поставщики поставляют все детали?".
В качестве делимого возьмем проекцию
, содержащую номера поставщиков и номера поставляемых ими деталей:
| Номер поставщика PNUM | Номер детали DNUM |
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
Таблица 21 Проекция X=PD[PNUM,DNUM]
В качестве делителя возьмем проекцию
, содержащую список номеров всех деталей (не обязательно поставляемых кем-либо):
| Номер детали DNUM |
| 1 |
| 2 |
| 3 |
Таблица 22 Проекция Y=D[DNUM]
Деление
дает список номеров поставщиков, поставляющих все детали:
| Номер поставщика PNUM |
| 1 |
Таблица 23 Отношение X DEVIDEBY Y
Оказалось, что только поставщик с номером 1 поставляет все детали.
















