sql >> Database >  >> RDS >> Sqlserver

Beperking van externe sleutels kan cycli of meerdere cascadepaden veroorzaken?

SQL Server telt eenvoudig cascadepaden en in plaats van te proberen te achterhalen of er cycli werkelijk bestaan, gaat het uit van het ergste en weigert het om de referentiële acties (CASCADE) te creëren:je kunt en moet nog steeds de beperkingen creëren zonder de referentiële acties. Als je je ontwerp niet kunt wijzigen (of als dit de zaken in gevaar zou brengen), kun je overwegen om als laatste redmiddel triggers te gebruiken.

FWIW-het oplossen van cascadepaden is een complex probleem. Andere SQL-producten zullen het probleem gewoon negeren en u in staat stellen om cycli te creëren, in welk geval het een race wordt om te zien welke de waarde als laatste zal overschrijven, waarschijnlijk tot onwetendheid van de ontwerper (bijv. ACE/Jet doet dit). Ik begrijp dat sommige SQL-producten zullen proberen om eenvoudige gevallen op te lossen. Feit blijft, SQL Server probeert het niet eens, speelt het ultraveilig door meer dan één pad niet toe te staan ​​en het vertelt je dat tenminste.

Microsoft adviseert zelf het gebruik van triggers in plaats van FK-beperkingen.



  1. FlySpeed ​​SQL-query verbinden met Salesforce.com

  2. Hoe maak je een back-up van je Moodle MySQL-database

  3. wat gebeurt er in de overgangsfase van adoptie in R12.2

  4. Controleer of een tabel een externe sleutel heeft in SQL Server met OBJECTPROPERTY()