Модели и проектирование баз данных

       

Примеры запросов


. Здесь приведены формулы РИ кортежей, эквивалентные выражениям РА из примеров п. 2.5.4. Номера формул соответствуют номерам запросов.

1)            RANGE OF JX IS J;

               JX;

Далее для упрощения записи будем считать, что переменные SX, PX, JX, SPJX определены на отношениях S, P, J, SPJ, соответственно. Если понадобится определить на отношении более одной переменной, будем расширять имя отношения другими буквами, например, SY, SZ…  Ненужные скобки будем опускать.

2)            (JX.J#, JX.Jn)  WHERE  Ci = ‘Томск’;

3)            SPJX.S#  WHERE  J# = ‘J1’;

4)            SPJX.S#  WHERE  J# = ‘J1’  AND  P# = ‘P1’;

5)            JX.Jn WHERE EXISTS SPJX

(SPJX.S# = ‘S1’ AND SPJX.J# = JX.J#);

6)            PX.Co WHERE EXISTS SPJX

(SPJX.S# = ‘S1’ AND SPJX.P# = PX.P#);

7)            SPJX.S#  WHERE  J# = ‘J1’ AND EXISTS SPJY

(SPJY.S# = SPJX.S# AND J# = ‘J2’);



8)            SPJX.S#  WHERE SPJX.J# = ‘J1’ AND EXISTS PX

(PX.P# = SPJX.P# AND PX.Co = ‘красный’);

9)            SPJX.P# WHERE FORALL JX

(IF JX.Ci = ‘Томск’ THEN EXISTS SPJY

(SPJY.J# = JX.J# AND SPJY.P# = SPJX.P#));

Другая формулировка этого запроса, не использующая квантора всеобщности:

SPJX.P# WHERE NOT EXISTS JX

(JX.Ci = ‘Томск’ AND NOT EXISTS SPJY

(SPJY.J# = JX.J# AND SPJY.P# = SPJX.P#));

10)          SPJX.S# WHERE EXISTS PX

(PX.Co = ‘красный’ AND PX.P# = SPJX.P#) AND

EXISTS JX (JX.J# = SPJX.J# AND

(JX.Ci = ‘Томск’ OR JX.Ci = ‘Яя’));

11)          JX.J# WHERE EXISTS SPJX EXISTS SX

(JX.J# = SPJX.J#  AND SX.S# =SPJX.S# AND

NOT (JX.Ci = SX.Ci) );

12)          JX.J# WHERE NOT EXISTS SPJX EXISTS PX

(SPJX.P# = PX.P# AND PX.Ci = ‘Томск’ AND

PX.Co = ‘красный’ AND SPJX.J# = JX.J#);

13)          SX.Sn WHERE EXISTS SPJX

(SPJX.P# = ‘P2’ AND SPJX.S# = SX.S#);

14)          SX.Sn WHERE FORALL PX (EXISTS SPJX

(PX.P# = SPJX.P# AND SPJX.S# = SX.S#));


. Здесь приведены формулы РИ доменов, эквивалентные выражениям РА из некоторых примеров п. 2.5.4. Номера формул соответствуют номерам запросов.

1)            RANGE OF JX IS J#;

RANGE OF JnX IS Jn;

RANGE OF CiX IS Ci;

(JX, JnX, CiX) WHERE J(J# : JX, Jn : JnX, Ci : CiX);

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

2)            (JX, JnX) WHERE

J(J# : JX, Jn : JnX, Ci : ‘Томск’);

3)            SX WHERE SPJ(J# : ‘J1’);

4)            SX WHERE SPJ(J# : ‘J1’, P# = ‘P1’);

5)            JnX WHERE  EXISTS JX (SPJ (S# : ‘S1’, J# : JX)

AND J(J# : JX, Jn : JnX));

6)            CoX WHERE EXISTS PX

(SPJ(S# : ‘S1’, P# : PX) AND

P(P# : PX, Co : CoX));

7)            SX  WHERE  SPJ(S# : SX, J# : ‘J1’) AND

SPJ(S# : SX, J# : ‘J2’);

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

8)            SX  WHERE EXISTS PX

(SPJ(S# : SX, P# : PX, J# : ‘J1’) AND

P(P# : PX, Co : ‘красный’));

9)            PX WHERE FORALL JX (IF J(J# : JX, Ci : ‘Томск’)                                 THEN SPJ(P# : PX, J# : JX));

Другая формулировка этого запроса, не использующая квантора всеобщности:

PX WHERE NOT EXISTS JX (J(J# : JX, Ci : ‘Томск’) AND                                     NOT SPJ(P# : PX, J# : JX));

Сравните эти формулировки с приведенными в пп. 2.5.4, 2.6.2. Большое количество задач такого типа приведено в [1], [7].

2.6.4 Резюме. Все три механизма манипулирования данными составляют основу реализаций реляционных ЯМД. Это непроцедурные языки. Они не предназначены для записи алгоритмов. Они предназначены для точного формулирования запросов к данным.

Самый распространенный язык запросов SQL основывается на смеси алгебраических и логических конструкций. Человек формулирует запрос в виде предиката, а система строит соответствующую процедуру вычисления требуемого результата.



Содержание раздела