Ограничения
Ограничения позволяют задать метод, с помощью которого компонент Database Engine автоматически обеспечивает целостность базы данных. Ограничения задают правила допустимости определенных значений в столбцах и представляют собой стандартный механизм обеспечения целостности. Предпочтительнее использовать ограничения, а не Триггеры DML, правила и значения по умолчанию. Оптимизатор запросов также использует определения ограничений для построения высокопроизводительных планов выполнения запросов.
Классы ограничений
SQL Server поддерживает следующие классы ограничений:
Ограничение NOT NULL указывает, что в столбце недопустимы значения NULL. Дополнительные сведения см. в разделе Разрешение значений NULL.
Ограничения CHECK обеспечивают целостность домена путем ограничения значений, которые могут быть помещены в столбец. Дополнительные сведения см. в разделе Ограничения CHECK.
Ограничение CHECK задает логическое условие поиска (принимающие значение TRUE, FALSE или unknown), которое применяется ко всем значениям, вставляемым в столбец. Все значения, для которых получается значение FALSE, отбрасываются. Для каждого столбца можно указать несколько ограничений CHECK. В следующем примере показано создание ограничения chk_id. Это ограничение, среди прочего, следит за соблюдением домена первичного ключа, обеспечивая, чтобы в качестве значений ключа вводились только числа указанного диапазона.
CREATE TABLE cust_sample ( cust_id int PRIMARY KEY, cust_name char(50), cust_address char(50), cust_credit_limit money, CONSTRAINT chk_id CHECK (cust_id BETWEEN 0 and 10000 ) )
Ограничения UNIQUE обеспечивают уникальность значений в наборе столбцов.
Ограничение UNIQUE не допускает использования одного и того же значения в двух строках столбца. Первичные ключи также обеспечивают уникальность, однако не допускают использование значения NULL в качестве одного из уникальных значений. Дополнительные сведения см. в разделе Ограничения UNIQUE.
Ограничения PRIMARY KEY используются для указания столбца или набора столбцов, которые имеют значения, уникально идентифицирующие строку в таблице. Дополнительные сведения см. в разделе Ограничения PRIMARY KEY.
Две строки таблицы не могут иметь одинаковых значений первичного ключа. В столбцах первичного ключа недопустимо значение NULL. В качестве первичного ключа рекомендуется использовать небольшой столбец с целочисленными значениями. Каждая таблица должна иметь первичный ключ. Столбец или сочетание столбцов, которые соответствуют требованиям значений первичного ключа, называются потенциальными ключами.
В следующем примере создается таблица part_sample с указанием поля part_nmbr в качестве первичного ключа.
CREATE TABLE part_sample (part_nmbr int PRIMARY KEY, part_name char(30), part_weight decimal(6,2), part_color char(15) );
Ограничения FOREIGN KEY задают и обеспечивают связи между таблицами. Дополнительные сведения см. в разделе Ограничения FOREIGN KEY.
Внешний ключ одной таблицы указывает на потенциальный ключ в другой таблице. В следующем примере в таблице order_part создается внешний ключ, который ссылается на таблицу part_sample, определенную ранее.
CREATE TABLE order_part (order_nmbr int, part_nmbr int FOREIGN KEY REFERENCES part_sample(part_nmbr) ON DELETE NO ACTION, qty_ordered int); GO
Вставить строку со значением внешнего ключа, для которого отсутствует потенциальный ключ с таким значением, нельзя, за исключением строки со значением NULL. Предложение ON DELETE определяет действия, предпринимаемые при попытке удаления строки, на которую указывает существующий внешний ключ. В предложении ON DELETE предусмотрены следующие параметры:
NO ACTION: удаления не произойдет и будет выведено сообщение об ошибке.
CASCADE: все строки с внешними ключами, указывающими на удаленную строку, также будут удалены.
SET NULL: всем строкам с внешними ключами, указывающими на удаленную строку, присваивается значение NULL.
SET DEFAULT: всем строкам с внешними ключами, указывающим на удаленную строку, присваивается установленное для них значение по умолчанию. Дополнительные сведения см. в разделе Умолчания.
Предложение ON UPDATE определяет действия, предпринимаемые при попытке обновления значения потенциального ключа, на которое указывает существующий внешний ключ. Это предложение также поддерживает параметры NO ACTION, CASCADE, SET NULL и SET DEFAULT.
Ограничения столбцов и таблиц
Ограничения могут относиться к столбцам или к таблицам. Ограничение столбца указывается в описании столбца и применяется только к данному столбцу. Ограничения, показанные в предыдущих примерах, являются ограничениями столбцов. Ограничение таблицы объявляется независимо от описаний столбцов и может быть применено к нескольким столбцам таблицы. Ограничения таблиц используются при необходимости включить в ограничение нескольких столбцов.
Например, если таблица имеет два или более столбцов в первичном ключе, для включения в ограничение всех столбцов первичного ключа необходимо использовать ограничение таблицы. Представьте таблицу, в которую записываются все события, происходящие в заводском компьютере. Предположим, что события нескольких типов могут происходить одновременно, однако в одно и то же время не может произойти двух событий одного типа. Этого можно достичь, если включить в первичный ключ таблицы, состоящий из двух столбцов, и столбец event_type, и столбец event_time, как показано в следующем примере.
CREATE TABLE factory_process
(event_type int,
event_time datetime,
event_site char(50),
event_desc char(1024),
CONSTRAINT event_key PRIMARY KEY (event_type, event_time) )
См. также