|
Программирование >> Хронологические базы данных
( SELECT * FROM SPJ, P, S WHERE SPJ.J# = J.J# AND SPJ.P# = P.P# AND SPJ.S# = S.S# AND P.COLOR = Red AND S.CITY = London ) ; 7.15.41.SELECT J.J# FROM J WHERE NOT EXISTS { SELECT * FROM SPJ WHERE SPJ.JI = J.JI AND NOT ( SPJ.SI = SI ) ) ; 7.15.42.SELECT P.Pl FROM P WHERE NOT EXISTS ( SELECT * FROM J WHERE J.CITY = London AND NOT EXISTS ( SELECT * FROM SPJ WHERE SPJ.Pl = P.PI AND SPJ.JI = J.JI ) ) ; 7.15.43.SELECT S.SI FROM S WHERE EXISTS { SELECT * FROM P WHERE NOT EXISTS ( SELECT * FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ WHERE SPJ.SI = S.SI AND SPJ.Pl = P.PI AND SPJ.JI = J.JI ) ) ) 7.15.44.SELECT J.Jl FROM J WHERE NOT EXISTS ( SELECT * FROM SPJ AS SPJX WHERE SPJX.SI = SI AND NOT EXISTS ( SELECT * FROM SPJ AS SPJY WHERE SPJY.P# = SPJX.Pt AND SPJY.Jt = J.Jt ) ) ; 7.15.45.SELECT S.CITY FROM S UNION SELECT P.CITY FROM P UNION SELECT J.CITY FROM J ; 7.15.46.SELECT DISTINCT SPJ.Pt FROM SPJ WHERE { SELECT S.CITY FROM S WHERE S.St = SPJ.St ) = London OR ( SELECT J.CITY FROM J WHERE J.Jt = SPJ.Jt ) = London 7.15.47.SELECT S.St, P.Pt FROM S CROSS JOIN P EXCEPT SELECT SPJ.St, SPJ.Pt FROM SPJ ; 7.15.48. Решение опущено. 7.15.49-7.15.50. Решений не существует. Глава 8 Целостность данных 8.1. Введение Термин целостность данных используется для описания точности и корректности хранящейся в базе информации. Как отмечалось в главе 3, в базе данных может существовать любое количество ограничений целостности и в общем случае они могут быть произвольной сложности. Например, для базы данных поставщиков и деталей можно предположить, что номера поставщиков должны представляться в виде Snnnn (где пппп - десятичное число, не превыщающее 9999) и иметь уникальные значения; значения статуса поставщика должны находиться в диапазоне от 1 до 100, причем поставщики из Лондона должны иметь статус 20; количество поставляемых деталей должно быть кратно 50, причем красные детали должны храниться только в Лондоне; и т.д. В общем случае можно сделать заключение, что СУБД должно быть известно о подобных ограничениях и, безусловно, необходимо, чтобы СУБД тем или иным образом обеспечивала их выполнение (в основном, посредством отмены любых обновлений, нарущающих эти требования). Рассмотрим следующий пример (снова воспользуемся языком Tutorial D). CONSTRAINT SC3 IS EMPTY ( S WHERE STATUS < 1 OR STATUS > 100 ) j Смысл этого выражения таков: Значения статуса поставщика должны находиться в диапазоне от 1 до 100 . Обратите внимание на имя офаничения- SC3 (т.е. Ограничение № 3 для поставщиков ). Под этим именем данное ограничение будет зарегистрировано в системном каталоге и именно это имя будет указываться в диагностических сообщениях системы при обнаружении попыток нарущения данного ограничения. Само ограничение задается в виде логического выражения, результат вычисления которого не должен иметь значение лоль (false). Замечание. Для определенности здесь мы используем алгебраическую версию языка Tutorial D, поэтому логическое выражение часто будет принимать форму IS EMPTY(...), которая означает, что в базе данных нет данных, нарушающих указанное офаничение (см. раздел 6.9 главы 6). Аналог приведенного выше примера в виде выражения реляционного исчисления может выглядеть следующим образом. CONSTRAINT SC3 FORALL SX ( SX.STATUS > 1 AND SX.STATUS < 100 ) : Ha практике бытует мнение, что ограничения (особенно сложные) легче формулировать в тер.минах реляционного исчисления, а не посредством выражений реляционной алгебры. В этой главе мы остановимся на алгебраических выражениях в соответствии с принципами изложения материала в остальной части книги, но читателю, несомненно, будет полезно поупражняться в преобразовании некоторых из приводимых ниже примеров в выражения реляционного исчисления.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |