Partilhar via


Comparação entre gatilhos e restrições

Todas as restrições e gatilhos DML possuem benefícios que os tornam úteis em situações especiais. O principal benefício de gatilhos DML é que eles podem conter lógicas de processamento complexas que utilizam o código do Transact-SQL. Portanto, gatilhos DML podem suportar todas as funções das restrições, mas nem sempre são o melhor método para um determinado recurso.

A integridade da entidade sempre deve ser reforçada no menor nível por índices que fazem parte das restrições PRIMARY KEY e UNIQUE ou que sejam criados independentes de restrições. A integridade de domínio deve ser reforçada por restrições CHECK e a integridade referencial (RI - referential integrity) deve ser reforçada por restrições FOREIGN KEY, assumindo que seus recursos atendem às necessidades funcionais do aplicativo.

Os gatilhos DML são muito úteis quando os recursos suportados por restrições não atendem às necessidades funcionais do aplicativo. Por exemplo:

  • As restrições FOREIGN KEY só podem validar um valor de coluna com uma combinação exata de valor em outra coluna a menos que a cláusula REFERENCES defina uma ação referencial em cascata.

  • Restrições só podem comunicar erros através de mensagens de erro padronizadas do sistema. Se o aplicativo exigir ou benefíciar-se de mensagens personalizadas e tratamento de erros mais complexo, é necessário usar um gatilho.

Gatilhos DLM podem colocar em cascata as alterações pelas tabelas relacionadas no banco de dados; no entanto, essas alterações podem ser executadas com mais eficiência utilizando restrições de integridade referencial em cascata.

  • Gatilhos DML podem desabilitar ou reverter alterações que violam a integridade referencial, cancelando assim a tentativa de modificação de dados. Pode ser que tais gatilhos só tenham efeito ao alterar uma chave estrangeira e se o novo valor não combinar com sua chave primária. Porém, as restrições FOREIGN KEY normalmente são usadas com este propósito.

  • Se houver restrições na tabela de gatilhos, elas serão verificadas após a execução do gatilho INSTEAD OF, mas antes da execução do gatilho AFTER. Se as restrições forem violadas, as ações do gatilho INSTEAD OF serão revertidas e o gatilho AFTER não será executado.