Программирование баз данных MS SQL Server (1084479), страница 62
Текст из файла (страница 62)
В определенном смысле эти конструкции можно рассматривать как унаследованные от прежних версий ЬО?. Яегуег, но они не лишены определенных преимуществ. Несмотря на сказанное, нет смысла подробно описывать эти конструкции, и остается лишь порекомендовать ознакомиться с ними в такой степени, чтобы узнать требования к обратной совместимости и получить возможность работать с унаследованным кодом. Правила и заданные по умолчанию значения несовместимы со стандартом АХэ1 (в связи с чем возникают проблемы переносимости), к тому же они не позволяют достичь такой же высокой производительности, как при использовании ограничений. Корпорация М!сгозо11 перевела правила и заданные по умолчанию значения в категорию программных конструкций, поддерживаемых только для обеспечения обратной совместимости, начиная с версии 7.0.
С тех пор прошло больше шести лет и выпущены три новые версии. Такое положение дел вряд ли может внушить оптимизм тем разработчикам, которые задумываются над тем, продолжится ли поддержка этих средств в будущем. Сам автор не зашел бы настолько далеко, чтобы предложить вам немедленно приступить к просмотру и замене любого кода с устаревшими конструкциями, который может встретиться в вашей работе, но, безусловно, в любом вновь разрабатываемом коде необходимо использовать ограничения.
244 Глава 6 Правила и заданные по умолчанию значения отличаются от ограничений прежде всего тем, как организовано их применение. Дело в том, что ограничения представляют собой свойства самой таблицы и не существуют как отдельно взятые конструкции, тогда как правила и заданные по умолчанию значения являются действительными объектами, существующими отдельно от других объектов. Ограничения определяются в составе объявления таблицы, а правила и заданные по умолчанию значения объявляются независимо, после чего выполняется их "привязка" к таблице.
Таким образом, правила и заданные по умолчанию значения являются независимыми объектами, что дает возможность использовать их повторно, без неоднократного переопределения. В действительности область применения правил и заданных по умолчанию значений не ограничивается их привязкой только к таблицам; допускается также привязка этих объектов к типам данных, что существенно расширяет возможности по созданию определяемых пользователем типов данных, обладающих широкими функциональными возможностями.
Правила Правила весьма напоминают ограничения СНЕСК. Правила имеют свойства, аналогичные описанным выше свойствам ограничений СНЕСК, за единственным исключением, — область применения правил ограничена тем, что они позволяют работать одновременно только с одним столбцом. Одно и то же правило можно связать отдельно с несколькими столбцами в таблице, но это правило будет действовать независимо применительно к каждому столбцу, поскольку в нем вообще не учитывается наличие других столбцов. Это означает, что ограничение, определенное как ИсуЯН1ррес[ <= ОсуОгс[егео], не может применяться в качестве правила (в нем упоминается больше чем один столбец), а ограничение Ь1КЕ ( [0-9] [0-9] [0-9) ] может использоваться в этом качестве (оно относится только к тому столбцу, с которым может быть также связано аналогичное правило). Вначале определим правило, чтобы можно было проще показать его отличие от ограничения: СЕЕАТЕ ЕОЬЕ Яа1агука1е АЯ 6Яа1агу > 0 Здесь заслуживает внимания то, что сравниваемое с конкретным числом значение представлено в виде переменной.
В качестве этого значения могут быть взяты данные из контролируемого столбца, после чего осуществляется подстановка такого значения вместо переменной 6Яа1агу. Таким образом, в данном примере правило показывает, что столбец, к которому оно будет привязано, должен содержать значения больше нуля. После создания данного правила можно проверить, как оно представлено в базе данных. Для этого можно воспользоваться процедурой зр Не1ргехщ ЕХЕС зр Ае1рсехс Яа1агука1е После вызова этого оператора на выполнение отображается точное определение правила: техг СЕЕАТЕ ЕОЬЕ Яа1агунэ1е АЯ 6Яа1агу > О Ограничения 245 Непосредственно после его определения правило не выполняет никаких действий.
При попытке вставить строку в таблицу Емр1оуеея обнаруживается, что в текущих обстоятельствах допускается ввод любого значения без учета каких-либо ограничений, кроме обусловленных применяемым типом данных. Для активизации правила необходимо воспользоваться специальной хранимой процедурой яр Ь1пбгп1е. Предположим, что требуется выполнить привязку правила Ба1агурп1е к столбцу Ба1агу таблицы Етр1оуеев. Для этого применяется следующий синтаксис: яр Ь1пбги1е <'гп1е'>, <'оЬ)есС папе'>, (<'хпспгеоп1у 11ад'>] Часть < ' гп1е ' > этого определения является достаточно простой — в ней должно быть указано правило, подлежащее привязке.
Часть < ' оЬБ есС пате ' > также не представляет никаких сложностей — она указывает на объект (столбец или определяемый пользователем тип данных), к которому следует выполнить привязку правила. Определенные нюансы следует учитывать только при использовании параметра < ' Епсигеоп1у Е1ад' >, который применяется лишь в случае привязки правила к определяемому пользователю типу данных. По умолчанию этот параметр имеет значение оЕГ. Но если при вызове процедуры вр Ьвпбгп1е < ' гп1е ' > в качестве него будет задано тгпе или 1, то связывание правила будет осуществляться только применительно к новым столбцам, для которых задается соответствующий тип данных, определяемый пользователем. Во всех столбцах, для которых уже был определен тот же тип данных в старой форме, будет по-прежнему использоваться форма, для которой еще не было задано правило. В рассматриваемом случае происходит просто привязка правила к столбцу, поэтому согласно синтаксическому определению требуются только первые два параметра: вр Ь1пбго1е 'Ба1агуко1е', 'Еер1оуеев.за1агу' В данном примере интерес представляет параметр, заданный в качестве оЬ,'есС пате, — в нем указаны и имя таблицы Етр1оуеев, и имя столбца Ба1агу, разделенные точкой (.).
Причина применения такой конструкции заключается в том, что правило не относится к какой-либо конкретной таблице до тех пор, пока не будет выполнена его привязка, поэтому необходимо указывать и таблицу, и столбец, к которому должно быть привязано это правило.
Если не используется структура именования саЬ1епаве. со1птп, то СУБД ВЯЬ Яегуег действует согласно предположению, что указанное имя относится к определяемому пользователем типу данных, а если таковое не обнаруживается, то появляется довольно непонятное сообщение об ошибке, относящееся к той ситуации, как будто была предпринята попытка привязки правила к типу данных: Мвч 15148, Ьеве1 1б, БСасе 1, Ргосебпге вр Ььпбгп1е, 11пе 190 Тье баСа Суре ос СаЬ1е со1птп 'Ба1агу' боев поС ехьяС ог уоп бо поС Ьате реге1вв1оп. После успешного осуществления привязки правила к столбцу попытка вставки или обновления строки таблицы Етр1оуеев с отрицательным значением в столбце Ба1агу приводит к нарушению правила и появлению сообщения об ошибке.
Чтобы отменить привязку правила к столбцу, можно воспользоваться процедурой яр ппЬ1пбгп1е: ЕХЕС вр ппЪ1пбгп1е 'Етр1оуеев.за1агу' Синтаксическая структурапроцедуры яр опЬЕпбгп1е также предусматривает возможность применения параметра Епспгеоп1у 11ад,причем, как и в случае проце- 246 Глава б дуры эр Ь1п<1ги1е, этот параметр не используется применительно к определениям столбцов. Если процедура эр цпЬ1п<1гц1е вызывается на выполнение с параметром Гцсогеоп1у 11ао, которому присвоено значение оп, а объектом действия процедуры является тип данных, определяемый пользователем (а не конкретный столбец), то отмена привязки распространяется только на те случаи, в которых этот тип данных будет использоваться в дальнейшем, а в существующих столбцах с указанным типом данных по-прежнему будет применяться то же правило. Удаление правила Если из базы данных необходимо полностью удалить определение некоторого правила, то можно воспользоваться оператором пеОР, применение которого было показано выше на примере таблиц: ОВОР ЕПЬЕ <ги1е пате> Заданные по умолчанию значения Заданные по умолчанию значения еще в большей степени напоминают свои аналоги, ограничения пееАпьт, чем правила напоминают ограничения снеск.
И действительно, заданные по умолчанию значения и ограничения РЕЕАПЬТ действуют полностью одинаково, а единственное реальное различие между ними заключается в том, что они по-разному закрепляются за таблицей. Кроме того, заданные по умолчанию значения (которые в отличие от ограничений представляют собой объекты базы данных) поддерживают определяемые пользователем типы данных. ДЛЕ 6ОЛЬ>ШИНСтаз НаЧИНашщИХ рзэй)а 6ст>ЧИКОЕ' бматавт'; ЧрЕЗЕЫЧайНО< трудНО ПОНята).'ЧЕМ':Отс ЛИЧаштея друт' От друта",ЗздаННЫЕ ПО уМОЛЧЕНИЮ."ЗНаЧЕНйя 'Н.'ОГрЗНИЧЕНИ)я'П<ЕёА))ът, ОСО<був йутаницу1 'вызывает то; что и те и другие кенструкдии1иыеют п>очт)и одинаковое йезначенйец А когаа)РЕч)у) идет'-,е:-",здоанноы, 'по'уыозлчаншР значенйи",:,несцднятно,'пОДреаумееакВся ли под а)йм)об<век)ыбезы десятника,".при)й~няемыеакечествезаденньвгпо)кеслчднйктзйачеййй (которым;Пооея))ИН) настояЩий-раздел),'-,илп.'крат«О обозначается,значение,"которое дейст)еи)тегльчноУИОПОЛЬзуЕтоя ПО;умолчание.:)е Том:Влучее',,'если>лене-'не-Зей>энп-'какое)либо, дейешительйой ЗнаЧЕниЕКА)йругдй:Ст>ороны',: йонятие>:.",огр1аНИче)иЕ ПЕРА)Ььт,'";отиеаится к тоойгкоеатрукции;::;которая,,йб оо)))бедна:на использовании огтдальНосо объзекга б>азыда>ннь)к;, йоскольк)ь:эта-конструкция я<вплетал< не>отъемпеыой чест1ьв:опреьделений'тпблпцль Синтаксис определения заданного по умолчанию значения во многом напоминает синтаксис правила: СНЕАтЕ ОЕРАцЬт <Еетаи1С папе> А5 <оетаи1с ча1це> Рассмотрим пример определения заданного по умолчанию значения, равного нулю, для столбца Еа1агу: СНЕАТЕ ОЕРАПЬТ 5а1агуоетаи1С А5 О И в этом случае заданное по умолчанию значение, не привязанное к какому-либо объекту, не выполняет реальных функций.
Для привязки заданных по умолчанию значений используется процедура эр Ь1поегац1с. имеющая синтаксис, идентичный Ограничения 247 синтаксису процедуры зр Ьупбгп1е (эти процедуры различаются только своими именами): ЕХЕС зр Ьгобесаи11 'Ба1агусетао1С', 'Еэр1оуеез.за1агу' Л для отмены привязки заданного по умолчанию значения к столбцу применяется процедура зр ппЬ1пбегап1гл ЕХЕС зр ипЬ1обеГаи1С 'Евр1оуеез.за1агу' Следует учитывать, что параметр Епс пгеоп1у Е1ао допускается применять также в вызове хранимых процедур зр Ь1пбегап11 и зр ппЬ1пбегап1С, но этот параметр также не используется применительно к столбцам. Удаление заданных по умолчанию значений Если из базы данных необходимо полностью удалить как объект заданное по умолчанию значение, то можно воспользоваться оператором РАЗОР, применение которого уже было показано по отношению к таблицам и правилам: РЕОР РЕГАСЕТ <бесао1С паве> Определение того, в каких таблицах и типах данных используются те или другие правила либо заданные по умолчанию значения Если в процессе эксплуатации базы данных возникает необходимость удалить или модифицировать правила или заданные по умолчанию значения, целесообразно вначале ознакомиться с тем, в каких таблицах и типах данных они используются.