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

5.3. Полнота Алгебры a

Покажем, что Алгебра A является полной, т. е. на основе введенных операций выражаются все операции алгебры Кодда, рассмотренной в предыдущей лекции.

К настоящему моменту в состав базовых операций Алгебры A входят операция <REMOVE>в качестве аналога операцииPROJECT, а также операция переименования атрибутов<RENAME>.UNIONявляется частным случаем операции<OR>,TIMES,INTERSECTиNATURAL JOIN– частные случаи операции<AND>. Нам осталось показать, что через операции Алгебры A выражаются операции взятия разностиMINUS, ограничения (WHERE), соединения общего вида (JOIN) и реляционного деления (DIVIDE BY).

5.3.1. Выводимость операции взятия разности

Покажем, что операция MINUSвыражается через другие операции Алгебры A. Для наглядности снова воспользуемся отношениямиСЛУЖАЩИЕ_В_ПРОЕКТЕ_1иСЛУЖАЩИЕ_В_ПРОЕКТЕ_2cрис. 5.3(для удобства повторим его в верхней частирис. 5.7). Для простоты (хотя это несущественно) будем предполагать, что множества значений доменов, на которых определены атрибутыСЛУ_НОМЕР,СЛУ_ИМЯ,СЛУ_ЗАРПиСЛУ_ОТД_НОМЕР, ограничены значениями, содержащимися в телах отношений. Также для удобства покажем результат операцииСЛУЖАЩИЕ_В_ПРОЕКТЕ_1 MINUS СЛУЖАЩИЕ_В_ПРОЕКТЕ_2нарис. 5.7a. Заметим, что тело результата содержит все кортежи первого операнда, кроме кортежей Иванова и Петрова, поскольку они входят и в тело второго операнда.

Посмотрим теперь, что является телом результата операции <NOT> СЛУЖАЩИЕ_В_ПРОЕКТЕ_2(рис. 5.7b). В него входят все кортежи, соответствующие схеме отношенияСЛУЖАЩИЕ_В_ПРОЕКТЕ_2(и схеме отношенияСЛУЖАЩИЕ_В_ПРОЕКТЕ_1), которые не входят в тело отношенияСЛУЖАЩИЕ_В_ПРОЕКТЕ_2. В том числе в тело результата этой операции входят и кортежи Сидорова, Федорова и Ивановой из тела отношенияСЛУЖАЩИЕ_В_ПРОЕКТЕ_1.

Тогда очевидно, что результат операции СЛУЖАЩИЕ_В_ПРОЕКТЕ_1 <AND> <NOT> СЛУЖАЩИЕ_В_ПРОЕКТЕ_2(пересечение тела первого операнда с телом результата операции<NOT>) является в точности тем же, что и результат операцииСЛУЖАЩИЕ_В_ПРОЕКТЕ_1 MINUS СЛУЖАЩИЕ_В_ПРОЕКТЕ_2(рис. 5.7c).

В общем случае нетрудно доказать, что если отношения r1иr2совместимы по объединению, тоr1 MINUS r2 = r1 <AND> <NOT> r2.

5.3.2. Интерпретация операции ограничения

В лекции 4 мы определяли операцию ограничения r WHERE comp, гдеr– отношение, аcomp– простое условие ограничения вида (a comp-op b), гдеаиb– имена атрибутов ограничиваемого отношения, для которых осмыслена операция сравненияcomp-op, либо вида (a comp-op const), гдеа– имя атрибута ограничиваемого отношения, аconst– литерально заданная константа. Операцией сравненияcomp-opможет быть «=», «», «>», «<», «», «». Покажем на нескольких примерах, как можно выразить операцию ограничения с помощью базовых операций Алгебры A для всех простых допустимых условий.

