Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Il vincolo della chiave esterna può causare cicli o più percorsi a cascata?

SQL Server esegue un semplice conteggio dei percorsi a cascata e, anziché cercare di capire se esistono effettivamente dei cicli, presuppone il peggio e si rifiuta di creare le azioni referenziali (CASCADE):puoi e dovresti comunque creare i vincoli senza le azioni referenziali. Se non puoi modificare il tuo design (o farlo comprometterebbe le cose), dovresti considerare di utilizzare i trigger come ultima risorsa.

La risoluzione dei percorsi a cascata FWIW è un problema complesso. Altri prodotti SQL ignoreranno semplicemente il problema e ti permetteranno di creare cicli, nel qual caso sarà una corsa per vedere quale sovrascriverà il valore per ultimo, probabilmente per ignoranza del progettista (ad esempio ACE/Jet lo fa). Comprendo che alcuni prodotti SQL tenteranno di risolvere casi semplici. Resta il fatto, SQL Server non ci prova nemmeno, lo fa in modo ultra sicuro non consentendo più di un percorso e almeno te lo dice.

Microsoft stessa consiglia l'uso di trigger invece di vincoli FK.