Базы данных

Дополнительные реляционные операторы


Некоторые другие реляционные операторы заметно повышают функциональность реляционной алгебры. Наиболее полезными категориями являются операторы деления и операторы агрегирования и группировки.

Оператор деления используется для нахождения объектов, сочетающих в себе все элементы другого множества объектов. Например, можно воспользоваться делением для того, чтобы найти всех клиентов, которые брали напрокат определенное множество фильмов. На первом этапе создается множество, состоящее изо всех фильмов, бравшихся напрокат ранее всеми клиентами:

MoviesRented представляет собой множество пар атрибутов (accountld, movield), содержащих информацию о том, что.определенный клиент брал напрокат ранее некоторую кассету с определенным фильмом. В 6.9 (столбец а) приведен пример такой таблицы.

Если задано множество фильмов Movie, приведенное в 6.9 (столбец б), можно выполнить операцию деления MoviesRented на Movie, описываемую следующим выражением;

RentsAll <- MoviesRented -s- Movies

В результате выполнения этого выражения получится множество всех номеров счетов accountld, для которых в таблице MoviesRented присутствуют строки для каждого значения movield из таблицы Movies, как показано в 6.9 (столбец в). Только два клиента, номера счетов которых 101 и 102, брали напрокат оба фильма, составляющих таблицу Movies. Не имеет значения, что клиент с номером счета 101 брал напрокат и другие фильмы. Также не играет роли тот факт, что клиенты с номерами счетов 102 и 201 брали напрокат по одному из перечисленных фильмов.

Оператор деления можно определить, используя проекцию, разность и декартово произведение.

1. Accounts <— 7iaccountid(MoviesRented)

2. PossibleRentals <- Accounts x Movies

3. NonRentals <- PossibleRentals — MoviesRented

4. NonRenters <— 7taccountid(NonRentals)

5. RentsAll <— Accounts — NonRenters

Комментарии закрыты