|
Программирование >> Реализация целостности данных
{продолжение) Логический Тип данных SQL Server Большие двоичные или текстовые данные Логический тип Text данных Microsoft Jet Memo Yes/No Хранимый Размер диапазон значений Строковые данные Размер вплоть до 2 Гб для данных плюс SQL Server или 1 Гб 16 байт для Microsoft Jet 0 или 1 1 байт, но в SQL Server битовые значения комбинируются в байт Как я уже упоминала, SQL Server также разрешает определять поля, используй Ш)ОТ Поля тип ШЭОТ наследуют возможность хранить Null, значения по умолчанию и правила, которые были определены для типа, но могут быть переопределены на уровне Логически ограничение на уровне поля должно сужать ограничения для UDDT, но фактически SQL Server просто заменяет определения для UDDT на те, что определены для полей. То есть можно разрешить хранение Null для поля, даже если UDDT, в котором определено поле, не позволяет этого. SQL Server и механизм баз данных Microsoft Jet позволяют контролировать, могут ли поля хранить значения Null. Когда определяют поле в SQL Server, его просто спепифипируют как NULL или NOT NULL или щелкают этветствующий элемент управления в Enterprise Manager. Для механизма баз данных Microsoft Jet допустимость значений Null можно задать двумя способами - используй lar Null или поле Required. Кроме того, в механизме баз данных Microsoft Jet существует флаг roLengflr который определяет, можно ли хранить в полях типа Text или Memo пустые строка В SQL Server для этого используют ограничение СН ЕСК. Задание соответствующего свойства при определении поля позволяет определить значения по умолчанию в механизме баз данных Microsoft Jet. В П! Server можно определить свойство Default при создании поля или связать некое значение, генерируемое системой, со свойством Default, как это описано для UDDT. Я рекомендую объявлять значение по умолчанию в определение ицы, если вы не можете сделать этого на уровне домена. Наконец, и Microsoft Jet, и SQL Server позволяют специфицировать ограничения на уровне сущности. Microsoft Jet обеспечивает два свойства поля - Validation Rule и yalidationJexi. SQL Server разрешает создать ограничения CHECK на уровне поля или привязать ное правило к полю позднее, но первый метод предпочтительнее. На первый взгляд, правила проверки Microsoft Jet и ограничения CHECK сервера SQL Server выглядят мково. но между ними есть несколько ственных отличий. Оба имеют форму логических выражений, и никогда не позволяют сослаться на другие или таблицы. Однако правила проверки Microsoft Jet должны давать оценку True для проверяемой величины. Ограничения CHECK сервера SQL Server не должны давать оценку False. Это важно: как True, так и Null являются для CHECK значениями, для правил проверки Microsoft Jet приемлемо только True. Кроме того, для одного поля можно определить много ограничений CHECK. Фактически, одно правило и любое количество ограничений CHECK можно применить для одного поля в SQL Server, в то время как поле в Microsoft Jet имеет единственное свойство Vali-dationRule. Кстати, использование свойства ValidationTexie Micxosofi Jet позволяет возвращать в клиентское приложение сообщение об ошибке. Microsoft Access показывает текст в окне сообщений, и этот текст доступен в Microsoft Visual Basic и других средствах программирования через обработку строковых величин в коллекции объектов Errors. Ограничения на уровне сущности, которые ссылаются на множество столбцов одной таблицы, реализуются в качестве правил проверки на уровне таблицы в MicrosotUet и табличных ограничений CHECK в SQL Server. Несмотря на то. что объявляются они в другом месте, такие ограничения на уровне таблиц функционируют точно так же, как соответствующие ограничения на уровне полей. Самое фундаментальное ограничение на уровне сущности - требование, чтобы каждый экземпляр сущности можно было однозначно идентифипировать. Помните, что именно это и есть правило целостности сущности; все другие правила в основном представляют собой то, на что ссылаются как на ограничения целостности на уровне сущности. Microsoft и SQL Server ограничения уни- кальности, но разными способами. Оба продукта реализуют ограничение, используя индексы, но SQL Server скрывает это от теля. Создает ли сервер индекс явным образом (Microsoft Jet) или объявляет ограничение (SQL Server) - это технические детали. И Microsoft. и SQL Server поддерживают ьные наборы полей. Оба также поддерживают первичные ключи, состоящие из нескольких полей, что подразумеваем оьносгь такого набора. Для таблицы может быть определен только один ключ, порой состоящий из нескольких полей. Ограничений уникальности может быть сколько угодно. Еще одно важное различие между ограничениями уникальности и первичными ключами: уникальные индексы могут содержать Null, a первичные ключи - нет. Серверы баз данных по-рашому обрабатывают Null в уникальных индексах. Microsoft Jet поддерживает свойство ignoreNuUs, который предотвращает добавление информапии о записях, содержащих Null в индексных полях, в индексы. Записи добавляются в но содержимое индекса не изменяется. Эта возможность не реализована в SQL Server. Кроме того, SQL Server разрешает добавить в таблицу только одну запись, содержащую Null руемом поле. Это логически не оправдано, так как позволяет рассматривать записи, содержащие NuU, как одинаковые, хотя они, конечно, таковыми не являются. Null не эквивалент чего бы то ни было, не исключая другого Интересно, что ни Microsoft Jet, ни SQL Server не требуют обязательного определения первичного ключа для таблицы или даже существования уникального набора полей. Другими словами, можно создавать таблицы, которые не являются отношениями (кортежи в отношениях должны быть уникальны, а записи в таблицах - не обязательно). Почему разработчики остановились на этом решении, я не понимаю, но такая возможность существует. SQL Server также обеспечивает процедурные механизмы обеспечения целостности на уровне сущности, чего не может Microsoft Jet. Триггеры (triggers) - это небольшие элементы кода (на языке Transact-SQL для SQL Server), которые автоматически выполняются, когда происходит определенное событие. Для каждого события INSERT, UPDATE, или DELETE можно определить множество триггеров, и один триггер может быть определен для нескольких событий. Ссылочная целостность Хотя Microsoft Jet и SQL Server поддерживают ссылочную целостность практически одинаковым образом, они используют для этого различные парадигмы. SQL Server позволяет объявлять внешние ключи на уровне определения таблицы. Ограничение внешнего ключа задает ссылку на ключ-кандидат другой, ссылочной таблицы. Когда ссылка определена, SQL
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |