Введение в системы БД (542480), страница 72
Текст из файла (страница 72)
К сожалению, иа сегодняшний день лишь немногие продукты предоставляют что-либо сушествеииое в плане реализации такой поддержки, хотя ситуация в этом направлении пусть медленно, ио все же улучшается. В некоторых продуктах (особеиио в нереляционных) практикуется совсем другой подход, т.е. применяется процедурная поддержка ограничений целостности, построенная иа использовании хранимых, или триггериых, процедурз. Однако можно предположить, что если бы существующие СУБД действительно предоставляли необходимую декларативную поддержку, то по крайней мере 90ыь текста опрелелеиий типичной базы данных составляли бы объявления ограничений целостности данных. Таким образом, предоставляющая подобную поддержку система значительно облегчила бы труд прикладных программистов и позволила бы существенно повысить производительность их труда.
Декларативная поддержка ограничений целостиости является очень важным аспектом СУБД. Прежде чем перейти к следующему вопросу, отметим, что в реляционной модели иа протяжении последних лет точка зрения иа проблему поддержки целостности данных претерпевает изменения в большей степени, чем другие (пожалуй, г Хранимые, или триггерные, процедуры — это заранее скомпилированные процедуры, которые могут вызываться из прикладных програмл~ В качестве причера лыжни упомянуть определенные пользователе,ч операторы АВЯ, 01ЯТ, ВЕГВВСТ и т.д., которые рассчатривались в разделе 5.2 (подраздел "Обьявление операгпора'). Такие процедуры логически леожно расслчатривать как расширение СУБД Тв систечах клиентсервер они чаще всего хранятся и выполняются на сервереу Мы еще поговорич об этих процедурах в разделе 8.8, в аннотациях к некоторым публикациям в конце данной главы, а также в главе 2Р.
ЗО2 Часть 11. Реляционная модель точнее будет сказать, эволюционирует). Как отмечалось в главе 3, изначально акцент делался на первичных и внешних ключах (для краткости — просто на "ключах"). Однако со временем особое — даже ключевое! — значение ограничений целостности в общей картине осознавалось во все большей степени и оценивалось все выше. Одновременно начали возникать некоторые щекотливые вопросы, в частности относительно ключей.
Структура этой главы отражает такое смещение акцентов, поскольку в начале (и еше в нескольких разделах) рассматривается общая проблема ограничений целостности, а затем — ключи, которые по- прежнему имеют большое практическое значение. Схема классификации ограничений В [3.3] ограничения целостности классифицируются по четырем основным категориям: ограничения типа (домена), атрибута, переменной-отношения и базы данных. ° В ограничениях тина задаются допустимые значения для данного типа.
° Замечание. В этой главе под типом подразумевается скалярный тип. Типы отношений, конечно, также являются объектами ограничений типов, но они представляют собой, по существу, просто логическое следствие ограничений типа, которые применяются к скалярным типам и в терминах которых эти типы отношений в конечном счете определены.
° В ограничениях целостности атрибута задаются допустимые значения для данного атрибута. ° В ограничениях целостности переменной-овношения задаются допустимые значения лля данной переменной-отношения. ° В ограничениях целостности базы оанных задаются допустимые значения для этой базы данных. Подробнее указанные виды ограничений рассматриваются в разделах 8.2 — 8.5 соответственно. 8.2. Ограничения типа По существу, ограничение типа является перечнем (или логическим эквивалентом перечня) допустимых значений типа. Вот простой пример ограничения типа для типа НЕ16НТ (Вес). ТУРЕ НЕ16НТ РОБЯНЕР ( НЛТ1ОНЛЬ ) СОНЯТНА1НТ ТНЕ ХЕ16НТ ( ИЕ16НТ ) > 0.0 Мы принимаем очевидное соглашение, по которому в ограничении типа можно использовать подхоляшее имя типа, призванное обозначить произвольное значение рассматриваемого типа. В данном случае допустимы только такие значения веса детали, которые могут быть представлены рациональным числом, большим нуля.
Любое выражение, в котором предполагается определение веса, но в результате вычисления которого получается значение, не удовлетворяющее приведенному выше ограничению, будет отвергнуто. зоз Глава 8. Целостность данных Замечание. Если вам необходимо восстановить в памяти назначение операторов РОЯ ЯКЕР и ТНЕ, возвратитесь к главе 5. Напомним, что ограничение типа является, в общем, просто перечнем значений, которые составляют данный тип. Следовательно, в языке Тпгог)а! В мы связываем такие ограничения с определениями соответствующих типов и идентифицируем их посредством соответствующего имени типа.
(Поэтому ограничение типа может быть упразднено лишь в том случае, если будет исключен сам тип.) Таким образом, совершенно ясно, что единственным способ, с помощью которою в результате вычисления произвольного выражения может быть получено значение типа ИЕ16НТ, состоит в обращении к некоторому оператору выбора значений типа ИЕ16НТ. Поэтому любое выражение лишь в том случае не сможет нарушить ограничения для типа ИЕ16НТ, если нарушение этих ограничений будет проверяться используемым в выражении оператором выбора.
Следовательно, можно считать (по крайней мере, кониептуально), что в любом случае соблюдение ограничений типа контролируется именно во время выполнения некоторы,м оператором выбора. Дополнительно можно сказать, что ограничения типа всегда проверяются немедленно, а значит, ни одна переменная- отношение не может получить значение какого-либо атрибута в каком-либо кортеже, который не соответствовал бы требуемому типу (конечно, в ~акой системе, где имеется поддержка ограничений типов).
Вот еще один пример ограничения типа. ТХРЕ Р01ИТ РОБЯКЕР САКТЕЯХАН ( Х КАТХОНАЕ, Х КАТХОНАЕ ) соняткА1нт АВБ ( тне х (Р01нт) ) й 100.0 Ано АВЯ ( ТНЕ Х (Р01НТ) ) ь 100.0 ) Здесь контроль типа осуществляется (концептуально) в результате обращения к оператору выбора САКТЕБ1АН. Обратите внимание на применение определенного пользователем оператора АВБ (см. раздел 5.2 главы 5). Приведем более сложный пример — определение типа компонентов эллипса. тхРВ ееыряе РОББННР ( А еенОтн, В еенОтн, стк Р01ит ) СОНБТКА1НТ ТНЕ А ( ЕЕЫРБЕ ) Е ТНЕ В ( ЕЕЫРБЕ Здесь представлены возможные компоненты, а именно — А, В и СТК, которые соответствуют длине большой полуоси а, длине малой полуоси Ь и точке центра сгг рассматриваемого эллипса.
Предположим, что скалярная переменная Е объявлена с типом ЕЕЫРЯЕ, ее текущее значение длины большой полуоси равно 5, а значение длины малой полуоси равно 4. Теперь рассмотрим следующее присвоение. ТНЕ В ( Е ) := ЕЕНОТН ( 6.0 ] Замечание. В этом примере скалярная переменная и операция скалярного присвоения используются исключительно из соображений упрощения, поэтому вместо них с тем же успехом можно было использовать, скажем, переменную-отношение и операцию реляционного присвоения. Это присвоение, как и следует ожидать, будет отвергнуто, однако ошибочным является не само присвоение как таковое.
Ошибка будет зафиксирована, опять же, при выполнении оператора выбора (хотя никакого прямого вызова подобного оператора в при- 304 Часть П. Реляз(ионная модель своении не видно), поскольку в лействительности данное присвоение является сокраще- нием следующего выраженилз. е:= еы,ткве ~ тне й ~ е ), Ееиатн ( Б.Б ), тне стк ~ е ) ); Здесь в правой части операции присвоения явно показано обращение к оператору выбора, при выполнении которого и будет зафиксирована ошибка. 8.3. Ограничения атрибута Ограничение атрибута по своей сути является простым объявлением о том, что определенный атрибут имеет определенный тип.
В качестве примера еше раз обратимся к определению переменной-отношения поставщиков. 'чйн Б БКБЕ КЕЬйт10Н » в» в», Бнлме нлме, Бтйтнв 1НТЕБЕК, сттх снлк ) В этой переменной-отношении значения атрибутов Б», ВНКМЕ, БТКТУБ и С1ТУ ограничены типами Б», КйМЕ, 1НТЕБЕК и Снйн соответственно. Другими словами, ограничения атрибутов являются частью определения этих атрибутов и могут быть идентифицированы по соответствующим именам атрибутов. Отсюда следует, что ограничение атрибута может быть устранено только путем удаления самого атрибута »что на практике чаще всего означает удаление переменной-отношения, включающей данный атрибут). Замечание.
В принципе, любая попытка ввести в базу данных значение атрибута, имеющее тип, отличный от того, который был установлен длв данного атрибута, будет отвергнута. Однако на практике такие ситуации никогла не должны возникать, если только в системе применяются ограничения типа, описанные в предыдущем разделе. 8.4. Ограничения переменной-отношения Ограничение переменной-отношения — это ограничение для некоторой отдельной переменной-отношения (оно выражается лишь через рассматриваемую переменную- отношение, хотя, с другой стороны, может быть сколь угодно сложным).
Вот несколько примеров. СОНБТКйтнт БС5 1Б ЕМКТ1 ~ В ННЕКЕ Сттт = 'Ловбоп' ййн Втйтнн ~ 20 ) ; Смысл: "Поставщики в Лондоне должны обладать статусом, равным 20". З Иначе говоря (и несмотря на то, что мы явно не ссылались на главу 5Л псевдопеременные ТНЕ не являются логически необходимыми! Любое присвоение значения псевдопереиенной ТНЕ всегда логически эквивалентно (и фактически было определено просто как сокращенная запись) присвоению обычнои переменной результата вызова определенного оператора выбора.