Comparaison des déclencheurs et des contraintes
Les contraintes et les déclencheurs DML présentent chacun des atouts qui les rendent utiles dans des situations particulières. Le principal atout des déclencheurs DML est qu'ils peuvent contenir une logique de traitement complexe utilisant du code Transact-SQL. Les déclencheurs DML peuvent donc prendre en charge toutes les fonctionnalités des contraintes, mais ne constituent pas pour autant la meilleure méthode à utiliser dans tous les cas.
L'intégrité de l'entité doit toujours être appliquée au niveau le plus bas par des index qui font partie des contraintes PRIMARY KEY et UNIQUE, ou qui sont créés indépendamment des contraintes. L'intégrité de domaine doit être appliquée au moyen de contraintes CHECK, et l'intégrité référentielle au moyen de contraintes FOREIGN KEY, en supposant que leurs caractéristiques correspondent aux besoins fonctionnels de l'application.
Les déclencheurs DML sont particulièrement utiles lorsque les fonctionnalités prises en charge par les contraintes ne peuvent pas répondre aux besoins fonctionnels de l'application. Par exemple :
Les contraintes FOREIGN KEY peuvent valider une valeur de colonne uniquement si celle-ci correspond exactement à une valeur d'une autre colonne, à moins que la clause REFERENCES définisse une action d'intégrité référentielle en cascade.
Les contraintes ne peuvent donner d'informations sur les erreurs que par l'intermédiaire des messages d'erreur système standard. Si votre application requiert (ou peut tirer parti) des messages personnalisés et d'une gestion des erreurs plus complexe, vous devez utiliser un déclencheur.
Les déclencheurs DML peuvent effectuer des modifications en cascade dans des tables associées dans la base de données, mais ces modifications peuvent être exécutées plus efficacement par le biais de contraintes d'intégrité référentielle en cascade.
Les déclencheurs DML peuvent servir à interdire ou à restaurer des modifications qui enfreignent l'intégrité référentielle, annulant ainsi la tentative de modification des données. Un déclencheur de ce type peut entrer en action si vous modifiez une clé étrangère et si la nouvelle valeur ne correspond pas à sa clé primaire. Toutefois, les contraintes FOREIGN KEY sont généralement utilisées à cette fin.
Si des contraintes existent sur la table du déclencheur, elles sont vérifiées après l'exécution du déclencheur INSTEAD OF mais avant celle du déclencheur AFTER. Si les contraintes sont violées, les actions du déclencheur INSTEAD OF sont restaurées et le déclencheur AFTER n'est pas exécuté.
Voir aussi