39
Рис. 2-26. Пример операции деления
Итак, мы рассмотрели операции реляционной алгебры. Эти восемь операций (объединение,
пересечение, вычитание, декартово произведение, выборка, проекция, соединение, деление) не
представляют собой минимальный набор операций. Т.е. некоторые операции можно выразить через
другие операции, а именно – соединение, пересечение и деление. Например, соединение – это
проекция выборки декартова произведения. Таким образом, примитивными операциями, т.е.
которые нельзя выразить через другие операции, являются остальные пять операций: объединение,
вычитание, выборка, проекция, декартово произведение. Эти пять примитивных операций будут
составлять минимальный набор операций реляционной алгебры.
Однако на практике другие три операции (особенно соединение) настолько часто
используются, что имеет смысл обеспечить их непосредственную поддержку, несмотря на то, что они
не примитивны.
Примеры использования операций реляционной алгебры
Рассмотрим несколько примеров для демонстрации возможностей операций реляционной
алгебры.
I. Пусть даны три отношения с эквивалентными схемами: (ФИО, Должность, Отдел).
Отношение R1 содержит список сотрудников предприятия, работающих над проектом P1, R2 –
список сотрудников, работающих над проектом P2, R3 – список сотрудников, живущих во
Владивостоке. Сотрудники могут работать над несколькими проектами.
Составить формулы для следующих запросов:
1. Список сотрудников, живущих не во Владивостоке, т.е. это такие сотрудники, которые могут
содержаться в отношении R1 или R2 или обоих отношениях, но не входят в отношение R3
R1R2 \ R3 или (R1 \ R3) (R2 \ R3)
этот пример показывает, что один и тот запрос можно сформулировать несколькими способами
2. Список сотрудников, работающих над двумя проектами и живущих во Владивостоке, т.е. это
сотрудники, содержащиеся во всех трех отношениях
R1R2R3
3. Список сотрудников, работающих только над одним из проектов
(R1R2) \ (R1R2)
4. Список сотрудников, работающих только над одним из проектов, и живущих во Владивостоке
(R1R2) \ (R1R2) R3 или (R1R3)(R2R3) \ (R1R2)
II. Даны следующие отношения:
R1(Таб№, ФИО, Должность, Отдел) – список сотрудников по отделам
R2(Должность, Оклад) – должностные оклады
R3(Должность, Отдел) – штатные должности по отделам, т.е. какие должности должны быть в
каждом отделе.
Сотрудник может занимать несколько должностей в одном и том же или разных отделах.
Составить формулы для следующих запросов:
1. Табельные номера и ФИО сотрудников отдела “Бухгалтерия”
(R1[Отдел = “Бухгалтерия”]) [Таб№, ФИО]
2. ФИО сотрудников с окладом больше 3000 руб
(R1[R1.Должность = R2.Должность ∧ R2.Оклад > 3000]R2) [ФИО]
3. Список вакантных должностей в отделах
R3 \ (R1[Должность, Оклад])