Операция деления отношений
Эта операция наименее очевидна из всех операций реляционной алгебры Кодда и поэтому нуждается в более подробном объяснении. Пусть заданы два отношения – 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. Пример реляционного деления