Введение в программирование SQL Server. Создание и управление базой данных. Инструменты целостности данных, страница 21

5.3 Типы ограничений

Эта секция описывает типы ограничений. Синтаксис, примеры и рассуждения об использования каждого ограничения.

Ограничение DEFAULT

Ограничение DEFAULT помещает значение в колонку, когда оно не было указано в операторе INSERT.

Следующий пример добавляет ограничение DEFAULT, которое добавляет значение unknown в поле ContactName:

USE Northwind

ALTER TABLE dbo.Customers

ADD CONSTRAINT DF_contactname DEFAULT 'unknown' FOR ContactName

Рассматривайте следующие факты об ограничении DEFAULT:

*  Оно проверяет наличие данных в таблице;

*  Оно относится только к оператору INSERT;

*  Только одно DEFAULT ограничение может быть назначено колонке;

*  Оно не может быть назначено колонке со свойством Identity или на колонку с типом данных rowversion.

*  Оно поддерживает некоторые значения предоставляемые системой – USER, CURRENT_USER, SESSION_USER, SYSTEM_USER или CURRENT_TIMESTAMP которые могут быть заменены вместо значений объявленных пользователем. Эти значения могут использоваться для определения того, кто добавил строку.

Ограничение CHECK

Ограничение CHECK ограничивает данные, которые пользователь может ввести в определённую колонку указанными значениями. Ограничение CHECK похоже на оператор WHERE, в котором вы можете указать рамки, в которым могут быть введены данные.

Следующий пример добавляет ограничение CHECK чтобы гарантировать, что день рождения соответствует определённому промежутку времени:

USE Northwind

ALTER TABLE dbo.Employees

ADD

CONSTRAINT CK_birthdate

CHECK (BirthDate>’01-01-1900’ AND BirthDate<getdate())

Рассматривайте следующие факты об ограничении CHECK:

*  Оно проверяет каждый раз, когда вы выполняете операторы INSERT или UPDATE;

*  Вы можете ссылаться на другие колонки этой таблицы;

*  Оно не может быть назначено колонке с типом данных rowversion;

*  Оно не может иметь подзапросов;

*  Если какие-нибудь данные сгенерировали ограничение CHECK, вы можете использовать оператор DBCC CHECKCONSTRAINT для получения ошибочных строк.

Ограничение PRIMARY KEY

Ограничение PRIMARY KEY определяет первичный ключ таблицы, который уникально идентифицирует строку. Это гарантирует целостность таблицы.

Следующий пример добавляет ограничение, которое указывает, что значение главного ключа – это идентификационный номер потребителя и указывает на использования не кластерного ключа для гарантирования целостности:

USE Northwind

ALTER TABLE dbo.Employees

ADD

CONSTRAINT PK_Customers

PRIMARY KEY NONCLUSTERED (CustomerID)

Рассматривайте следующие факты об ограничении PRIMARY KEY:

*  Только одно ограничение первичного ключа может быть назначено в таблице;

*  Вводимые значения должны быть уникальны для колонки;

*  Нулевые значения недопустимы;

*  Оно создаёт уникальный индекс для колонки. Вы можете указать кластерный или не кластерный индекс.

Ограничение UNIQUE

Ограничение UNIQUE (уникальность) указывает, что две строки в колонке не могут содержать одно и тоже значение. Это ограничение обеспечивает целостность таблицы с уникальным индексом. Ограничение уникальности эффективно, когда вы уже имеете первичный ключ, но хотите гарантировать, что другой идентификатор (колонка) тоже уникален.

Следующий пример создаёт ограничение уникальности на название компании:

USE Northwind

ALTER TABLE dbo.Supplies

ADD

CONSTRAINT U_CompanyName

UNIQUE NONCLUSTERED (CompanyName)

Рассматривайте следующие факты об ограничении UNIQUE:

*  Оно позволяет одно нулевое значение;

*  Вы можете поместить несколько ограничений уникальности в таблицу;

*  Вы можете назначить ограничение уникальности одной или нескольким колонкам, которые должны иметь уникальные значения, но не являются первичным ключом;

*  Ограничение UNIQUE гарантирует во время создание уникального индекса на указанную колонку или колонки.

Ограничение FOREIGN KEY

Ограничение FOREIGN KEY (вторичный ключ) гарантирует ссылочную целостность. Ограничение вторичного ключа определяет ссылку на колонку с первичным ключом или уникальную колонку в этой или другой таблице.