Ограничения
Ограничения позволяют задать метод, с помощью которого компонент 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) )
См. также