Для иллюстрации будем использовать отношение СЛУЖАЩИЕ_1 {СЛУ_НОМЕР, СЛУ_ИМЯ, СЛУ_ЗАРП, РУК_НОМ}(рис. 5.8). АтрибутРУК_НОМсодержит уникальные номера служащих, являющихся руководителями проектов, и определен на том же домене, что иСЛУ_НОМЕР. Мы снова предположим (для упрощения примеров), что множества значений доменов, на которых определены атрибуты отношенияСЛУЖАЩИЕ_1, ограничены значениями, содержащимися в теле этого отношения. Начнем с обсуждения операцииWHEREс условием видаa comp-op const.

Рис. 5.7.Выразимость операцииMINUSчерез операции<NOT>и<AND>

Предположим, что мы хотим найти всех служащих с заработной платой, равной 20000.00 руб. Возьмем отношениеЗАРП_20000 {СЛУ_ЗАРП}17). Мы видим, что результат операцииСЛУЖАЩИЕ_1 <AND> ЗАРП_20000в точности совпадает с результатом операцииСЛУЖАЩИЕ_1 WHERE СЛУ_ЗАРП = 20000.00(рис. 5.8).

Рис. 5.8.ВыражениеWHERE (a = const)через<AND>

Если требуется найти служащих, чья заработная плата превышает 20000.00 руб., то возьмем отношениеЗАРП_БОЛЬШЕ_2000018)(рис. 5.9). Тогда снова результат операцииСЛУЖАЩИЕ_1 <AND> ЗАРП_БОЛЬШЕ_20000.00будет совпадать с результатом операцииСЛУЖАЩИЕ_1 WHERE СЛУ_ЗАРП > 20000.00(рис. 5.9).

Понятно, что аналогичным образом выражаются через <AND>операции ограничения с условиями видаa comp_op const, в которыхcomp_opявляется «<», «» или «».

Некоторый особый случай представляет условие видаa const, и мы проиллюстрируем этот случай на примере запроса «Выбрать всех служащих, не получающих заработную плату в размере 22 000.00 руб.». Возьмем отношениеЗАРП_НЕ_2200019)(рис. 5.10). Результат операцииСЛУЖАЩИЕ_1 <AND> ЗАРП_НЕ_22000будет совпадать с результатом операцииСЛУЖАЩИЕ_1 WHERE СЛУ_ЗАРП 22000.00(рис. 5.10).

17 Здесь необходимо пояснить, что отношение ЗАРП_20000 в действительности представляет собой литеральную константу соответствующего типа отношений. Мы не вводим здесь строгого понятия типа отношения; для понимания данного подраздела нужно всего лишь осознать, что по своей природе отношение ЗАРП_20000 и числовой литерал 20000.00 не различаются.

18 Отношение ЗАРП_БОЛЬШЕ_20000 – это тоже литеральная константа того же типа отношения, что и ЗАРП_20000, однако мощность тела этого литерального отношения в общем случае (если бы мы не ввели ограничения на множество значений домена СЛУ_ЗАРП) могла бы быть очень большой.

Рис. 5.9. Выражение WHERE (a > const) через <AND>

Рис. 5.10. Выражение WHERE (a const) через <AND>

Теперь обратимся к ограничениям с простым условием видаa comp-op b. Опять начнем со случая, когдаcomp-op = «=». Предположим, что нам требуется найти данные о служащих, являющихся руководителями проектов, т. е. выполнить операциюСЛУЖАЩИЕ_1 WHERE СЛУ_НОМЕР = РУК_НОМ. Утверждается, что результат этой операции совпадает с результатом следующего выражения20):

19 Особенность этого случая состоит в том, что число кортежей в теле литеральной константы ЗАРП_НЕ_22000 всего лишь на единицу меньше мощности множества значений домена СЛУ_ЗАРП. Конечно, эта мощность конечна, поскольку мы имеем дело с компьютерными типами данных, но в общем случае может быть очень большой. Поэтому принципиальная возможность выражения операции ограничения через операцию реляционной конъюнкции не означает, что было бы разумно реализовывать ее таким образом на практике.

