
- •3. Детализация реляционной модели данных
- •3.1. Определение и элементы реляционной модели
- •3.2 Связывание таблиц
- •3.2.1 Назначение и основные виды связывания таблиц
- •3.2.2 Межтабличная связь вида 1:1
- •3.2.3 Межтабличные связи вида 1:м и вида м:1
- •Межтабличная связь вида м:м
- •3.3 Контроль целостности связей
- •3.4 Теоретические языки запросов
- •3.5 Основы реляционной алгебры
- •3.5.1 Общая характеристика реляционной алгебры
- •3.5.2 Базовые теоретико-множественные операции реляционной алгебры Кодда
- •3.5.3 Специальные реляционные операции реляционной алгебры Кодда
- •3.5.4 Дополнительные операции реляционной алгебры
- •3.5.5Основные правила записи выраженийреляционной алгебры
- •3.6. Основы реляционного исчисления
- •3.6.1 Сущность реляционного исчисления и его соотношение с реляционной алгеброй
- •3.6.2 Реляционное исчисление, основанное на кортежах
- •3.6.3 Реляционное исчисление, основанное на доменах
- •3.7 Структурированный язык запросовSql
- •3.7.1 Общая характеристика и основные операторы языкаSql
- •3.7.2 Оператор создания таблицы
- •3.7.3 Оператор изменения структуры таблиц
- •3.7.4 Оператор удаления таблицы
- •3.7.5 Оператор создания индекса
- •3.7.6 Оператор удаления индекса
- •3.7.7Оператор создания представления
- •3.7.8 Оператор удаления представления
- •3.7.9 Оператор выборки записей
- •3.7.10 Оператор изменения записей
- •3.7.11 Оператор вставки новых записей
- •3.7.12 Оператор удаления записей
- •3.7.13 Некоторые важные функции sql
- •3.7.14 Триггеры, ограничения, правила и хранимые процедуры
- •3.7.14.1 Определения
- •3.7.14.2 Создание триггеров
- •3.7.14.3 Создание хранимых процедур
- •3.7.14.4 Создание правил и ограничений
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.
Существует два варианта исчислений: исчисление кортежей и исчисле- ние доменов. В первом случае для описания отношений используются переменные, допустимыми значениями которых являются кортежи отношения, а во втором случае — элементы домена.