4. Вычислительные возможности.
Несмотря на то что ранее об этом не упоминалось, в определённом нами реляционном исчислении уже есть аналоги алгебраических операторов EXTEND и SUMMARIZE, и вот почему.
- Одной из допустимых форм прототипа кортежа является параметр <операция выборки кортежа>, компонентами которого могут быть произвольные подпараметры <выражение>.
- В параметре <логическое выражение> сравниваемыми элементами могут быть произвольные подпараметры <выражение>.
- Первым или единственным аргументом в параметре <вызов обобщающей функции> является подпараметр <реляционная операция>.
4.1. Примеры.
Ø Для каждой детали выбрать номер и общий объём поставки в штуках
(PX.P#, SUM (SPX WHERE SPX.P# = PX.P#, QTY) AS TOTQTY)
Ø Определить общее количество поставляемых деталей
SUM (SPX, QTY) AS GRANDTOTAL)
Ø Определить номера и вес в граммах всех типов деталей, вес которых превышает 10000г
(PX.P#, PX.WEIGHT * 454 AS GMWT)
WHERE PX.WEIGHT * 454 > WEIGHT (10000)
Обратите внимание, что спецификация AS GMWT в прототипе кортежа даёт имя соответствующему атрибуту результата. Поэтому такое имя недоступно для использования в предложении WHERE и выражение PX.WEIGHT * 454 должно быть указано в двух местах.
5. Исчисление доменов.
Как указывалось в «Введении», реляционное исчисление, ориентированное на домены (или исчисление доменов), отличается от исчисления кортежей тем, что в нём вместо переменных кортежей используется переменные доменов, т.е. переменные, принимающие свои значения в пределах домена, а не отношения. С практической точки зрения большинство очевидных различий между версиями исчисления доменов и исчисления кортежей основано на том, что версия для доменов поддерживает форму параметра <логическое выражение>, который мы будем называть условием принадлежности. В общем виде условие принадлежности можно записать так.
R (пара, пара, …)
Здесь R─ имя отношения, а каждый параметр пара имеет вид A: v, где A ─ атрибут отношения R, а v ─ имя переменной домена или литерал. Проверка условия даёт значение истина тогда и только тогда, когда в текущем значении отношения R существует кортеж, имеющий указанные значения для указанных атрибутов. Например, рассмотрим результат вычисления следующего выражения.
SP (S# : S# (‘S1’), P# : P# (‘P1’) )
Он будет иметь значение истина тогда и только тогда, когда в отношении SP будет существовать кортеж со значением атрибута S#, равным ‘S1’, и значением атрибута P#, равным ‘P1’. Аналогично условие принадлежности
SP (S# : SX, P# : PX)
принимает значение истина тогда и только тогда, когда в отношении SP существует кортеж со значением атрибута S#, эквивалентным текущему значению переменной домена PX (опять же, какому бы ни было).
Далее будем подразумевать существования следующих переменных доменов.
Домен Переменная домена
S# SX, SY, …
P# PX, PY, …
NAME NAMEX, NAMEY, …
COLOR COLORX, COLORY, …
WEIGHT WEIGHTX, WEIGHTY, …
QTY QTYX, QTYY, …
CHAR CITYX, CITYY, …
INTEGER STATUSX, STATUSY, …
Ниже приведено несколько примеров выражений исчисления доменов.
SX
SX WHERE S (S# : SX)
SX WHERE S (S# : SX, CITY : ‘London’)
(SX, CITYX) WHERE S (S# : SX, CITY : ‘London’)
AND SP (S# : SX, P# : P# (‘P2’) )
(SX,PX) WHERE S (S# : SX, CITY : CITYX)
AND P (P# : PX, CITY : CITYY)
AND CITYX ≠ CITYY
Если говорить нестрого, первое выражение означает множество всех номеров поставщиков, второе ─ множество всех номеров поставщиков из Лондона. Следующее выражение ─ это выраженный в терминах исчисления доменов запрос «Определить номера поставщиков и названия городов, в которых находятся поставщики детали с номером ‘P2’» (вспомните, что в этом запросе, выраженном в терминах исчисления кортежей, использовался квантор существования). И последнее выражение ─ это представленный в терминах исчисления доменов запрос «Найти все такие пары номеров поставщиков и номеров деталей, для которых поставщик и деталь находятся в одном городе».
5.1. Примеры.
Ø Найти все такие пары номеров поставщиков, в которых два поставщика находятся в одном городе
(SX AS SA, SY AS SB) WHERE EXISTS CITYZ
(S (S# : SX, CITY : CITYZ) AND
S (S# : SY, CITY : CITYZ) AND
SX < SY)
Ø Определить имена поставщиков по крайней мере одной красной детали
NAMEX WHERE EXISTS SX EXISTS PX
(S (S# : SX, SNAME : NAMEX)
AND SP (S# : SX, P# : PX)
AND P (P# : PX, COLOR : COLOR (‘Red’) ) )
Ø Выбрать имена поставщиков всех типов деталей
NAMEX WHERE EXISTS SX (S (S# : SX, SNAME : NAMEX)
AND FORALL PX (IF P (P# : PX)
THEN SP (S# : SX, P# : PX)
END IF)
... ) AND FORALL СОТР2 (СОТР1.СОТР_ЗАРП > СОТР2.СОТР_ЗАРП) Здесь мы имеем два связанных вхождения переменной СОТР2 с совершенно разным смыслом. 5.2.2. Целевые списки и выражения реляционного исчисления Итак, WFF обеспечивают средства формулировки условия выборки из отношений БД. Чтобы можно было использовать исчисление для реальной работы с БД, требуется еще один компонент, который определяет ...
... 2935 Петров 144,000 310 2936 Сидоров 92,000 313 2937 Федоров 110,000 310 2938 Иванова 112,000 315 Нормализованные отношения составляют основу классического реляционного подхода к организации баз данных. Они обладают некоторыми ограничениями (не любую информацию удобно представлять в виде плоских таблиц), но существенно упрощают манипулирование данными. Рассмотрим, например, два ...
... , но не совпадающие понятия. Различия между отношениями и таблицами будут рассмотрены ниже. Термины, которыми оперирует реляционная модель данных, имеют соответствующие "табличные" синонимы: Реляционный термин Соответствующий "табличный" термин База данных Набор таблиц Схема базы данных Набор заголовков таблиц Отношение Таблица Заголовок отношения Заголовок таблицы Тело ...
... став вторичного ключа, не может принимать значение NULL. Перекрывающиеся ключи — сложные ключи, которые имеют один или несколько общих столбцов. Связанные отношения В реляционной модели данные представляются в виде совокупности взаимосвязанных таблиц. Подобное взаимоотношение между таблицами называется связью (rilationship). Таким образом, еще одним важным понятием реляционной модели является ...
0 комментариев