Kürzlich stolperte ich über folgendes Problem: Gegeben ist ein einfaches Datenmodell mit "Books" und "Authors". Jedes "Buch" hat einen Verweis auf einen "Autor". Persistenz wird mit einer relationalen Datenbank erreicht. Neben dem Hinzufügen von Büchern und Autoren ist es auch möglich, sie zu löschen. Normalerweise, wenn ich einen Autor löschen möchte, würde ich eine SQL DELETE
Operation ausführen und die entsprechende Zeile entfernen. Allerdings habe ich in anderen Projekten gesehen, Leute rufen nicht DELETE
. Stattdessen fügen sie irgendeine Art von aktivem/gelöschtem Flag hinzu und markieren die entsprechende Zeile als "gelöscht".Relationale Datenbank: DELETE versus "Zum Löschen vormerken"
Meine Fragen sind: Ist dies in der Regel Best Practice? Was sind die Vorteile? Meine beste Vermutung ist:
- Festlegen eines Flag hat eine bessere Leistung als ein
DELETE
Betrieb - Wenn Sie aus dem Raum laufen, ist es immer noch möglich, eine Bereinigung Dienst auszuführen, die für gelöschte Objekt sucht und entfernt die entsprechenden Reihen
- eine Lösch Flag Einstellung ist für die Konsistenz der Datenbank besser, weil eine Deletion von „Autor“ in dem obigen Beispiel Fremdschlüssel in den entsprechenden „Bucheinträge zerstören könnte.
Wie auch immer, das sind nur Vermutungen. Hat jemand kenne die Antwort ?