- •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.6.2 Реляционное исчисление, основанное на кортежах
Реляционное исчисление, основанное на кортежах (исчисление кортежей), предложено и реализовано при разработке упоминавшегося языкаALPHA.В нем, как и в процедурных языках программирования, сначала нужно описать используемые переменные, а затем записывать некоторые выражения.
Описательную часть исчисления можно представить в виде:
RANGE OF <переменная> IS <список>,
где прописными буквами записаны ключевые слова языка, <переменная> - идентификатор переменной кортежа (области значений), а <список> — последовательность одного или более элементов, разделенных запятыми, т. е. конструкция вида: х1[, х2[...,xn ] ...].
Вся конструкция RANGE указывает идентификатор переменной и область ее допустимых значений. Список элементов х1[, х2[..,xn ]...] содержит элементы, каждый из которых является либо отношением, либо выражением над отношением (порядок записи выражений описывается далее). Все элементы списка должны быть совместимы по типу, т. е. соответствующиеэлементам отношения должны иметь идентичные заголовки. Область допустимых значений <переменной> образуется путем объединения значений всех элементов списка. Так, запись вида RANGE OF Т IS X1,X2 означает, что область определения переменной Т включает в себя все значения изотношения, которое является объединением отношений XI и Х2.
Пример 1. Варианты описаний.
RANGEOFSXISS;
RANGE OF SPX IS SP;
RANGE OF SY IS (SX) WHERE SХ.Город_П = 'Москва',
(SX) WHERE EXISTS SPX (SРХ.П# = SХ. П# AND SРХ.Д# = 'P1');
Переменные SX и SPX в первых двух примерах определены на отношениях S и SP соответственно (рис. 3.7). Третий пример иллюстрирует запись выражений при определении переменной кортежа. Переменная SY здесь может принимать значения из множества кортежей отношения Sдля поставщиков из Москвы или поставщиков, которые поставляют деталь Р1 (или для тех и других).
Синтаксис выражений исчисления рассматривается ниже. Запись выражения, формулирующего запрос на языке исчисления кортежей с помощьюформы Бэкуса-Наура, упрощенно можно представить следующим образом:
<выражение> ::= (y1[, у2[..., уn]...]) [WHEREwff]
у ::= {<перемениая> | <переменная>.<атрибут> } [ AS <атрибут> ]
wff ::= <условие> |
NOT wff |
<условие> ANDwff|
<условие> OR wff |
IF <условие> THEN wff |
EXISTS<переменная> (wff) |
FORALL<переменная> (wff) |
(wff)
Общий смысл записи выражения состоит в перечислении атрибутов результирующего (целевого) отношения, атрибуты которого должны удовлетворять условию истинности формулы wff(wellformulatedformula— правильно построенная формула). Список атрибутов целевого отношения, илицелевой список, в терминах реляционной алгебры по существу определяет операцию проекции, а формулаwff— селекцию кортежей.
В паре <переменная>.<атрибут> первая составляющая служит для указания переменной кортежа (определенной конструкцией RANGE), а вторая — для определения атрибута отношения, на котором изменяется переменная кортежа. Необязательная часть "AS <атрибут>" используется для переименования целевого отношения. Если она отсутствует, то имя атрибута целевого отношения наследуется от соответствующего имени атрибута исходного отношения.
Употребление в качестве элемента целевого отношения просто имени переменной Т равносильно перечислению в списке всех соответствующих атрибутов, т. е. Т.А1 , Т.А2, ..., Т.Аn , где Аi, А2,..., Аn — атрибуты отношения, сопоставляемого с переменной Т.
Пример 2. Варианты записи пары <переменная>.<атрибут>.
sx.П#
SХ.П#ASГород_Поставщика
SX
SX.П#, SХ.Город_П AS Город_Поставщика, РХ.Д#, РХ.Город_Д# AS Город_Детали
В приведенном определении wff <условие> представляет собой либо формулуwff, заключенную в скобки, либо простое сравнение вида:
<операнд1> Θ <операнд2>,
где в качестве любого операнда выступает переменная или скалярная константа, а символ Θ обозначает операцию сравнения =, ≠, >, ≥, <, ≤ и т. д.
Ключевые слова NOT, AND и OR обозначают логические операции соответственно: И, НЕ и ИЛИ. Ключевые словаIFиTHENпереводятся соответственно «если» и «то». И наконец, ключевые слова EXISTS и FORALL называются кванторами. Первый из них — квантор существования, а второй -квантор всеобщности. Рассмотрим эти кванторы несколько подробнее.
Формула wffвида:EXISTSx(f) означает; «Существует по крайнеймере одно такое значение переменной х, что вычисление формулы f дает значение истина». Выражение вида: FORALL x (f) интерпретируется как высказывание: «Для всех значений переменной х вычисление формулы f дает значение истина». В общем случае переменные кортежей в формулах могут быть свободными или связанными. В формулах EXISTS x (f) и FORALL x (f) переменные кортежей х всегда являются связанными.
Пример 3. Запись выражения.
Приведем запись выражения, соответствующего запросу: "Получить имена поставщиков, которые поставляют все детали".
SХ.Город_П WHERE FORALL PX (EXISTS SPX
(SРХ.П# = SХ.П# AND SРХ.Д# = SХ.Д#))
Равносильное этому выражение выглядит так:
SХ.Город_П WHERE NOT EXISTS PX (NOT EXISTS SPX
(SРХ.П# = SХ.П# AND SРХ.Д# = SХ.Д# ))
Описанное исчисление не обладает вычислительной полнотой, так как не позволяет выполнять вычисления, связанные с обработкой данных в базах. Добавление вычислительных функций в это исчисление можно реализовать путем расширения определения операндов сравнения и элементов целевого списка таким образом, чтобы они допускали использование скалярных выражений с литералами, ссылками на атрибуты и итоговыми функциями. В качестве итоговых могут выступать следующие функции:COUNT (количество), SUM (сумма), AVG (среднее), МАХ (максимальное), MIN (минимальное). Для целевых элементов целесообразно использовать спецификацию вида "AS <имя атрибута>", позволяющую явно задать имя результирующему атрибуту, если нет очевидного наследуемого имени.
Пример 4. Запись запроса.
Пусть требуется получить информацию о каждой поставке с полными данными о деталях и общем весе поставки. Запрос на дополненном функциями языке реляционного исчисления кортежей может выглядеть следующим образом:
(SРХ.П#, SРХ.Количество, РХ, РХ.Вес * SРХ.Количество AS Общий_Вес) WHERE РХ.Д# = SРХ.Д#