Скачиваний:
147
Добавлен:
02.05.2014
Размер:
2.66 Mб
Скачать

7.5. Вычислительные возможности

Несмотря на то что ранее об этом не упоминалось, в определенном нами реляци- онном исчислении уже есть аналоги алгебраических операторов EXTEND и SUMMARIZE, и вот почему.

  • Одной из допустимых форм прототипа кортежа является параметр операция выборки кортежа>, компонентами которого могут быть произвольные подпара- метры <выражениё>.

  • В параметре <логическое выражениё> сравниваемыми элементами могут быть произвольные подпараметры <выражение>.

  • Первым или единственным аргументом в параметре <вызов обобщающей функции> является подпараметр реляционная операция?.

Замечание. Здесь мы ссылаемся на полное определение языка Tutorial D, которое приводится в [3.3].

Мы считаем, что не стоит приводить здесь все имеющие место синтаксические и се- мантические подробности; достаточно лишь рассмотреть несколько типичных примеров (сами примеры также несколько упрощены).

7.5.1. Определить номера и вес в граммах всех типов деталей, вес которых превышает 10 ооо г

( PX.Pi, РХ.WEIGHT * 454 AS GMWT )

WHERE PX.WEIGHT * 454 > WEIGHT ( 10000 )

Обратите внимание, что спецификация AS GMWT в прототипе кортежа дает имя соответствующему атрибуту результата. Поэтому такое имя недоступно для ис- пользования в предложении WHERE и выражение РХ.WEIGHT * 454 должно быть ука- зано в двух местах.

7.5.2. Выбрать сведения обо всех поставщиках, добавив для каждого из них литеральное значение

* Поставщик'

( SX, 'Поставщик' AS TAG )

7.5.3. Выбрать сведения о каждой поставке и указать полные данные о входящих в нее типах деталей и общий вес поставки

( SPX, PX.WEIGHT * SPX.QTY ) AS SHIPWT WHERE PX.Pi = SPX.Pi

7.5.4. Для каждой детали выбрать номер и общий объем поставки в штуках

( PX.Pi, SUM ( SPX WHERE SPX.Pi = PX.Pi, QTY ) AS TOTQTY )

7.5.5. Определить общее количество поставляемых деталей

SUM (SPX, QTY ) AS GRANDTOTAL )

7.5.6. Для каждого поставщика указать номер и общий объем поставки в штуках

( SX.Si, COUNT ( SPX WHERE SPX.Si = SX.Si J AS i_0F_PARTS )

7.5.7. Указать названия городов, в которых находится более пяти красных деталей

RANGEVAR PY RANGES OVER Р; PX.CITY

WHERE COUNT ( PY WHERE PY.CITY = PX.CITY

AND PY.COLOR = COLOR ( 'Red' ) ) > 5

7.6. Исчисление доменов

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

R ( пара, пара, ... )

Здесь R— имя переменной-отношения, а каждый параметр пара имеет вид A:v, где А — атрибут переменной-отношения R, a v — имя переменной домена или литерал. Про-

верка условия дает значение истина тогда и только тогда, когда в текущем значении пе- ременной-отношения R существует кортеж, имеющий указанные значения для указанных атрибутов. Например, рассмотрим результат вычисления следующего выражения.

SP ( S§:Sf('Sl'), Р#:Р#('PI') )

Он будет иметь значение истина тогда и только тогда, когда в переменной- отношении SP будет существовать кортеж со значением атрибута St, равным ' S1', и зна- чением атрибута Pt, равным 'Р1'. Аналогично условие принадлежности

SP ( Si:SX, Р#:РХ )

принимает значение истина тогда и только тогда, когда в переменной-отношении SP су- ществует кортеж со значением атрибута St, эквивалентным текущему значению пере- менной домена SX (какому бы то ни было), и значением атрибута Pt, эквивалентным те- кущему значению переменной домена РХ (опять же, какому бы то ни было). Далее будем подразумевать существование следующих переменных доменов.

Домен

Переменная домена

St

SX, SY, ...

Pt

PX, PY, ...

NAME

NAMEX, NAMEY, ...

COLOR

COLORX, COLORY, ...

WEIGHT

WEIGHTX, WEIGHTY, ..

QTY

QTYX, QTYY, ...

CHAR

CITYX, CITYY, ...

INTEGER

STATUSX, STATUSY, ..

Ниже приведено несколько примеров выражений исчисления доменов. SX

SX WHERE S ( St:SX )

SX WHERE S ( St:SX, CITY:'London' ) ( SX, CITYX ) WHERE S ( S#:SX, CITY:'London' ) AND SP ( St:SX, Pi: Pi ( 'P2' ) )

( SX, PX ) WHERE S (Si:SX, CITY:CITYX ) AND P ( Pi:PX, CITY:CITYY ) AND CITYX * CITYY

Если говорить нестрого, первое выражение означает множество всех номеров по- ставщиков, второе — множество всех номеров поставщиков в переменной- отношении S, третье — подмножество номеров поставщиков из Лондона. Следую- щее выражение — это выраженный в терминах исчисления доменов запрос "Определить номера поставщиков и названия городов, в которых находятся постав- щики детали с номером 'Р2'" (вспомните, что в этом запросе, выраженном в терми- нах исчисления кортежей, использовался квантор существования). И последнее вы-

ражение — это представленный в терминах исчисления доменов запрос "Найти все такие пары номеров поставщиков и номеров деталей, для которых поставщик и де- таль находятся в одном городе".

Ниже приведено несколько примеров из числа рассмотренных в разделе 7.3, но на этот раз выраженных в терминах исчисления доменов (часть из них несколько изменена).

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]