Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
114
Добавлен:
16.03.2016
Размер:
5.67 Mб
Скачать

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

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

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

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

4.5. Заключение

В завершение лекции хочу отметить несколько моментов. Прежде всего, заметим, что алгебра Кодда была представлена не в ее оригинальной форме, а с некоторыми существенными коррективами, внесенными Кристофером Дейтом. С моей точки зрения, одной из наиболее значительных корректив было добавление тривиальной на первый взгляд операции переименования атрибутов. Когда Эдгар Кодд в конце 1960-х гг. впервые опубликовал свою алгебру, основное внимание в ней уделялось тому, как конструируются результирующие множества кортежей, т. е. что представляют собой тела результатов операций. Гораздо меньше внимания уделялось заголовкам отношений-результатов. Фактически Кодд пытался применить для именования атрибутов результатов операций точечную нотацию, используя для уточнения имен атрибутов имена исходных отношений-операндов. При наличии произвольно сложных и длинных алгебраических выражений этот путь, в лучшем случае, вел к порождению длинных и трудных для восприятия имен. Очевидно, что введение операции переименования атрибутов позволяет легко справиться с этой проблемой.

Далее, алгебра Кодда исключительно избыточна. Операции пересечения, декартова произведения и естественного соединения, на самом деле, являются частными случаями одной более общей операции, о которой пойдет речь в следующей лекции. Введение операции декартова произведения в качестве базовой операции алгебры может ввести в заблуждение неопытных студентов и читателей, не осознающих практическую бессмысленность этой операции.

Почему же мы начали обсуждение базовых манипуляционных механизмов реляционной модели данных с этой небезупречной и несколько устаревшей алгебры? Конечно, прежде всего, из уважения к заслугам доктора Эдгара Кодда, вклад которого в современную технологию баз данных невозможно переоценить. Более практические соображения, повлиявшие на наше решение начать обсуждение с алгебры Кодда, заключались в том, что семантика языка SQL во многом базируется именно на этой алгебре, и нам будет проще изучать SQL, предварительно познакомившись с ней.