Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

La contrainte de clé étrangère peut provoquer des cycles ou plusieurs chemins en cascade ?

SQL Server effectue un simple comptage des chemins en cascade et, plutôt que d'essayer de déterminer s'il existe réellement des cycles, il suppose le pire et refuse de créer les actions référentielles (CASCADE) :vous pouvez et devez toujours créer les contraintes sans les actions référentielles. Si vous ne pouvez pas modifier votre conception (ou si cela compromettrait les choses), vous devriez envisager d'utiliser des déclencheurs en dernier recours.

FWIW résoudre les chemins en cascade est un problème complexe. D'autres produits SQL ignoreront simplement le problème et vous permettront de créer des cycles, auquel cas ce sera une course pour voir qui écrasera la valeur en dernier, probablement à l'ignorance du concepteur (par exemple, ACE/Jet le fait). Je comprends que certains produits SQL tenteront de résoudre des cas simples. Il n'en reste pas moins que SQL Server n'essaie même pas, joue la sécurité en interdisant plus d'un chemin et au moins il vous le dit.

Microsoft lui-même conseille l'utilisation de déclencheurs au lieu de contraintes FK.