Restrições

As restrições permitem que você defina o modo que o Mecanismo de Banco de Dados automaticamente impõe a integridade de um banco de dados. As restrições definem as regras referentes aos valores permitidos nas colunas e são o mecanismo padrão para impor a integridade. Usa-se as restrições, preferivelmente, para Gatilhos DML, regras e padrões. O otimizador de consultas também usa as definições de restrição para criar planos de execução de consultas com alto desempenho.

Classes de restrições

O SQL Server oferece suporte para as seguintes classes de restrições:

  • NOT NULL especifica que a coluna não aceita valores NULOS. Para obter mais informações, consulte Permitindo valores nulos.

  • As restrições CHECK impõem a integridade do domínio limitando os valores que podem ser inseridos em uma coluna. Para obter mais informações, consulte Restrições CHECK.

    Uma restrição CHECK especifica um critério de pesquisa Booleano (avalia em TRUE, FALSE ou desconhecido) aplicado a todos os valores inseridos na coluna. Todos os valores avaliados em FALSE são rejeitados. É possível especificar diversas restrições CHECK para cada coluna. O exemplo a seguir mostra a criação de uma restrição chk_id. Além disso, essa restrição impõe o domínio da chave primária, certificando-se de que apenas os números dentro de uma faixa especificada sejam inseridos na chave.

    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 )
       )
    
  • As restrições UNIQUE impõem exclusividade dos valores em um conjunto de colunas.

    Em uma restrição UNIQUE, duas linhas na tabela não podem ter o mesmo valor nas colunas. As chaves primárias também impõem exclusividade, mas as chaves primárias não permitem NULO como um dos valores exclusivos. Para obter mais informações, consulte Restrições UNIQUE.

  • As restrições PRIMARY KEY identificam a coluna ou o conjunto de colunas que tem valores que identificam, exclusivamente, uma linha na tabela. Para obter mais informações, consulte Restrições PRIMARY KEY.

    Duas linhas em uma tabela não podem ter o mesmo valor de chave primária. Não é possível inserir NULL para qualquer coluna em uma chave primária. É recomendável usar uma coluna inteira pequena e como uma chave primária . Cada tabela deve ter uma chave primária. Uma coluna ou uma combinação de colunas qualificada como um valor de chave primária é chamada de chave de candidato.

    O exemplo a seguir cria a tabela part_sample e especifica o campo part_nmbr como a chave primária.

    CREATE TABLE part_sample
             (part_nmbr      int         PRIMARY KEY,
             part_name      char(30),
             part_weight      decimal(6,2),
             part_color      char(15) );
    
  • As restrições FOREIGN KEY identificam e impõem as relações entre tabelas. Para obter mais informações, consulte Restrições FOREIGN KEY.

    Uma chave estrangeira em uma tabela aponta para uma chave de candidato em outra tabela. No exemplo a seguir, a tabela order_part estabelece uma chave estrangeira referente à tabela part_sample definida anteriormente.

    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
    

    Não é possível inserir uma linha com um valor de chave estrangeira, exceto NULL, se não houver uma chave de candidato com aquele valor. A cláusula ON DELETE controla quais ações serão tomadas ao tentar excluir uma linha para a qual apontam as chaves estrangeiras existentes. A cláusula ON DELETE tem as seguintes opções:

    • NO ACTION especifica que a exclusão falhou devido a um erro.

    • CASCADE especifica que todas as linhas com chaves estrangeiras que apontam para a linha excluída também serão excluídas.

    • SET NULL especifica que todas as linhas com chaves estrangeiras que apontam para a linha excluída serão definidas como NULL.

    • SET DEFAULT especifica que todas as linhas com chaves estrangeiras que apontam para a linha excluída serão definidas para o seu valor padrão. Para obter mais informações, consulte Padrões.

    A cláusula ON UPDATE define as ações que serão tomadas se você tentar atualizar um valor de chave de candidato para o qual apontam as chaves estrangeiras existentes. Esta cláusula também dá suporte para as opções NO ACTION, CASCADE, SET NULL e SET DEFAULT.

Restrições de coluna e tabela

As restrições podem ser restrições de coluna ou restrições de tabela. Uma restrição de coluna é especificada como parte de uma definição de coluna e se aplica somente àquela coluna. As restrições nos exemplos anteriores são restrições de coluna. Uma restrição de tabela é declarada independentemente de uma definição de coluna e pode ser aplicada a mais de uma coluna em uma tabela. As restrições da tabela devem ser usadas quando mais de uma coluna tiver que ser incluída em uma restrição.

Por exemplo, se uma tabela tiver duas ou mais colunas na chave primária, você deverá usar uma restrição de tabela para incluir ambas as colunas na chave primária. Considere uma tabela que registra eventos que acontecem em um computador de uma fábrica. Considere que os eventos de diversos tipos possam ocorrer ao mesmo tempo, porém, dois eventos que ocorram ao mesmo tempo não podem ser do mesmo tipo. Isso pode ser imposto na tabela, incluindo ambas as colunas event_type e event_time em uma chave primária de duas colunas, conforme mostra o exemplo a seguir.

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) )

Consulte também

Referência

Outros recursos