20 Конечно, тот же результат даст и выражение СЛУЖАЩИЕ_1 <AND> ((((СЛУЖАЩИЕ_1 <REMOVE> СЛУ_РУК) <REMOVE> СЛУ_ИМЯ) <REMOVE> СЛУ_ЗАРП) <RENAME> (СЛУ_НОМЕР, РУК_НОМ)).

СЛУЖАЩИЕ_1 <AND> ((((СЛУЖАЩИЕ_1 <REMOVE> СЛУ_НОМЕР) <REMOVE>

СЛУ_ИМЯ) <REMOVE> СЛУ_ЗАРП) <RENAME> (РУК_НОМ, СЛУ_НОМЕР))

Результат вычисления правого операнда операции <AND>и окончательный результат операции показаны нарис. 5.11.

Конечно же, можно выразить операциюСЛУЖАЩИЕ_1 WHERE СЛУ_НОМЕР = РУК_НОМчерез операцию<AND>, используя «константное» отношение. Для этого можно воспользоваться отношениемСЛУ_НОМЕР_РУК_НОМ21), показанным нарис. 5.12. Очевидно, что в результате выполнения операцииСЛУЖАЩИЕ_1 <AND> СЛУ_НОМЕР_РУК_НОМбудет получен тот же результат, что показан нарис. 5.11.

Рис. 5.11.  Выражение WHERE (a = b) через <REMOVE>, <RENAME> и <AND>

Чтобы показать возможность выполнения операции ограничения вида r WHERE (a > b), предположим, что имеется отношениеСЛУЖАЩИЕ_2 {СЛУ_НОМЕР, СЛУ_ИМЯ, СЛУ_ЗАРП, СЛУ_ПРЕМ}(рис. 5.12), причем атрибутСЛУ_ПРЕМсодержит значения премиального вознаграждения служащего. Естественно, атрибутыСЛУ_ЗАРПиСЛУ_ПРЕМопределены на одном и том же домене (напомним, что в целях наших примеров мы предполагаем, что множество значений доменов ограничено значениями, содержащимися в теле примерного отношения). Пусть нас интересуют данные о служащих, получающих дополнительные вознаграждения в размере, превышающем размер основной зарплаты, т. е. нам нужен результат операцииСЛУЖАЩИЕ_2 WHERE (СЛУ_ПРЕМ > СЛУ_ЗАРП).

Рис. 5.12.Константное отношениеСЛУ_НОМЕР_РУК_НОМ

Возьмем отношениеПРЕМ_БОЛЬШЕ_ЗАРП {СЛУ_ПРЕМ, СЛУ_ЗАРП}, тело которого включает все соответствующие заголовку кортежи{b, s}такие, чтоb > s. Другими словами, отношениеПРЕМ_БОЛЬШЕ_ЗАРПснова является литеральной константой типа отношения с двумя атрибутамиСЛУ_ПРЕМиСЛУ_ЗАРП. Конечно, даже в случае нашего примера мощность тела этого отношения достаточно велика22). Тело отношенияПРЕМ_БОЛЬШЕ_ЗАРПпоказано в средней частирис. 5.13.

Результат выполнения операции СЛУЖАЩИЕ_2 <AND> ПРЕМ_БОЛЬШЕ_ЗАРПпоказан в нижней частирис. 5.13. Мы видим, что он совпадает с результатом операцииСЛУЖАЩИЕ_2 WHERE (СЛУ_ПРЕМ > СЛУ_ЗАРП).

Аналогичным образом через операции Алгебры A выражаются операции ограничения, условия сравнения которых вида a comp_op bбазируются на операциях сравнения «<», «», «», «».

Рис. 5.13.ВыражениеWHERE (a > b)через<AND>

21 Конечно, в общем случае мощность тела такого константного отношения будет равна мощности соответствующего домена.

22 Легко убедиться, что в общем случае, если мощность общего домена атрибутов A и B равняется n, то мощность тела константного отношения A_БОЛЬШЕ_B будет составлять (n+1)n/2.