Autor Téma: Cizí klíče a "multiple cascade paths"  (Přečteno 2089 krát)

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1308
  • Karma: 29
    • Pepak.net
Cizí klíče a "multiple cascade paths"
« kdy: 06-12-2012, 07:47:49 »
Tohle jsem vůbec nepochopil:

Mám číselník C(ID, HODNOTA), řekněme seznam osob. Mám tabulku T, která se na číselník C odkazuje z několika polí: T(ID, OSOBA1, OSOBA2, OSOBA3) (viz poslední odstavec).

Proč v MSSQL 2008 nejde na každé z polí OSOBA# přidat cizí klíč s ON DELETE SET NULL, ale jde to jen na jedno z nich? Chybová hláška "Introducing FOREIGN KEY constraint 'FK_OSOBA1' on table 'T' may cause cycles or multiple cascade paths." mi přijde úplně absurdní - dávala by snad smysl pro ON DELETE CASCADE (i když i tam by si s tím dobrá implementace měla poradit), ale SET NULL???

Prosím, neřešte, proč jsou ta pole všechna v jedné tabulce jako sloupce a ne jako řádky v extra tabulce se vztahem 1:N. Berte jako fakt, že pro to jsou důvody. Přestože by rozložení do extra tabulky problém řešilo, protože pak už by byl jen jeden sloupeček a ten by určitě šel odkazovat, jak potřebuju, tak to není vhodné řešení - to už je pro mě přijatelnější celé ON DELETE vypustit.

RomanZ

  • Host
Re:Cizí klíče a "multiple cascade paths"
« Odpověď #1 kdy: 06-12-2012, 08:16:45 »
Zavedeš ty cizí klíče bez ON DELETE SET NULL.
Napíšeš trigger, který před mazáním záznamu ty NULL hodnoty nastaví, jak potřebuješ.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1308
  • Karma: 29
    • Pepak.net
Re:Cizí klíče a "multiple cascade paths"
« Odpověď #2 kdy: 06-12-2012, 08:27:32 »
No to samozřejmě můžu a asi to tak i udělám, ale proč to nejde udělat přímočaře pomocí ON DELETE SET NULL? To je nějaká úžasná Microsoftí vymyšlenost?

RomanZ

  • Host
Re:Cizí klíče a "multiple cascade paths"
« Odpověď #3 kdy: 06-12-2012, 13:04:06 »
Pro řešení problému není důležitá otázka "proč něco nejde", ale "jak to jde". Leda že bys chtěl sám doma po nocích napsat vlastní verzi MSSQL serveru.

Kdysi jsem ty kaskády studoval, jak fungují, a není to tak jednoduché, jak to na první pohled vypadá. Tvůj případ se zdá být jasný a Tvůj dotaz zní logicky. Jenže existují případy, kdy to automaticky vyřešit nejde a MS to podle mne zaříznul z bezpečnostních důvodů - když to zacyklení neumí řešit obecně vždy, tak ho neřeší nikdy.

Nemá cenu se tím zdržovat, když cesta existuje.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1308
  • Karma: 29
    • Pepak.net
Re:Cizí klíče a "multiple cascade paths"
« Odpověď #4 kdy: 06-12-2012, 15:53:14 »
Pro řešení problému není důležitá otázka "proč něco nejde", ale "jak to jde". Leda že bys chtěl sám doma po nocích napsat vlastní verzi MSSQL serveru.
Z "proč se to děje" ovšem často vyplynou další místa, kde se to projevuje, a podobně. Proto po tom pátrám. Každopádně díky za info.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):