|
Программирование >> Реляционные базы данных
Пример 6.8. Описать область GenderDomain с двумя значениями F и М можно с помошью предложения: CREATE DOMAIN GenderDomain CHAR{1) CHECK (VALUE IN CF. M)); Тогда строку (4) рис. 5.13 нужно заменить на 4) gender GenderDomain, Точно так же можно потребовать, чтобы номера сертификатов для атрибута presC# состояли не менее чем из шести цифр (см. пример 6.6). Для этого задается область: CREATE DOMAIN CertDomain INT CHECK (VALUE >= 100000); a затем дается следующее описание атрибута presC#: 4) presC# CertDomain REFERENCES MovieExec(cert#) 6.3.4 Упражнения к разделу 6.3 Запишите перечисленные ниже ограничения на атрибуты Упражнение 6.3.1. отношения Movie(titIe, year, length, InColor, studioName, producerC#) *a) Год не может быть до 1895 Ь) Продолжительность не может быть меньше 60 и больше 250 минут *с) Именем студии может быть только IMsney, Fox, MGM или Paramount Упражнение 6.3.2. Запишите перечисленные ниже ограничения на атрибуты из схемы упражнения 4.1.1 Product(maker, model, typa) PC(model, speed, ram, hd, cd, price) Laptop(model. speed, ram, hd, screen, price) Printer(model, color, type, price) a) Скорость ПК-блокнота должна быть не менее 100 МГц b) Скорость CD может быть только 4х, 6х, 8х или 12х c) Типами принтеров moot быть только лазерный, струйный и матричный d) Типами продукта могут быть только ПК. ПК-блокноты и принтеры e) Объем RAM каждого ПК должен составлять не менее 1% объема его жесткого диска 6.4 Глобальные ограничения Рассмотрим описания более сложных ограничений, включающих в себя связи межау афиб)тами и даже межлу разлитыми отношениями. Тема состоит из двух частей: L Основанные иа кортежах ограничения CHECK, касающиеся любого аспекта кортежей единственного отношения. 2. Операторы контроля (assertions) - ограничения, которые могут включать в себя целые отношения или множество переменных кортежей над одним и тем же отношением. j Правильная запись ограничений Многие офаиичения похожи на ограничение из примера 6.9 - в них запрещаются кортежи, удовлетворяющие двум и более условиям. Выражение, следующее за ключевым словом CHECK,-это отрицания данных условий, связанные OR. В примере 6.9 первое условие состоит в тем, чтобы кинозвездой был мужчина, поэтому отрицание записано как gender = F {хотя, возможно, более естественно бьшо бы записать его как gender <> М). Согласно вг1орол(у условию, name должно начинаться с Ms. , и для отрицания используется сравнение NOT LIKE. Это сравнение отрицает само условие, которое в SQL выглядело бы как name LIKE Ms.%. Пример 6.9. Вспомним пример 5.32, в когором была описана схема таблицы MovieStar. На рис. 6.4 команда CREATE TABLE дополнена описанием ключа со словом UNIQUE и другим ограничением - одним из многих возможных условий непротиворечивости , которые может понадобеться проверить. Согласно этому ограничению, если кинозвезда - мужчина, его имя не должно начинаться с Ms.. 1) CREATE TABLE MovieStar ( 2) name CHAR(30) UNIQUE. 3) address VARCHAR(255), 4) gender CHAR(1), 5) birthdate DATE. 6) CHECK (gender = P OR name NOT LIKE Мв./Ь) ): Ph<. 6.4. Огрониченив но таблицу MovieStar 6.4.1 Основанные на кортежах ограничения CHECK Для описания ограничения на кортежи единственного отношения Л при опре-деле1Н1И R с помощью CREATE TABLE к списку атрибутов и описанию юпюча или внешнего ключа добавляется слово CHECK, за которым следует заключенное в скобки условие. Условием может быть все, что появляется в пункте WHERE. Этому условию должен удовлетворять некоторый кортеж Л Как и при основанном на атрибуте ограничении CHECK, условие может упоминать в подзапроса.х другие отношения или другие кортежи отношения Л, Условие основанного на кортеже ограничения CHECK проверяется при каждой вставке в R нового кортежа и при изменении существующего. Еслн условие не выполняется дпя нового или измененного кортежа, вставка или изменение этого кортежа отвергается. Однако, еслн условие упоминает некоторое отношение (даже само R) в подзапросе и изменение этого отношения приводит к нарушению данного условия для кортежа Л, такое изменение не отвергается. Иными словами, подобно основанному иа атрибуте офаничению CHECK, основанное на кортеже ограничение CHECK остается невидимым для других отношений. Хотя основанные на кортежах проверки могут включать в себя очень сложные условия, такие условия лучше оставигъ для операторов контроля SQL, о которых пойдет речь в разделе 6.4.2. Причина в том, что при определенных условиях основанные на кортежах проверки могут нарушаться. Если же такая проверка затрагивает только атрибуты проверяемого кортежа и не содержит подзапросов, ограничение всегда соблюдается. Приведем пример простого, основанного на кор-гежс 01раннчения, включающего в себя различные атрибуты одного кортежа. В строке (2) атрибут name объявлен ключом отношения, а а строке (6) введено ограничение. Условие ограничения выполняется для каждом кинозвезды женского пола и каждой кинозвезды, имя которой не начинается с Ms.. Оно ие выполняется только лля кортежей, в которы.х пол обозначен как мужской и имя действителыю начинается с Ms.. Именно такие кортежи нужно исключить из отношения. □ 6-42 Операторы контроля Итак, мы перешли от ограничений на атрибуты к ограничениям на кортежи. Однако иногда даже этих форм ограничений недостаточно. Нужны ограничеьгия, включающие в себя отношение в целом, например ограничение суммы или другого объединения значений в одном столбце. Применяются также ограничения, затрагивающие несколько отношений. Фактически к ним относится ограничение по внешнему ключу, соединяющее два отношения. Утверждения в SQL2 (называемые также общими ограничениями) позволяют ввести любое условие (выражение, следующее за WHERE). В то время как другие типы ограничений только связаны с элементами схемы, обычно с таблицами или областями, утверждения са.чи являются элементами схемы. Подобно другим элементам схемы, утверждение описывается с помошью предложения CREATE. В описание входят следующие элементы: 1. Ключевые слова CREATE ASSERTION 2. Имя утверждения 3. Ключевое слово CHECK 4. Заключенное в скобки условие Таким образом, предложение имеет вид: CREATE ASSERTION <и я> CHECK (<условие>) Условие должно всегда выполняться, и нарушающие его изменения БД отвергаются. Напомним, что другие рассмотренные ранее ограничения типа CHECK при определенных условиях могут нарушаться, если они содержат подзапросы. Основанные на кортеже офаничения CHECK и утверждения записываются по-разному. Первые могут относиться к атрибутам отношения, в описание которого они входят Например, в строке (6) на рис. 6.4 ие указано, откуда берутся атрибуты gender и пате. Они относятся к компонентам кортежа таблицы MovieStar, так как только она пнолится оператором CREATE. У условия утверждения контроля нет такого преимущества. Любой yпoмянтый в условии атрибут должен быть введен в описание, как правило, путем указания отношения, к которому он принадлежит, и выражении типа select-from-whcrc. Поскольку условие должно и.меть булево значение, естественно как-иибудь агрегировать результаты проверки, чтобы остался только выбор истинно/ложно. Например, можно записать условие в виде выражения, порождающего отношение, к которому применяется оператор NOT EXISTS, т.е. ограничение заютючается в том, что это отношение всегда пусто. Возможно также применить оператор агрегации типа SUM к столбцу отношения и сравнить результат с константой. Например. .южнo потребовать, чтобы сумма всегда была меньше установленной ие.шчииы. Пример 6.10. Прея11о;южим, требуется, чтобы президентом студии мог стать только человек, имеющий чистый доход не менее 10 млн. доя. Вводится утверждение, требу ощее, чтобы множество ст>дий. президенты которых имеют чистый доход .менее IО млн. дол., было пустым. В него входят два отношения: MovieExec(name. address, cert#. netWorth) Studio(name, address, presC#)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |