Ограничения

Ограничения позволяют задать метод, с помощью которого компонент SQL Server 2005 Database Engine автоматически обеспечивает целостность базы данных. Ограничения задают правила допустимости определенных значений в столбцах и представляют собой стандартный механизм обеспечения целостности. Предпочтительнее использовать ограничения, а не Триггеры DML, правила и значения по умолчанию. Оптимизатор запросов также использует определения ограничений для построения высокопроизводительных планов выполнения запросов.

Классы ограничений

SQL Server 2005 поддерживает следующие классы ограничений:

  • Ограничение 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) )

См. также

Другие ресурсы

CREATE TABLE (Transact-SQL)
Принудительное обеспечение целостности данных

Справка и поддержка

Получение помощи по SQL Server 2005