Jaki jest problem z kaskadą klucza obcego wielu ścieżek i cykli?

W MSSQL 2005 właśnie usłyszałem niesławny komunikat o błędzie:

Wprowadzenie ograniczenia klucza FOREIGN XXX w tabeli YYY może powodować cykle lub wiele ścieżek kaskadowych. Określ ON DELETE NO ACTION lub ON UPDATE NO ACTION lub zmodyfikuj inne ograniczenia FOREIGN KEY.

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 ciekawy, dlaczego w ogóle istnieje taki problem.

Jak rozumiem, istnieją zasadniczo dwa scenariusze, których chcą uniknąć - cykl i wiele ścieżek. Cykl polegałby na tym, że dwie tabele mają ze sobą kaskadowe klucze obce. OK, cykl może obejmować również kilka tabel, ale jest to podstawowy przypadek i będzie łatwiejszy do analizy.

Wiele ścieżek byłoby, gdy TableA ma klucze obce do TableB i TableC, a TableB ma także klucz obcy do TableC. Ponownie - jest to minimalny podstawowy przypadek.

Nie widzę żadnych problemów, które mogłyby powstać, gdy rekord zostałby usunięty lub zaktualizowany w którejkolwiek z tych tabel. Oczywiście, może być konieczne wielokrotne zapytanie do tej samej tabeli, aby zobaczyć, które rekordy wymagają aktualizacji / usunięcia, ale czy to naprawdę problem? Czy to jest problem z wydajnością?

W innych tematach SO ludzie posuwają się do oznaczania przy użyciu kaskad jako „ryzykowny„i oświadcz, że”rozwiązywanie ścieżek kaskadowych jest złożonym problemem„. Dlaczego? Gdzie jest ryzyko? Gdzie jest problem?

questionAnswers(5)

yourAnswerToTheQuestion