Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Fremdschlüsselbeschränkung kann Zyklen oder mehrere Kaskadenpfade verursachen?

SQL Server führt eine einfache Zählung von Kaskadenpfaden durch und anstatt herauszufinden, ob tatsächlich Zyklen existieren, nimmt es das Schlimmste an und weigert sich, die referenziellen Aktionen (CASCADE) zu erstellen:Sie können und sollten die Einschränkungen immer noch ohne die referenziellen Aktionen erstellen. Wenn Sie Ihr Design nicht ändern können (oder dies die Dinge gefährden würde), sollten Sie die Verwendung von Triggern als letzten Ausweg in Betracht ziehen.

Das Auflösen von Kaskadenpfaden durch FWIW ist ein komplexes Problem. Andere SQL-Produkte werden das Problem einfach ignorieren und Ihnen erlauben, Zyklen zu erstellen, in diesem Fall wird es ein Wettlauf sein, um zu sehen, welches den Wert zuletzt überschreibt, wahrscheinlich aufgrund der Unwissenheit des Designers (z. B. ACE/Jet tut dies). Ich verstehe, dass einige SQL-Produkte versuchen, einfache Fälle zu lösen. Tatsache bleibt, SQL Server versucht es nicht einmal, geht auf Nummer sicher, indem es mehr als einen Pfad nicht zulässt, und sagt es Ihnen zumindest.

Microsoft selbst empfiehlt die Verwendung von Triggern anstelle von FK-Einschränkungen.