|
Программирование >> Реляционные базы данных
Преимущества и недостатки лимитированной проверки ограничений Может показаться странным, что допускаются нарушения основанных на атрибуте и на кортеже ограничений CHECK, tan они ссылаются на другие кортежи одного и того же отношения или на другие отношения в целом. Дело в том, что такие ограничения реализуются эффективнее, чем утверждения. Первые относятся только к кортежу или кортежам, которые вставляются в отношение или изменяются, а вторые должны проверяться нри каждом изменении упомянутыч в них отношений. Вопр- с о необходимости дополнительных проверок во время изменений БД реша.- проектировщик БД. Однако дпя обеспечения долговременной надежности срограммы рекомендуется не применять основанные на атрибуте или на кортеже ограничения CHECK. которь[е могут нарушаться. , 1 Описание такого оператора контроля дано на рнс. 6.5. CREATE ASSERTION RichPres CHECK (NOT EXISTS (SELECT * FROM Stud o, MovieExec WHERE presC# = cert# AND netWorth < 10000000 ) S*KC. 6,5. Утверждение, гаронтирующев богатых президентов студий Заметим, что это ограничение можно записать не в вгше единственного утверждения, а в виде основанных на кортеже ограничений CHECK на лву< отношениях. Например, к рис. 6.3 можно добавить ограничение на отношение Studio, как это показано на рис. 6.6. 1) CREATE TABLE Studio ( 2) name CHAR(30) PRIMARY KEY, 3) address VAF!CHAR(255), 4) presC# INT REFERENCES MovieExeC(cert#), 5) CHECK (presC# NOT IN 6) (SELECT cert# FROM MovieExec 7) WHERE netWorth < 10000000) ) Рис, 6.6. Огрониченив но Studio, отрожоющое утверждение Однако это ограничение будет проверяться только при изменении отношения Studio. Оно не касается, например, случая, когда чистый доход президента какой-1И1будь студии, упомянутого в MovieExec, упадет ниже 10 млн. дол. Для достижения полного эффекта утверждения к описанию отношения MovieExec тоже нужно добавить ограничение, согласно которому администратор, являющийся президентом студни, должен иметь чистый доход не менее 10 млн. дол. D Пример 6.11. Построим утверждение, которое действует на отношение Movie{title, year, !er>gt!i, inColor, studioName, prodocerC*) и означает, что обшая продо.пжительность фильмов, выпущенных студией, не должна превышать 10 000 мин. 1 CREATE ASSERTION SumLength CHECK (10000 >= ALL (SELECT SUM(lensth) FROM Movie GROUP BY studioName); Это ограничение содержит только отношение Movie, и его можно выразить не в форме утверждения, а в виде основанного на кортеже ограничения в схеме отношения Movie Последнее добавляется к определению таблицы Movie: . CHECK (10000 >= ALL - (SELECT SUM(lenBth) FROM Movie GROUP BY studioName)); В принципе это условие касается любого кортежа таблицы Movie. Однако в нем явно не указывается ни один атрибут кортежа и вся работа выполняется в подзапросе. Заметим также, что проверка этого ограничения не проводится при удалении кортежа из Movie. В данном примере это не опасно, так как, если ограничение вьь попнялось до удаления, оно заведомо будет выполняться и после удаления. Но если бы ограничивался нижний, а не верхний предел обшей длины, то при такой форме записи ограничение было бы нарушено. □ Сравнение ограничений в таблице отражены главные различия между ограничениями трех типов.
6.4-3 Упражнения к разделу 6.4 Упражнение 6.4.1. В примере 6.10 говорилось, что основанное на кортеже ограничение CHECK выполняет только часгь функций утверждения, представленного на рис. 6.5. Запишите ограничение CHECK на отношение MovieExec, которое обязательно завершит выполнение этих функций. Упражнение 6.4.2. Запишите перечисленные ниже ограничения в виде основанных на кортеже ограничений CHECK на отношения БД фильмов: Movie([itle, year, length. inColor. studioName. producerCS) Starsln(movieTitie, movieYear, starName) MovieStar(name, address, gender, birthdate) MovieExec{name, address. cert#, netWorth) Studlo(name, address, presC#) Если ограничение содержит два отношения, его нужно накладывать на каждое из них, чтобы при любом их изменении ограничение проверялось относительно введений и из.менений. Предполагается, что удалений нет; к удаления.м нельзя применить ограничения, основанные на кортеже. *а) Фильм не может быть цветным, если он снят до 1939 г. Ь) Кинозвезда не может играть в фильме, выпущенном до ее рождения. ! с) Две студии не могут иметь один и тот же адрес. *! d) Имя, входящее в MovieStar, не может входить в MovieExec. ! е) Название студии, входящее в Studio, должно входить по крайней мере в один кортеж отношения Mowe. I! f) Если продюсер фильма является президентом студии, он должен быть президентом сг>дии, выпустившей этот фильм. Упрожнение 6.4.3. Запишите в виде SQL-выражений перечисленные ниже ограничения, основанные на отношениях примера 4.L1 Product(maker, model, type) PC(model, speed, ram, hd, cd, price) Laptop(model, speed, ram, hd, screen, price) Printer(model, color, type, price) *a) Ни один производитель ПК не может производить ПК-блокноты. *! Ь) Производитель ПК должен производить ПК-блокноты по меньшей мере с такой же скоросгью процессора. с) Если объем главной памяти ПК-блокнота превышает объем главной памяти ПК, его иена должна быть выше цены ПК. !. d) Ни один номер модели не может появиться дважды в отношениях PC. Laptop и Printer. !! е) Если модель и ее тип упоминаются в отношении Product, эта модель должна появиться в отношении, подходящем для лянуюго типа.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |