Программирование >>  Хронологические базы данных 

1 ... 72 73 74 [ 75 ] 76 77 78 ... 348


7.3.1. Определить номера поставщиков из Парижа со статусом, большим 20

{ SX.SI, SX.STATUS ) WHERE SX.CITY = Paris AND SX.STATUS > 20

7.3.2. Найти все такие пары номеров поставщиков,

в которых два поставщика находятся в одном городе

( SX.SI AS SA, SY.Sf AS SB )

WHERE SX.CITY = SY.CITY AND SX.SI < SY.SI

Обратите внимание, что спецификации AS в прототипе кортежа используются для именования атрибутов результата. Следовательно, эти имена недоступны для использования в фразе WHERE, и потому второе сравнение в фразе WHERE записано как SX.SI < SY.SI, а не в виде SA < SB.

7.3.3. Определить имена поставщиков детали с номером Т2

WHERE EXISTS SPX ( SPX.Sl = SX.SI AND

SPX.PI = PI { P2 ) )

Обратите внимание на использование имени переменной кортежа в прототипе кортежа. Этот пример является сокращенной записью следующего выражения.

(SX.SI, SX.NAME, SX.STATUS, SX.CITY ) WHERE EXISTS SPX ( SPX.Sl = SX.SI AND

SPX.PI = PI { P2 ) )

7.3.4. Определить имена поставщиков по крайней мере одной красной детали

SX.SNAME

WHERE EXISTS SPX ( SX.SI = SPX.Sl AND

EXISTS PX { PX.PI = SPX.PI AND

PX.COLOR = COLOR { Red ) ) )

Эквивалентная формула (но записанная в предваренной нормальной форме, в которой все кванторы помещаются в начало формулы WFF) имеет следующий вид.

SX.SNAME

WHERE EXISTS SPX ( EXISTS PX ( SX.SI = SPX.Sl AND

SPX.PI = PX.PI AND PX.COLOR = COLOR ( Red ) ) )



Предваренная нормальная форма не является более (или менее) правильной по отношению к другим формам, но, немного попрактиковавшись, можно убедиться, что в большинстве случаев это наиболее естественный метод формулирования запросов Кроме того, она позволяет уменьшить количество используемых скобок, как показано ниже. Например, рассмотрим следующую формулу WFF.

quantl vblel { quant2 vble2 { wff ) )

Здесь каждый из кванторов quantl и quant2 представляет или квантор EXISTS, или квантор FORALL. При необходимости ее всегда можно однозначно привести к следующему виду.

quantl vblel quant2 vble2 { wff )

Таким образом, это выражение реляционного исчисления можно переписать (при необходимости) следующим образом.

SX.SNAME

WHERE EXISTS SPX EXISTS PX { SX.Si = SPX.Si AND

SPX.Pi = PX.Pi AND

PX.COLOR = COLOR { Red ) )

Однако для ясности будем продолжать показывать все скобки во всех остальных примерах.

7.3.5. Найти имена поставщиков по крайней мере одной детали, поставляемой поставщиком с номером S2

SX.SNAME

WHERE EXISTS SPX ( EXISTS SPY { SX.Si = SPX.Si AND

SPX.Pi = SPX.Pi AND SPY.Si = Si { S2 ) ) )

7.3.6. Выбрать имена поставщиков всех типов деталей

SX.SNAME WHERE FORALL PX { EXISTS SPX { SPX.Si = SX.Si AND

SPX.Pi = PX.Pi ) )

Равносильное выражение можно записать без использования квантора FORALL.

SX.SNAME WHERE NOT EXISTS PX { NOT EXISTS SPX

( SPX.Si = SX.Si AND SPX.Pi = PX.Pi ) )

7.3.7. Определить имена поставщиков, которые не поставляют деталь с номером Т2

SX.SNAME WHERE NOT EXISTS SPX

{ SPX.Si = SX.Si AND SPX.Pi = Pi { P2 ) )

Обратите внимание, как просто это решение можно получить из решения примера 7.3.3.



7.3.8. Определить номера поставщиков по крайней мере всех типов деталей, поставляемых поставщиком с номером S2

SX.SI WHERE FORALL SPX ( SPX.Sl s { S2 ) OR

EXISTS SPY { SPY.SI = SX.SI AND SPY.Pi = SPX.PI ) )

Переформулируем запрос в соответствии со следующим выражением: Получить номера поставщиков (скажем, SX), таких, что для всех поставок SPY поставка осуществляется либо не от поставщика с номером S2, либо существует поставка SPY всех типов деталей, входящих в поставку SPX от поставщика SX .

Чтобы упростить формулировку таких сложных запросов, как этот, введем другое синтаксическое соглашение, называемое явной синтаксической формой для оператора логической импликации. Если р и q - формулы WFF, то выражение логической импликации вида

IF р THEN q END IF

также будет формулой WFF с семантикой, идентичной семантике следующей формулы. { NOT р ) OR q

Таким образом, приведенное выше выражение может быть переписано так.

SX.SI WHERE FORALL SPX ( IF SPX.Sl = SI { S2 ) THEN

EXISTS SPY { SPY.SI = SX.SI AND SPY.PI = SPX.PI )

END IF )

Дадим словесную формулировку этого запроса: Получить номера поставщиков (скажем, SX), таких, что для всех поставок SPX в случае поставки от поставщика с номером S2 существует поставка SPY всех типов деталей, входящих в поставку SPXot поставщика SX .

7.3.9. Получить номера деталей, которые либо весят более 16 фунтов, либо поставляются поставщиком с номером S2, либо и то, и другое

RANGEVAR PU RANGES OVER

( PX.PI WHERE PX.WEIGHT > WEIGHT ( 16.0) ), { SPX.PI WHERE SPX.Sl = SI ( S2 ) ) ;

PU.PI

В эквивалентном выражении реляционной алгебры здесь могло бы использоваться явное объединение.

Ради интереса покажем альтернативную формулировку этого запроса. Однако тот факт, что каждый номер детали в переменной-отношении SP присутствует и в переменной-отношении Р, делает вторую формулировку не соответствующей стилю объединения .



1 ... 72 73 74 [ 75 ] 76 77 78 ... 348

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика