w MSSQL 2005 Właśnie uderzył niesławny komunikat o błędzie:Na czym polega problem z kluczem obcym kaskadowania wielu ścieżek i cykli?
wprowadzania obcego ograniczenie klucza XXX YYY na stole może powodować cykli lub wiele ścieżek kaskadowe. Określ ON DELETE NO ACTION lub ON UPDATE NO ACTION lub zmodyfikuj inne ograniczenia klucza OBCEGO.
Teraz StackOverflow ma kilka tematów dotyczących tego komunikatu o błędzie, więc mam już rozwiązanie (w moim przypadku będę musiał użyć wyzwalaczy), ale jestem ciekaw, dlaczego jest taki problem w ogóle.
Jak rozumiem, istnieją zasadniczo dwa scenariusze, których chcą uniknąć - cykl i wiele ścieżek. Cykl będzie polegał na tym, że dwie tablice kaskadują sobie klucze obce. OK, cykl może obejmować również kilka tabel, ale jest to podstawowy przypadek i łatwiej go przeanalizować.
Wiele ścieżek byłoby wtedy, gdy TableA ma obce klucze do TableB i TableC, a TableB ma również klucz obcy do TableC. Znowu - jest to minimalny podstawowy przypadek.
Nie widzę żadnych problemów, które pojawiłyby się, gdy rekord zostałby usunięty lub zaktualizowany w dowolnej z tych tabel. Oczywiście, może być konieczne wielokrotne wysyłanie zapytań do tej samej tabeli, aby sprawdzić, które rekordy wymagają aktualizacji/usunięcia, ale czy to naprawdę problem? Czy to jest problem z wydajnością?
W innych tematach dotyczących SO ludzie sięgają aż do etykietowania za pomocą kaskad jako "risky" i określają "resolving cascade paths is a complex problem". Czemu? Gdzie jest ryzyko? Gdzie jest problem?
Czy zastąpienie go wyzwalaczem czyniłoby to lepszym? Oczywiście - istnieje takie podejście, jak "nie używanie obcych kluczy w ogóle" i robienie wszystkiego z kodu. Nie sądzę, że muszę ci powiedzieć, dlaczego myślę, że to zły pomysł ... –