Wie implementieren Sie weiche Löschvorgänge in einer Datenbank?
Idealerweise würde die Lösung dies ermöglichen
- anständige Leistung auf großen Tischen
- Beziehungen berücksichtigen
- Berücksichtigen Sie eindeutige Schlüssel
- Der Benutzer sollte in der Lage sein, seine gelöschten Elemente zu finden und wiederherzustellen.
Vielen Dank!
quelle
In diesem Beispiel verwenden wir eine Tabelle, die so aussieht: "
Wenn Sie weiche Löschvorgänge ausführen möchten, erstellen Sie eine Tabelle, die die ID der zu löschenden Zeilen enthält. Vielleicht so etwas:
Angenommen, Sie möchten die Zeilen 10, 20, 30, 40, 50 löschen. Führen Sie einfach Folgendes aus:
Sie müssten immer INNER JOINs ausführen, um gültige Daten zu sehen
Gelöschte Zeilen zu sehen wäre sehr schnell
Um Zeile 20 in parent_data wiederherzustellen, führen Sie einfach aus
Um die Zeilen 20 und 50 dauerhaft zu löschen, führen Sie zwei Schritte aus, die Sie nicht zurücksetzen können:
Wenn die Tabelle child_data untergeordnete Datensätze enthält, müssen Sie eine separate Tabelle delete_child_data haben und diese auf ähnliche Weise verwalten. Vielleicht sieht der Tisch so aus:
Sie könnten wahrscheinlich Trigger oder FOREIGN KEY-Einschränkungen zwischen deleted_parent_table und deleted_child_table mit allen Schnickschnack verwenden
ON DELETE CASCADE
. Auf diese Weise sollte ein dauerhaftes Löschen der Zeile in deleted_parent_table zu deleted_child_table kaskadieren.quelle