Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
101
Добавлен:
15.06.2014
Размер:
1.7 Mб
Скачать

3.5.5Основные правила записи выраженийреляционной алгебры

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

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

При записи произвольного выражения реляционной алгебры надо принимать во внимание следующее.

1. В реляционной алгебре должен быть определен приоритет выполнения операций (например, операция пересечение более приоритетна, чем операция объединение), который нужно учитывать при записи выражений. Для изменения порядка выполнения операций в выражениях можно использовать круглые скобки.

2. Существуют тождественные преобразования, позволяющие по-разному записывать одно и то же выражение. Например, следующие выра­жения эквивалентны (здесь А — отношение, С, Cl, C2 — выражения):

A WHERE Cl AND C2 и (A WHERE Cl) INTERSECT (A WHERE C2),

A WHERE Cl OR С2 и (A WHERE Cl) UNION (A WHERE C2),

A WHERE NOT С и A MINUS (A WHERE C).

3. Составляя выражение, нужно обеспечивать совместимость участвующих в операциях отношений. При необходимости изменения заголов­ков следует выполнять переименование атрибутов.

3.6. Основы реляционного исчисления

3.6.1 Сущность реляционного исчисления и его соотношение с реляционной алгеброй

Как отмечалось ранее, принципиальное различие между реляционной алгеброй и реляционным исчислением состоит в том, что в первом случае процесс получения искомого результата описывается явным образом путем указания набора операций, которые надо выполнить для получения результата, а во втором — указываются свойства искомого отношения без конкретизации процедуры его получения.

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

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

Пусть запрос выглядит следующим образом: «Получить номера и города поставщиков, выпускающих деталь Р2».

Словесно алгебраическая версия этого запроса описывается так:

  • образовать естественное соединение отношений SиSPпо атрибуту П#;

  • выбрать из результата этого соединения кортежи с деталью Р2 (в поле Д# должна быть строка Р2);

  • спроецировать результат предыдущей операции на атрибуты П# и Город_П.

Этот же запрос в терминах реляционного исчисления можно сформули­ровать примерно так: «Получить атрибуты П# и Город_П для таких постав­щиков, для которых существует поставка в отношенииSPс тем же значени­ем атрибута П# и со значением Р2 атрибута Д#».

Результатом выполнения запроса будет отношение Rвида:

П#

Город_П

S1

Москва

S2

Киев

S3

Киев

S4

Москва

Читатель может самостоятельно убедиться в этом, проделав описанные выше операции реляционной алгебры.

Преимуществом реляционного исчисления перед реляционной алгеброй можно считать то, что пользователю не требуется самому строить алгоритм выполнения запроса. Программа СУБД (при достаточной ее интеллекту­альности) сама строит эффективный алгоритм.

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

• выбрать из отношения SP кортежи, относящиеся к детали Р2;

• выполнить естественное соединение отношения S и отношения, полученного на предыдущем шаге;

• спроецировать текущее отношение на атрибуты П# и Город_П.

Экономия памяти при реализации этого алгоритма в сравнении с перво­начальным вариантом достигается за счет снижения размерности участву­ющих в операциях временных таблиц, необходимых для хранения проме­жуточных результатов. Если в предыдущем случае размерность временной таблицы была 12*6 (12 строк на 6 колонок), то в последнем случае — 4*6.

Математической основой реляционного исчисления является исчис­ление предикатов — один из разделов математической логики. Понятие реляционного исчисления как языка работы с базами данных впервые предложено Коддом. Им же был разработан язык ALPHA — прототип про­граммно реализованного языка QUEL, который некоторое время конкурировал с языком SQL.

Существует два варианта исчислений: исчисление кортежей и исчисле- ние доменов. В первом случае для описания отношений используются пе­ременные, допустимыми значениями которых являются кортежи отношения, а во втором случае — элементы домена.