Condividi tramite


Trigger a confronto con i vincoli

Vincoli e trigger DML presentano vantaggi che li rendono utili in situazioni diverse. Il vantaggio principale dei trigger DML consiste nella possibilità di includere una logica di elaborazione complessa che utilizza il codice Transact-SQL. I trigger DML supportano quindi la funzionalità completa dei vincoli, tuttavia nel caso di determinate funzioni l'utilizzo dei trigger DML non è consigliabile.

È consigliabile applicare sempre l'integrità di entità al livello più basso utilizzando indici che fanno parte dei vincoli PRIMARY KEY e UNIQUE oppure creati indipendentemente dai vincoli. Per applicare l'integrità di dominio è consigliabile utilizzare i vincoli CHECK, mentre per applicare l'integrità referenziale (RI) è consigliabile utilizzare i vincoli FOREIGN KEY, a condizione che le loro funzionalità soddisfino le esigenze funzionali dell'applicazione.

I trigger DML sono particolarmente utili quando le funzionalità supportate dai vincoli non sono in grado di soddisfare le esigenze funzionali dell'applicazione. Ad esempio:

  • I vincoli FOREIGN KEY consentono di convalidare un valore di colonna soltanto se corrisponde esattamente al valore di un'altra colonna, a meno che la clausola REFERENCES non definisca un'operazione referenziale di propagazione.

  • I vincoli sono in grado di segnalare errori soltanto tramite messaggi di errore standard di sistema. Se nell'applicazione è necessario o consigliabile utilizzare messaggi personalizzati e gestire gli errori in modo più complesso, è necessario utilizzare un trigger.

I trigger DML consentono di propagare le modifiche nelle tabelle correlate del database, tuttavia è possibile eseguire le modifiche in modo più efficiente utilizzando vincoli di integrità referenziale di propagazione.

  • I trigger DML impediscono di apportare modifiche che violano l'integrità referenziale o consentono di eseguirne il rollback, annullando in tal modo il tentativo di modifica dei dati. Un trigger di questo tipo potrebbe essere attivato quando si modifica una chiave esterna e il nuovo valore non corrisponde alla chiave primaria. A questo scopo tuttavia vengono normalmente utilizzati i vincoli FOREIGN KEY.

  • Gli eventuali vincoli inclusi nella tabella di trigger vengono verificati dopo l'esecuzione del trigger INSTEAD OF e prima dell'esecuzione del trigger AFTER. In caso di violazione dei vincoli, viene eseguito il rollback delle azioni del trigger INSTEAD OF e il trigger AFTER non viene eseguito.