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

1 ... 103 104 105 [ 106 ] 107 108 109 ... 348


FOREIGN KEY { EMPf } REFERENCES EMP ON DELETE CASCADE ON UPDATE CASCADE ;

Пояснения

1. В этом примере иллюстрируется наше замечание о том, что внешний ключ может быть также потенциальным ключом содержащей его переменной отношения. В переменной-отношении ЕМР содержится список всех служащих, а в переменной-отношении PGMR- список тех служащих, которые работают программистами. Поэтому каждый номер служащего, присутствующий в переменной-отношении PGMR, должен присутствовать и в переменной-отношении ЕМР (заметьте, что обратное утверждение неверно). Поэтому первичный ключ переменной-отношения PGMR также является внешним ключом, ссылающимся на первичный ключ переменной-отношения ЕМР.

2. Отметим, что в этом примере существует еще одно ограничение целостности, которое также необходимо поддерживать: служащий должен быть представлен в переменной-отношении PGMR тогда и только тогда, когда значение атрибута ЕМР.JOB для этого служащего- Программист. Однако это, безусловно, не ссылочное ограничение.

8.14. Отметим, что приведенные ниже варианты решения для пп. а я б - это лишь приближения к их аналогам, представленным в ответах к упр. 8.1.

а) CREATE DOMAIN CITY CHAR(15) VARYING

CONSTRAINT VALID CITIES

CHECK ( VALUE IN ( London, Paris, Rome,

Athens, Oslo, Stockholm,

Madrid, Amsterdam ) ) ;

б) CREATE DOMAIN Si CHAR(5)VARYING CONSTRAINT VALID Sl CHECK

( SUBSTRING ( VALUE FROM 1 FOR 1 ) = S AND CAST ( SUBSTRING ( VALUE FROM 2 ) AS INTEGER ) >= 0 AND CAST ( SUBSTRING ( VALUE FROM 2 ) AS INTEGER ) <= 9999 ) ;

в) CREATE ASSERTION SQL C CHECK

( P.COLOR <> Red OR P.WEIGHT < 50.0 ) ;

r) CREATE ASSERTION SQL D CHECK

( NOT EXISTS ( SELECT * FROM J JX WHERE EXISTS ( SELECT * FROM J JY WHERE ( JX.Jl <> JY.J* AND JX.CITY = JY.CITY ) ) ) ) ;

Д) CREATE ASSERTION SQL E CHECK

( ( SELECT COUNT (*) FROM S

WHERE S.CITY = Athens ) < 2 ) ;

e) CREATE ASSERTION SQL F CHECK

( NOT EXISTS ( SELECT *

FROM SPJ SPJX

WHERE SPJX.QTY > 2 *



( SELECT AVG ( SPJY.QTY ) FROM SPJ SPJY ) ) ) ;

ж) CREATE ASSERTION SQL G CHECK

( NOT EXISTS ( SELECT * FROM S SX WHERE EXISTS ( SELECT * FROM S SY WHERE

SX.STATUS = ( SELECT MAX ( S.STATUS )

FROM S ) AND SY.STATUS = ( SELECT MIN ( S.STATUS )

FROM S ) AND SX.SATUS <> SY.STATUS AND SX.CITY = SY.CITY ) ) ) ;

з) CREATE ASSERTION SQL H CHECK

( NOT EXISTS ( SELECT * FROM J WHERE NOT EXISTS ( SELECT * FROM S WHERE

S. CITY = J. CITY ) ) ) ;

и) CREATE ASSERTION SQL I CHECK

( NOT EXISTS ( SELECT * FROM J WHERE NOT EXISTS ( SELECT * FROM S WHERE S.CITY = J.CITY AND EXISTS ( SELECT * FROM SPJ

WHERE SPJ.St = S.S#

AND SPJ.Jt = J.Jt ) ) ) ) ;

к) CREATE ASSERTION SQL J CHECK

( NOT EXISTS ( SELECT * FROM P ) OR EXISTS ( SELECT * FROM P

WHERE P.COLOR = Red ) ) ;

л) CREATE ASSERTION SQL K CHECK

( ( SELECT AVG ( S.STATUS ) FROM S ) > 18 ) ;

Если таблица поставщиков пуста, SQL-оператор AVG будет (ошибочно!) возвращать нулевое значение, результатом условного выражения будет значение неизвестно и ограничение не будет считаться нарушенным. В главе 18 можно получить дополнительные сведения по этому вопросу.

м) CREATE ASSERTION SQL L CHECK

( NOT EXISTS ( SELECT * FROM S

WHERE S.CITY = London AND NOT EXISTS

( SELECT * FROM SPJ WHERE SPJ.St = S.St AND SPJ.Pt = P2 ) ) ) ;

h) CREATE ASSERTION SQL M CHECK

( NOT EXISTS ( SELECT * FROM P

WHERE P.COLOR = Red ) OR EXISTS { SELECT * FROM P

WHERE P.COLOR = Red

AND P.WEIGHT < 50.0 ) ) ;



о) CREATE ASSERTION SQL N CHECK

( ( SELECT COUNT (*) FROM P

WHERE EXISTS ( SELECT * FROM SPJ WHERE EXISTS ( SELECT * FROM S WHERE ( P.P* = SPJ.P* AND SPJ.S* = S.S* AND S.CITY = London ) ) ) ) > ( SELECT COUNT (*) FROM P WHERE EXISTS ( SELECT * FROM SPJ WHERE EXISTS ( SELECT * FROM S WHERE { P.P* = SPJ.P* AND SPJ.S* = S.S* AND S.CITY = Paris )))));

n) CREATE ASSERTION SQL 0 CHECK

{ { SELECT SUM (SPJ.QTY) FROM SPJ WHERE ( SELECT S.CITY FROM S

WHERE S.S* = SPJ.S* ) = London ) > ( SELECT SUM (SPJ.QTY) FROM SPJ WHERE ( SELECT S.CITY FROM S

WHERE S.S* = SPJ.S* ) = Paris ) ) ;

p) Реализовать невозможно, с) Реализовать невозможно.



1 ... 103 104 105 [ 106 ] 107 108 109 ... 348

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