Операция деления отношений

 

Эта операция наименее очевидна из всех операций реляционной алгебры Кодда и поэтому нуждается в более подробном объяснении. Пусть заданы два отношения – A с заголовком {a1, a2, ..., an, b1, b2, ..., bm} и B с заголовком {b1, b2, ..., bm}. Будем считать, что атрибут bi отношения A и атрибут bi отношения B (i = 1, 2, …, m) не только обладают одним и тем же именем, но и определены на одном и том же домене. Назовем множество атрибутов {aj} составным атрибутом a, а множество атрибутов {bj} – составным атрибутом b. После этого будем говорить о реляционном делении “бинарного” отношения A {a, b} на унарное отношение B {b}.

 

По определению результатом деления A на B (A DIVIDE BY B) является “унарное” отношение C {a}, тело которого состоит из кортежей v таких, что в теле отношения A содержатся кортежи v UNION w такие, что множество {w} включает тело отношения B. Операция реляционного деления не является примитивнрой и выражается через операции декартова произведения, взятия разности и проекции. Мы покажем это в следующей лекции.

 

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

 

Отношение НОМЕРА_ПРОЕКТОВ

 

ПРО_НОМ

 

Результат операции СЛУЖАЩИЕ DIVIDE BY НОМЕРА_ПРОЕКТОВ

 

СЛУ_НОМЕР СЛУ_ИМЯ СЛУ_ЗАРП
Иванов 22400.00
Петров 29600.00

 

Рис. 3.11. Пример реляционного деления