Ich bin wahrscheinlich engstirnig, aber wenn ich eine Fremdschlüsseleinschränkung erstelle und eine Zeile aktualisiert oder gelöscht wird, verliere ich diese Verbindung, wenn die Spalte der untergeordneten Tabelle auf NULL gesetzt wird.
Was ist der Zweck, diese verwaisten Reihen absichtlich zu behalten?
foreign-key
null
Derek Downey
quelle
quelle
Antworten:
Ob dies
set null
sinnvoll ist oder nicht, hängt davon ab, was Sienull
im jeweiligen Kontext gemeint haben - bei aller Verwirrung und Meinung umnull
IMO ist der DBA der vernünftige AnsprechpartnerBerücksichtigen Sie bei diesen Regeln den folgenden Anwendungsfall:
null
, dass ein unabhängiger Shop dargestellt werden soll (dh einer, der nicht Teil einer Kette ist).In diesem Fall
on delete set null
macht ein Sinn. Es gibt andere Möglichkeiten, diese Geschäftsregeln zu modellieren, aber dies ist die einfachste, und wenn sie genau zu den Tatsachen passen, die Sie in der realen Welt interessieren, schlage ich vor, dass dies vollkommen in Ordnung istquelle
Die meisten Anwendungsfälle, die mir im Allgemeinen einfallen, haben die Form "Nun, wir könnten etwas anderes machen, aber wir wollten dies stattdessen tun".
Betrachten Sie ein
owner
Feld für einen Fehler in einem Fehlerverfolgungssystem eines Unternehmens. Wenn John kündigt, sollten sicherlich nicht alle seine Probleme einfach gelöscht werden, wenn sein Konto entfernt wird. Selbst dann erlauben einige Datenbanken, dassSET DEFAULT
eine Aktion (oder ein Trigger dieselbe Aufgabe ausführt) und einNobody
Mitarbeiter der Standardeigner von Problemen ist, eine Option. Oder wir könnten eindisabled
Feld für John haben, anstatt seinen Datensatz zu löschen.quelle
RESTRICT
) nicht zuzulassen , wenn aus keinem anderen Grund die Schuld auf einen alten Mitarbeiter gerichtet wird, wenn etwas schief geht!