Деление

Естественное соединение

Пусть даны отношения 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