|
Программирование >> Хронологические базы данных
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) Реализовать невозможно, с) Реализовать невозможно.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |