sql >> Databasteknik >  >> RDS >> Sqlserver

Begränsning av främmande nyckel kan orsaka cykler eller flera kaskadvägar?

SQL Server gör enkel räkning av kaskadvägar och, snarare än att försöka räkna ut om några cykler faktiskt existerar, antar den det värsta och vägrar att skapa referensåtgärderna (CASCADE):du kan och bör fortfarande skapa begränsningarna utan referensåtgärderna. Om du inte kan ändra din design (eller att göra det skulle äventyra saker) bör du överväga att använda triggers som en sista utväg.

FWIW-lösning av kaskadvägar är ett komplext problem. Andra SQL-produkter kommer helt enkelt att ignorera problemet och låta dig skapa cykler, i vilket fall det kommer att bli en kapplöpning för att se vilken som kommer att skriva över värdet sist, förmodligen till okunnighet hos designern (t.ex. ACE/Jet gör detta). Jag förstår att vissa SQL-produkter kommer att försöka lösa enkla fall. Faktum kvarstår, SQL Server försöker inte ens, spelar det extremt säkert genom att förbjuda mer än en sökväg och åtminstone säger den dig det.

Microsoft rekommenderar själva att triggers används istället för FK-begränsningar.



  1. Hur man tar bort de efterföljande utrymmena efter månadens namn i Oracle

  2. Trunkera alla tabeller i en MySQL-databas med ett kommando?

  3. Operatör

  4. finns det något sätt att logga alla misslyckade SQL-satser i Oracle 10g