Prawdopodobnie mam wąski umysł, ale jeśli utworzę ograniczenie klucza obcego, a wiersz zostanie zaktualizowany lub usunięty, utracę to połączenie, jeśli kolumna tabeli podrzędnej zostanie ustawiona na NULL.
Jaki jest cel celowego utrzymywania tych osieroconych rzędów?
foreign-key
null
Derek Downey
źródło
źródło
Odpowiedzi:
To, czy
set null
jest przydatne, czy nie, zależy od tego, co wybrałeśnull
w danym kontekście - przy całym zamieszaniu i opiniach wokółnull
IMO rozsądnym podejściem jest, aby DBAStosując te reguły, rozważ następujący przypadek użycia:
null
się reprezentować niezależny sklep (tj. Taki, który nie jest częścią sieci)W tym przypadku ma
on delete set null
to sens. Istnieją inne sposoby modelowania tych reguł biznesowych, ale jest to najprostszy i jeśli dokładnie pasuje do faktów, na których Ci zależy w prawdziwym świecie, sugeruję, że jest w porządkuźródło
Większość przypadków użycia, które mogę sobie wyobrazić, mają na ogół formę „Cóż, moglibyśmy zrobić coś innego, ale zamiast tego chcieliśmy to zrobić”.
Rozważ
owner
pole błędu w systemie śledzenia problemów w firmie. Jeśli John zrezygnuje, z pewnością wszystkie jego problemy nie powinny być po prostu usunięte, gdy jego konto zostanie usunięte. Nawet wtedy niektóre bazy danych zezwalająSET DEFAULT
jako działanie (lub mając wyzwalacz wykonujący to samo zadanie), a posiadanieNobody
pracownika jako domyślnego właściciela problemów może być opcją. Albo moglibyśmy miećdisabled
pole dla Johna zamiast usuwać jego zapis.źródło
RESTRICT
), jeśli z żadnego innego powodu, aby zrzucić winę na starego pracownika, gdy coś pójdzie nie tak!