|
Программирование >> Хронологические базы данных
3. Все красные детали должны храниться в Лондоне. CREATE ASSERTION IC99 CHECK ( NOT EXISTS ( SELECT * FROM P WHERE P.COLOR = Red AND P.CITY <> London ) ) ; 4. He допускаются поставки с общим весом (произведение количества деталей и их веса), превышающим 20 ООО фунтов. CREATE ASSERTION IC46 CHECK ( NOT EXISTS ( SELECT * FROM P, SP WHERE P.P# = SP.P# AND ( P.WEIGHT * SP.QTY ) > 20000.0 ) ) ; 5. Поставщики со статусом, меньшим 20, не имеют права поставлять любую деталь в количестве более 500 штук. CREATE ASSERTION IC95 CHECK ( NOT EXISTS ( SELECT * FROM S, SP WHERE S.STATUS < 20 AND S.Sl = SP.S# AND SP.QTY > 500 ) ) ; Откладываемая проверка Классификация ограничений целостности в языке SQL отличается от нашей также в отношении вопроса, когда должна выполняться проверка. В нашей схеме ограничения базы данных проверяются во время выполнения оператора COMMIT, а остальные ограничения проверяются немедленно. В языке SQL подход иной и ограничения могут быть определены как откладываемые и неоткладываемые (опции DEFERRABLE и NOT DEFERRABLE соответственно). Если ограничение откладываемое, оно дополнительно может быть определено как исходно откладываемое (INITIALLY DEFERRED) или исходно выполняемое (INITIALLY IMMEDIATE), что определяет состояние ограничения в начале выполнения каждой транзакции. Неоткладываемые ограничения всегда проверяются немедленно, а откладываемые могут динамически включаться и отключаться с помощью оператора, синтаксис которого приведен ниже. SET CONSTRAINTS <список имен ограничений> <параметр> ; Здесь параметр <параметр>- это или ключевое слово IMMEDIATE (немедленно), или ключевое слово DEFERRED (отложено). Примером может служить следующее утверждение. SET CONSTRAINTS IC46, IC95 DEFERRED ; Откладываемые ограничения проверяются только тогда, когда они находятся в состоянии IMMEDIATE (немедленно). Установка откладываемого ограничения в состояние IMMEDIATE, естественно, приводит к тому, что оно проверяется немедленно. Если проверка завершается ошибкой, то завершается ошибкой и оператор SET IMMEDIATE. При выполнении операции завершения транзакции (COMMIT) все откладываемые ограничения целостности переходят в выполняемое состояние IMMEDIATE и если какая-либо проверка завершается ошибкой, выполняется откат транзакции. 8.10. Резюме в этой главе обсуждалось ключевое понятие целостность. Проблема целостности - это проблема обеспечения точности и корректности данных, хранящихся в базе данных (безусловно, нас интересовали декларативные-рещения этой проблемы). Как мы уже выяснили, понятие целостность в данном контексте означает семантику: это ограничения целостности (в частности, предикаты переменных-отнощений и базы данных; см. ниже), которые отражают смысл данных. Поэтому, как утверждалось в разделе 8.6, целостность данных имеет решающее значение. Ограничения целостности можно распределить по четырем категориям. Ограничения типа задают допустимые значения для данного типа (или домена) и проверяются при вызове соответствующего оператора выбора значения. Ограничения атрибута задают допустимые значения для данного атрибута и никогда не должны нарушаться (подразумевается, что ограничения типа проверены). Ограничения переменной-отношения задают допустимые значения для данной переменной-отнощения и проверяются перед тем, как рассматриваемая перемен-ная-отнощение будет обновлена. Ограничения базы данных устанавливают допустимые значения для данной базы данных и проверяются при выполнении операторов COMMIT. Логическое произведение (или операция И) всех установленных офаничений переменных-отнощений для данной переменной-отнощения представляет внутренний предикат переменной-отношения. Предикат переменной-отнощения отражает смысл этой переменной в том виде, в котором он может быть воспринят системой, и является критерием приемлемости обновлений для этой переменной-отнощения. Золотое правило утверждает, что любым операциям изменения запрещается каким-либо образо.м переводить переменную-отношение в состояние, противоречащее ее собственному предикату. В свою очередь, вся база данных является объектом предиката базы данных и любой транзакции также запрещено переводить базу данных в состояние, которое противоречит этому предикату. Затем в общих чертах были описаны основная идея ограничений перехода (остальные ограничения относятся к ограничениям состояния) и практически важные специальные случаи ограничений, представляющие потенциальные, первичные, альтернативные и внешние ключи. Потенциальные ключи должны обладать свойством уникальности и неизбыточности, и каждая переменная-отнощение должна иметь по крайней мере один потенциальный ключ (исключений нет!). Ограничение, согласно которому значения данного внешнего ключа должны совпадать со значениями соответствующего потенциального ключа, называется ссылочным ограничением. Мы познакомились с несколькими следствиями из идеи ссылочной целостности, включая понятие ссылочных действий (в том числе каскадирование). Последнее обсуждение подвело нас к понятию триггерных процедур. В завершение этой главы были рассмотрены соответствующие аспекты языка SQL. В языке SQL присутствует поддержка ограничений домена, ограничений базовых таблиц и утверждений (общих офаничений). Кроме того, поддержка ограничений базовых таблиц в языке SQL включает специальный случай поддержки ключей. Упражнения 8.1. На основе представленного в разделах 8.2-8.5 синтаксиса запишите следующие ограничения целостности для базы данных поставщиков деталей и проектов. а) Допустимыми городами являются Лондон (London), Париж (Paris), Рим (Rome), Афины (Athens), Осло (Oslo), Стокгольм (Stockholm), Мадрид (Madrid) и Амстердам (Amsterdam). б) Допустимы только такие номера поставщиков, которые представлены символьной строкой, содержащей не менее двух символов, первым из которых является буква S, а оставшиеся образуют целое число в диапазоне от О до 9 999. в) Все красные детали должны весить меньше 50 фунтов. г) Никакие два проекта не могут находиться в одном и том же городе. д) В любой момент в Афинах может находиться не более одного поставщика. е) Ни одна поставка по количеству деталей не может превышать удвоенное среднее значение количества для всех поставок. ж) Поставщик с наибольшим статусом не может находиться в одном городе с поставщиком с наименьшим статусом. з) Каждый проект должен находиться в городе, в котором есть хотя бы один поставщик. и) Каждый проект должен находиться в городе, в котором есть хотя бы один поставщик деталей данного проекта. к) Должна существовать по крайней мере одна деталь красного цвета, л) Среднее значение статуса поставщика должно быть больше 18. м) Каждый поставщик в Лондоне должен поставлять деталь с номером Р2. н) Хотя бы одна красная деталь должна весить меньше 50 фунтов, о) Поставщики в Лондоне должны поставлять больше видов деталей, чем поставщики в Париже. п) Поставщики в Лондоне должны в сумме поставлять больше деталей, чем поставщики в Париже. р) Ни одна поставка не может быть сокращена (за одно обновление) более чем вдвое по сравнению с текущим значением. с) Поставщики из Афин могут переехать только в Лондон или Париж, а поставщики из Лондона - только в Париж. 8.2. Для каждого из ответов к упр. 8.1 укажите, являются ли они офаничениями переменной-отношения или ограничениями базы данных. 8.3. Для каждого из ответов к упр. 8.1 приведите пример операции, которая может привести к нарушению данного ограничения. 8.4. Предположим, что выражения CHAR(5) и CHAR(3) обозначают символьные строки длиной 5 и 3 символа соответственно. Сколько типов здесь присутствует - один или два? 8.5. Пусть А и В - это две переменные-отношения. Определите потенциальные ключи для результата выполнения каждого из приведенных ниже выражений.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |