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

Fremmednøglebegrænsning kan forårsage cyklusser eller flere kaskadestier?

SQL Server laver simpel optælling af kaskadestier, og i stedet for at forsøge at finde ud af, om der faktisk eksisterer nogen cyklusser, antager den det værste og nægter at oprette referencehandlingerne (CASCADE):du kan og bør stadig oprette begrænsningerne uden de referentielle handlinger. Hvis du ikke kan ændre dit design (eller det ville kompromittere tingene), bør du overveje at bruge triggere som en sidste udvej.

FWIW-løsning af kaskadestier er et komplekst problem. Andre SQL-produkter vil simpelthen ignorere problemet og give dig mulighed for at oprette cyklusser, i hvilket tilfælde det vil være et kapløb om, hvem der vil overskrive værdien sidst, sandsynligvis til designerens uvidenhed (f.eks. ACE/Jet gør dette). Jeg forstår, at nogle SQL-produkter vil forsøge at løse simple sager. Faktum er, at SQL Server ikke engang forsøger, spiller det ekstremt sikkert ved at afvise mere end én sti, og i det mindste fortæller den dig det.

Microsoft anbefaler selv brugen af ​​triggere i stedet for FK-begrænsninger.



  1. Sådan implementeres Teamcity med PostgreSQL for høj tilgængelighed

  2. Returner kolonneprivilegier fra en sammenkædet server i SQL Server (T-SQL-eksempler)

  3. =) Operatør for begyndere

  4. Retter Lås ventetimeout overskredet; prøv at genstarte transaktionen for en 'fast Mysql-tabel?