Реляционное исчисление
Примитивные реляционные операторы
Зависимые реляционные операторы
Как было сказано в начале главы, не все операторы реляционной алгебры являются независимыми - некоторые из них выражаются через другие реляционные операторы.
Оператор соединения
Оператор соединения определяется через операторы декартового произведения и выборки. Для оператора естественного соединения добавляется оператор проекции.
Оператор пересечения
Оператор пересечения выражается через вычитание следующим образом:
A INTERSECT B = A MINUS (A MINUS B)
Оператор деления
Оператор деления выражается через операторы вычитания, декартового произведения и проекции следующим образом:
A DEVIDEBY B = A[X] MINUS((A[X] TIMES B)MINUS A)[X]
Таким образом показано, что операторы соединения, пересечения и деления можно выразить через другие реляционные операторы, т.е. эти операторы не являются примитивными.
Оставшиеся реляционные операторы (объединение, вычитание, декартово произведение, выборка, проекция) являются независимымиоператорами- их нельзя выразить друг через друга. Еще их иногда называют примитивными.
Оператор декартового произведения - это единственный оператор, увеличивающий количество атрибутов, поэтому его нельзя выразить через объединение, вычитание, выборку, проекцию.
Оператор проекции - единственный оператор, уменьшающий количество атрибутов, поэтому его нельзя выразить через объединение, вычитание, декартово произведение, выборку.
Оператор выборки - единственный оператор, позволяющий проводить сравнения по атрибутам отношения, поэтому его нельзя выразить через объединение, вычитание, декартово произведение, проекцию.
Операторы объединения и вычитания – также являются примитивными реляционными операторами.
В реляционном исчислении используется совершенно иной подход, чем в реляционной алгебре. Однако, эти два языка логически эквивалентны. Это означает, что любой запрос, который можно выполнить на одном языке, можно выполнить и на другом.
Рассмотрим запрос:
Кто из торговых агентов работает в Ярославле?
В реляционном исчислении этот запрос выполняется следующим образом:
{r.SalpersName : r IN SalesPerson AND r.Office = ‘Ярославль’}
Фигурные скобки означают, что ответом на запрос будет множество значений данных. Приведенное здесь решение иллюстрирует почти все элементы реляционного исчисления. Объясним значение частей нашего решения:
1) r – это переменная, обозначающая произвольную строку. Таблица, из которой берется r, определяется выражением «r IN SalesPerson», которое обозначает, что r строка таблицы SalesPerson. Далее будем использовать для обозначения строк маленькие буквы латинского алфавита;
2) r.SalpersName – значение атрибута SalpersName в строке r;
3) Двоеточие разделяет целевой список и определяющее выражение;
4) «r IN SalesPerson» объясняется в п. 1;
5) «r.Office = ‘Ярославль’» означает, что значение атрибута Office в строке r равно ‘Ярославль’.