С.Д. Кузнецов - Основы баз данных (1121716), страница 54
Текст из файла (страница 54)
00), оно не может быть занесено в таблицу ОЯРт, поскольку противоречит ограниче- ниюстолбцаэеРТ ТОТАЬ ЯА' СиеСК (тгАЬОЕ >= 100000.00Ь Можно задуматься, действительно ли требуется поддерживать в таблице герт столбец Оерт емР мо. Как мы видели, для его поддержки требуется проверять громоздкое ограничение целостности, а число служащих в любом отделе можно получить динамически с помощью простого запроса к таблице емР (собственно, этот запрос входит в ограничение целостности). Поэтому может оказаться разумным отменить определение столбца Оерт емР мо, выполнив следующий оператор Аьтее тАвье: АЬТЕЕ ТАЕЬЕ ОЕРТ ОЕСР ОЕРТ ЕМР ИО САЯСАЗЕ. Напомним, что спецификация САЯСАОЕ ведет к тому, что при выполнении оператора будет уничтожено не только определение указанного столбца, но и определения всех ограничений целостности и представлений, в которых используется уничтожаемый столбец.
В нашем случае единственное связанное с этим столбцом ограничение целостности, определенное вне определения столбца, было бы отменено, даже если бы в операторе отмены определения столбца ОЕРТ ЕМР МО содержалась спецификация ееятЕТСт, поскольку это единственное внешнее определение ограничения является ограничением только столбца ЗЕРТ ЕМР МО. 251 Основы бал данных Курс Изменение набора табпичных ограничений Действие по изменению набора табличных ограничений специфицируется в следующем синтаксисе: Ьазе гаЫе сопят гаупг а1гегпаг1оп асгуоп АРО [ СО[[ЯТРА1[хТ [ Ьазе паЫе сопзггагп" бе11пРЫоп ОЕСР СОНЯТЕА1НТ сопасга1пп папе [ РЕЯТЕТСТ [ САЯСАОЕ 3 Действие АОО [ СОНЯТЕАТНТ [ позволяет добавить к набору существующих ограничений таблицы новое ограничение целостности, Можно считать, что новое ограничение добавляется через Анп к конъюнкции сушествующих ограничений, как если бы оно определялось в составе оператора сеелте тАеье.
Но здесь имеется одно существенное отличие. Если внимательно посмотреть на все возможные виды табличных ограничений, можно убедиться, что любое из них удовлетворяется на пустой таблице. Поэтому, какой бы набор табличных ограничений ни был определен при создании таблицы, это определение является допустимым и не препятствует выполнению оператора сРЯАте тлвее. При добавлении нового табличного ограничения с использованием действия АОО [ сОнятРА1нт [ мы имеем другую ситуацию, поскольку таблица, скорее всего, уже содержит некоторый набор строк, лля которого условное выражение нового ограничения может принять значениегайе. В этом случае выполнение оператора Аетек тАвее, включающего действие АОО [ сонятеА1нт ], отвергается. Выполнение действия ОЕСР СОНЯТРАТИТ приводит к отмене определения существующего табличного ограничения.
Можно отменить определение только именованных табличных ограничений. Спецификации РЕЯТЕТСТ и САЯСАОЕ осмыслены только в том случае, если отменяемое ограничение является ограничением возможного ключа (ОупООе или РР1- ИАРУ КЕУ)". При указании РЕЯТЕТСТ действие отвергается, если на данный возможный ключ ссылается хотя бы один внешний ключ. При указании сАЯОАОе действие ОРОР сонятеА1нт выполняется в любом случае, и все определения таких внешних ключей также отменяются. Лримеры изменения набора табличных ограничений Напомним, что мы добавили к таблице Еир столбец Еу[Р ЕО[чОЯ, в котором сохраняются размеры ежемесячных премий служащих. Предположим, что премии выплачиваются из фонда заработной платы отдела, в котором работает служащий. Тогда проверочное ограничение столбца ОЕРТ ТОТА1, ЯИ., уСтанавливающее, чтО объем фонда зарплаты отдела ' Хотя формально требуется укхэыввть одно из этих ключевых слов в любом действии пхоу сонзтхлтит.
252 Лекция !2 Средства определения базовых таблиц и ограничений целостности не должен быть меньше суммарной зарплаты служащих этого отдела, становится недостаточным, и нам требуется добавить к набору ограничений таблицы ОеРт новое ограничение: А1 ТЕЛ ТАВЬЕ РЕРТ АОР СОНЯТЕА1НТ ТОТАЬ 1НСОМЕ СНЕСК (РЕЕТ ТОТАЬ ЯАЬ >= )ЯЕЬЕСТ ЯВИ)ЕМР ЯАЬ + СОАЬЕЯСЕ)ЕМР ВОН)1Я,0))РВОМ ЕМР ННЕЕЕ ЕМР.ВЕЕТ НО = ВЕРТ НО)). Хотя это ограничение на вид довольно сложное, смысл его очень прост; суммарный доход служащих отдела не должен превышать объем зарплаты отдела. В арифметическом выражении под знаком агрегатной операции ЯВИ используется операция СОАЬЕЯСЕ. Эта двуместная операция определяется следующим образом: СОАЬЕЯСЕ )х, у) 1Р х 1Я НОТ Н1)ЬЬ ТНЕН х ЕЬЯЕ у, т. е. значением операции является значение первого операнда, если оно не равно МОЬЬ, и значение второго операнда — в противном случае.
Нам прищлось воспользоваться этой операцией, поскольку в столбце ЕМР ВОНОя допускается наличие неопределенных значений. Понятно, что новое ограничение столбца ОЕРТ ТОТАЬ ЯА' сильнее предыдущего, и это предыдущее ограничение можно было бы отменить. Конечно, с логической точки зрения наличие обоих ограничений ничему не повредит (предыдущее ограничение является логическим следствием нового), но при использовании не слишком интеллектуальной реализации 5) )Ь может привести к замедлению работы системы, поскольку оба ограничения могут проверяться независимо. К сожалению, при определении таблицы емР мы не присвоили явное имя проверочному ограничению столбца ВВРт тотАь ЯАь и поэтому не можем немедленно продемонстрировать оператор отмены этого ограничения.
Зто не значит, что его нельзя отменить вообще. В стандарте языка Я'.>1 требуется, чтобы ограничения целостности, которым не назначены явные имена, получали имена, автоматически генерируемые системой. Любой квалифицированный пользователь 9 Н.-ориентированной СУБД (скорее всего, администратор) может обнаружить имя любого ограничения, обратившись к системной таблице-каталогу ограничений целостности. Кстати, новому ограничению мы присвоили явное имя. К этому привели следующие рассуждения. Когда создавалась исходная схема базы данных, руководство предприятия ничего не говорило о премиях служащих.
Теперь начальство решило, что премии будут выплачиваться из фонда зарплаты. Для этого, мы добавили новый столбец и новое ограничение 2бэ Основы баз данных Курс целостности. Но кто знает, не изменится ли снова решение о премиях? Чтобы не добавлять себе работы в будущем, дадим новому ограничению явное имя и не будем отменять предыдущее ограничение.' При определении таблицы емр было специфицировано проверочное табличное ограничение РВО емр МО, устанавливающее, что над одним проектом не должно работать более 50 служащих.
Мы уже отмечали, что это ограничение носит чисто административный характер и может быть огменено без нарушения логики базы данных. Для отмены ограничения нужно выполнить следующий оператор: АЬТЕВ ТАВьЕ ЕМР РВОР СОИЯТВА1ИТ РВО ЕМР ИОг Отыена определения [уничтожение) базовой таблицы Для отмены определения (уничтожения) базовой таблицы служит оператор ОВОР ТАВЬЕ, задаваемый в следующем синтаксисе: РВОР ТАЕТЕ Ьаае саЫе паше ( ВЕБТВ1СТ 1 САОСАОЕ Успешное выполнение оператора приводит к тому, что указанная базовая таблица перестает существовать.
Уничтожаются все ее строки, определения столбцов и табличные определения целостности. При наличии спецификации Веятетст выполнение оператора ОВОР тйвье отвергается, если имя таблицы используется в каком-либо определении представления или ограничения целостности*'. При наличии спецификации САВСАОЕ оператор выполняется в любом случае, и все определения представлений и ограничений целостности, содержащие ссылки на данную таблицу, также отменяются.
Средства определения и отмены общих ограничений целостности Виды ограничений целостности, с которыми мы имели дело в предыдущих разделах этой лекции, образуют иерархию (рис. 12.2). Ограничения целостности, входящие в определение домена, наследуются всеми столбцами„определенными на этих доменах, и являются ограничениями этих столбцов. Кроме того, в определение столбца могут входить определения дополнительных ограничений.
Ограничения целостности, входящие в определение столбца (включая ограничения, унаследованные из определения домена), являклся ограничениями таблицы, в состав опреде- " Не следует расценивать эти рассуждения как руководство к действию. Мы привели нх только для того, чтобы обосновать пример, хотя рассуждения, конечно, не лишены смысла. " Не считая те о~раничения целостности, которые (а) определены в составе определения данной базовой таблицы и (И не ссылаются на какие-либо другие базовые таблицы. 254 Лекция 12 С дства определения базовых таблиц и ограничений целостнасти ления которой входит определение данного столбца. Кроме того, в определение таблицы могут входить определения дополнительных ограничений. Но иерархия видов ограничений целостности этим не исчерпывается.
Ограничения целостности, входящие в определение таблицы (включая явные и унаследованные от определения доменов ограничения столбцов), представлякп собой ограничения базы данных, частью которой является данная таблица. Кроме того, могуг определяться дополнительные ограничения базы данных. В стандарте ЯН такие дополнительные ограничения базы данных называются АЕЕЕЕТтои, а мы их будем называть общими ограничениями целостности.
Рис. 12.2. Иерархия видов ограничений целостности Определение общих ограничений целостности Для определения общего ограничения целостности служит оператор СЕЕАТЕ АЕЕЕЕТТСИ, задаваемый в следующем синтаксисе: СЕЕАТЕ АЯЯЕЕТ10И сспвсгатпг пале СНЕСК (сопок спа1 ехргеавтсп) Заметим, что при создании общего ограничения целостности его имя всегда должно указываться явно. Хотя синтаксис определения общего ограничения совпадает с синтаксисом определений ограничений столбца и таблицы, в данном случае допускаются только специальные виды условных выражений. Мы не можем сейчас точно сформулировать свойства этих видов условий„поскольку отложили подробное рассмотрение разновидностей условных выражений до следующих лекций. Если говорить неформально, то особые свойства условий связаны с тем, что при определении общих ограничений целостности контекстом, в котором вычисляется условное выражение, является весь набор таблиц 25б Основы баэ данных Курс базы данных, а не набор строк таблицы, как это было при определении табличных ограничений.