Ich muss zunächst klarstellen, dass die Statusspalte nicht den Status eines realen Elements widerspiegeln soll, das durch den Datensatz (Zeile) in der Tabelle dargestellt wird. Vielmehr soll der Status des Datensatzes selbst angezeigt werden.
Es kann so einfach wie Aktiv / Inaktiv oder kompliziert wie Genehmigt / Gelöscht / Gesperrt / Ausstehend / Abgelehnt usw. sein. Der Status kann in einer booleschen / kurzen Ganzzahlspalte oder einer Einzelzeichenspalte mit Zuordnungen wie true/ 1= Aktiv oder gespeichert werden A= Genehmigt.
Die Grundidee besteht darin, in der Anwendung eine Unterstützung für den Papierkorb- / Papierkorb-ähnliche Wiederherstellung bereitzustellen (und diese in der Datenbank zu simulieren). Wenn es eine Front-End-GUI oder eine andere Schnittstelle gibt, die einem Benutzer das "Löschen" von Datensätzen ermöglichen soll, wird der Datensatz in der Tabelle nicht tatsächlich gelöscht, sondern der Datensatzstatus wird einfach in Inaktiv oder Gelöscht geändert. Wenn die Schnittstelle Datensätze abruft, werden immer die Datensätze abgerufen, die nur der Bedingung entsprechen, dass der Status Aktiv oder Genehmigt lautet.
Wenn der Benutzer einen Fehler macht und der "gelöschte" Datensatz (aus Benutzersicht) wiederhergestellt werden muss, kann ein Datenbankadministrator den Datensatz problemlos auf "Aktiv" oder "Genehmigt" zurücksetzen. Dies ist besser, als nach Sicherungen zu suchen und hoffentlich den ursprünglichen Datensatz zu finden Dort. Über die Benutzeroberfläche selbst kann der Benutzer gelöschte Datensätze in einer separaten Ansicht anzeigen und bei Bedarf wiederherstellen oder sogar dauerhaft löschen (Löschen des tatsächlichen Datensatzes).
Meine Fragen:
- Ist das eine gute oder eine schlechte Praxis?
- Beeinflusst es die Normalisierung der Daten?
- Was sind die potenziellen Gefahren?
- Gibt es eine alternative Methode, um dasselbe Ziel zu erreichen? (siehe Anmerkung)
- Wie kann die Datenbank eindeutige Einschränkungen für die Daten nur für einen bestimmten Status erzwingen (für andere Status jedoch eine beliebige Anzahl von Duplikaten zulassen)?
- Warum bieten Datenbanken keine "Papierkorb" -Funktion oder Tabellenverfolgung / -wiederherstellung von Haus aus, sodass die Benutzeroberflächen die tatsächlichen Datensätze problemlos löschen können?
Hinweis: Ich habe gelesen, dass eine separate Verlaufstabelle verwaltet werden muss, was jedoch hinsichtlich des Speichers und der Notwendigkeit, Trigger zu generieren und die Trigger mit dem Schema der verfolgten Tabelle auf dem neuesten Stand zu halten, schlimmer zu sein scheint.