Share via


Comparación de los desencadenadores y las restricciones

Tanto las restricciones como los desencadenadores DML ofrecen ventajas específicas que resultan útiles en determinadas situaciones. La principal ventaja de los desencadenadores DML consiste en que pueden contener una lógica de proceso compleja que utilice código de Transact-SQL. Por tanto, los desencadenadores DML permiten toda la funcionalidad de las restricciones; sin embargo, no son siempre el mejor método para realizar una determinada característica.

La integridad de las entidades debe ser exigida siempre en el nivel más bajo por los índices que formen parte de las restricciones PRIMARY KEY y UNIQUE o que se creen independientemente de las restricciones. La integridad del dominio debe ser exigida mediante restricciones CHECK, y la integridad referencial (RI) mediante restricciones FOREIGN KEY, siempre que sus características satisfagan las necesidades funcionales de la aplicación.

Los desencadenadores DML resultan de especial utilidad cuando las características permitidas por las restricciones no cubren las necesidades funcionales de la aplicación. Por ejemplo:

  • Las restricciones FOREIGN KEY sólo pueden validar un valor de columna si coinciden exactamente con un valor de otra columna, a menos que la cláusula REFERENCES defina una acción referencial en cascada.

  • Las restricciones sólo pueden comunicar la existencia de errores mediante mensajes de error estándar del sistema. Si la aplicación necesita o puede aprovechar mensajes personalizados y un control de errores más complejo, deberá utilizar un desencadenador.

Los desencadenadores DML pueden realizar cambios en cascada mediante tablas relacionadas de la base de datos; sin embargo, estos cambios pueden ejecutarse de manera más eficaz mediante restricciones de integridad referencial en cascada.

  • Los desencadenadores DML pueden impedir o revertir los cambios que infrinjan la integridad referencial y cancelar, de ese modo, cualquier intento de modificación de los datos. Ese tipo de desencadenador puede activarse cuando se cambia una clave externa y el nuevo valor no coincide con su clave principal. No obstante, para estos casos suelen utilizarse restricciones FOREIGN KEY.

  • Si hay restricciones en la tabla de desencadenadores, se comprobarán después de la ejecución del desencadenador INSTEAD OF, pero antes de la ejecución del desencadenador AFTER. Si se infringen las restricciones, se revertirán las acciones del desencadenador INSTEAD OF y no se ejecutará el desencadenador AFTER.