|
Программирование >> Хронологические базы данных
7.5.3. Выбрать сведения о каждой поставке и указать полные данные о входящих в нее типах деталей и общий вес поставки ( SPX, РХ.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 ) AS i OF 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, а v - имя переменной домена или литерал. Про- верка условия дает значение истина тогда и только тогда, когда в текущем значении переменной-отношения R существует кортеж, имеющий указанные значения для указанных атрибутов. Например, рассмотрим результат вычисления следующего выражения. SP ( Si:Si(Sl), Pi:Pi(Pl) ) Он будет иметь значение истина тогда и только тогда, когда в переменной-отношении SP будет существовать кортеж со значением атрибута Si, равным S1, и значением атрибута Pi, равным Р1. Аналогично условие принадлежности SP ( Si:SX, Р#:РХ ) принимает значение истина тогда и только тогда, когда в переменной-отношении SP существует кортеж со значением атрибута Si, эквивалентным текущему значению переменной домена SX (какому бы то ни было), и значением атрибута Pi, эквивалентным текущему значению переменной домена РХ (опять же, какому бы то ни было). Далее будем подразумевать существование следующих переменных доменов.
Ниже приведено несколько примеров выражений исчисления доменов. SX SX WHERE S ( Si:SX ) SX WHERE S ( Si:SX, CITY:London ) ( SX, CITYX ) WHERE S { S#:SX, CITY:London ) AND SP ( Si:SX, Pi: Pi ( P2 ) ) ( SX, PX ) WHERE S (S#:SX, CITY:CITYX ) AND P ( Pi:PX, CITY:CITYY ) AND CITYX Ф CITYY Если говорить нестрого, первое выражение означает множество всех номеров поставщиков, второе - множество всех номеров поставщиков в переменной-отношении S, третье - подмножество номеров поставщиков из Лондона. Следующее выражение - это выраженный в терминах исчисления доменов запрос Определить номера поставщиков и названия городов, в которых находятся поставщики детали с номером Р2 (вспомните, что в этом запросе, выраженном в терминах исчисления кортежей, использовался квантор существования). И последнее вы- ражение - это представленный в терминах исчисления доменов запрос Найти все такие пары номеров поставщиков и номеров деталей, для которых поставщик и деталь находятся в одном городе . Ниже приведено несколько примеров из числа рассмотренных в разделе 7.3, но на этот раз выраженных в терминах исчисления доменов (часть из них несколько изменена). 7.6.1. Выбрать номера поставщиков из Парижа со статусом, большим 20 SX WHERE EXISTS STATUSX (STATUSX > 20 AND S ( SitSX, STATUS:STATUSX, CITY:Paris ) ) Этот пример несколько неуклюж по сравнению с его аналогом, выраженным в терминах исчисления кортежей. Обратите внимание, что все еще требуется использовать кванторы. С другой стороны, существуют ситуации, когда верно обратное утверждение, что видно из более сложных примеров, приведенных ниже. 7.6.2. Найти все такие пары номеров поставщиков, в которых два поставщика находятся в одном городе ( SX AS SA, SY AS SB ) WHERE EXSIST CITYZ ( S ( Si:SX, CITY:CITYZ) AND S ( Si:SY, CITY:CITYZ) AND SX < SY ) 7.6.3. Определить имена поставщиков по крайней мере одной красной детали NAMEX WHERE EXISTS SX EXISTS PX ( S ( Si:SX, SNAME:NAMEX ) AND SP ( Si:SX, P#:PX ) AND P ( Pi:PX, COLOR:COLOR(Red) ) ) 7.6.4. Определить номера поставщиков всех типов деталей, поставляемых поставщиком с номером S2 NAMEX WHERE EXISTS SX EXISTS PX ( S ( S#:SX, SNAME:NAMEX ) AND SP ( Si:SX, Pi:PX ) AND SP ( Si:Si(S2), Pi:PX ) ) 7.6.5. Выбрать имена поставщиков всех типов деталей NAMEX WHERE EXISTS SX ( S ( Si:SX, SNAME:NAMEX ) AND FORALL PX ( IF P ( P#:PX ) THEN SP ( Si:SX, Pi:PX ) END IF )
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |