Ich verwende niemals kaskadierende Löschungen. Warum? Weil es zu leicht ist, einen Fehler zu machen. Viel sicherer erfordern Client-Anwendungen explizit löschen (und die Voraussetzungen für die Löschung erfüllen, wie das Löschen FK Aufzeichnungen bezeichnet.)
In der Tat, Deletionen per se kann durch Markieren Aufzeichnungen vermieden werden als gelöscht oder Umzug in Archiv-/Historientabellen.
Wenn Sie Datensätze als gelöscht markieren, hängt dies vom relativen Anteil der als gelöscht markierten Daten ab, da SELECT
s nach 'isDeleted = false
' filtern müssen. Ein Index wird nur verwendet, wenn weniger als 10% (ungefähr abhängig von der RDBMS) von Datensätzen werden als gelöscht markiert.
Welche dieser zwei Szenarien würden Sie bevorzugen:
1) Entwickler zu Ihnen kommt, sagt: „Hey, das nicht gelöscht wird funktionieren“. Ihr beide schaut hinein und stellt fest, dass er versehentlich versucht hat, ganze Tabelleninhalte zu löschen. Sie lachen beide und gehen zurück zu dem, was Sie getan haben.
2) Entwickler kommt zu Ihnen und fragt verlegen: "Haben wir Backups?"
Mögliches Duplikat von [Wann/Warum wird Kaskadierung in SQL Server verwendet?] (Http://stackoverflow.com/questions/59297/when-wy-to-use-cascading-in-sql-server). Außerdem stimme ich viel mehr mit den Antworten der anderen Frage überein, die ganz anders sind als die hier. –