sql >> Databáze >  >> RDS >> Sqlserver

Omezení cizího klíče může způsobit cykly nebo více kaskádových cest?

SQL Server provádí jednoduché počítání kaskádových cest a namísto toho, aby se snažil zjistit, zda nějaké cykly skutečně existují, předpokládá to nejhorší a odmítá vytvořit referenční akce (CASCADE):můžete a měli byste stále vytvářet omezení bez referenčních akcí. Pokud nemůžete změnit svůj design (nebo by to ohrozilo věci), měli byste zvážit použití spouštěčů jako poslední možnost.

FWIW řešení kaskádových cest je komplexní problém. Jiné produkty SQL budou problém jednoduše ignorovat a umožní vám vytvářet cykly, v takovém případě se bude závodit o to, který přepíše hodnotu jako poslední, pravděpodobně kvůli neznalosti konstruktéra (to dělá např. ACE/Jet). Chápu, že některé produkty SQL se pokusí vyřešit jednoduché případy. Faktem zůstává, že SQL Server se ani nesnaží, hraje to ultra bezpečně tím, že zakazuje více než jednu cestu a alespoň vám to říká.

Sám Microsoft doporučuje použití spouštěčů namísto FK omezení.



  1. Nejrychlejší způsob, jak zjistit, zda záznam existuje

  2. 3 způsoby, jak vrátit všechny tabulky BEZ primárního klíče na SQL Server

  3. Stránkování pomocí OFFSET / FETCH:Lepší způsob

  4. Jak získat aktuální verzi systému správy databází MySQL (DBMS)?