Деление
Естественное соединение
Пусть даны отношения A(A1, A2,…,An , X1, X2,…,Xn) и B(X1, X2,…,Xn , B1, B2,…,Bm), имеющие одинаковые атрибуты X1, X2,…,Xn (т.е. атрибуты с одинаковыми именами и определенные на одинаковых доменах). Тогда естественным соединением отношений A и B называется отношение с заголовком (A1, A2,…,An , X1, X2,…,Xn , B1, B2,…,Bm) и телом, содержащим множество кортежей (a1, a2,…, an, x1, x2,…, xn, b1, b2…, bn) таких, что (a1, a2,…, an, x1, x2,…, xn,)ÎA и (x1, x2,…, xn, b1,b2…, bn)ÎB. Естественное соединение настолько важно, что для него используют специальный синтаксис: A JOIN B. Естественное соединение производится по всем одинаковым атрибутам.
Естественное соединение эквивалентно следующей последовательности реляционных операций:
1. Переименовать одинаковые атрибуты в отношениях
2. Выполнить декартово произведение отношений
3. Выполнить выборку по совпадающим значениям атрибутов, имевших одинаковые имена
4. Выполнить проекцию, удалив повторяющиеся атрибуты
5. Переименовать атрибуты, вернув им первоначальные имена
Пример. В предыдущем примере ответ на вопрос "какие детали поставляются поставщиками", более просто записывается в виде естественного соединения трех отношений P JOIN PD JOIN D (для удобства просмотра порядок атрибутов изменен, это является допустимым по свойствам отношений):
Номер поставщика PNUM | Наименование поставщика PNAME | Номердетали DNUM | Наименование детали DNAME | Поставляемое количество VOLUME |
Иванов | Болт | |||
Иванов | Гайка | |||
Иванов | Винт | |||
Петров | Болт | |||
Петров | Гайка | |||
Сидоров | Болт |
Таблица 20 Отношение P JOIN PD JOIN D
Пусть даны отношения A(X1, X2,…, Xn , Y1, Y2,…,Ym) и B (Y1, Y2,…,Ym), причем атрибуты Y1,Y2,…,Ym - общие для двух отношений. Делением отношений A на B называется отношение с заголовком (X1, X2,…, Xn) и телом, содержащим множество кортежей (x1, x2,…, xn) таких, что для всех кортежей (y1, y2,…, ym)ÎB в отношении найдется кортеж (x1, x2,…, xn , y1, y2,…, ym). Отношение A выступает в роли делимого, отношение B выступает в роли делителя. Синтаксис операции деления: A DEVIDBY B.
Пример. В примере с поставщиками, деталями и поставками ответим на вопрос, "какие поставщики поставляют все детали?". В качестве делимого возьмем проекцию X=PD[PNUM, DNUM], содержащую номера поставщиков и номера поставляемых ими деталей:
Номер поставщика PNUM | Номер детали DNUM |
Таблица 21 Проекция X=PD[PNUM,DNUM]
В качестве делителя возьмем проекцию Y=D[DNUM], содержащую список номеров всех деталей (не обязательно поставляемых кем-либо):
Номер детали DNUM |
Таблица 22 Проекция Y=D[DNUM]
Деление дает список номеров поставщиков, поставляющих все детали:
Номер поставщика PNUM |
Таблица 23 Отношение X DEVIDEBY Y