4 Stimmen

Bewährte Praxis für die Aktivierung des "Rückgängigmachens" für Datenbankentitäten?

Dies ist für eine CRM-Anwendung mit PHP/MySQL. Verschiedene Entitäten wie Kunden, Kontakte, Notizen usw. können vom Benutzer "gelöscht" werden. Anstatt die Entität tatsächlich aus der Datenbank zu löschen, möchte ich nur, dass sie für die Anwendung gelöscht erscheint, aber in der DB aufbewahrt wird und bei Bedarf zu einem späteren Zeitpunkt "wiederhergestellt" werden kann. Vielleicht sogar fügen Sie eine Art von "Papierkorb", um die app.

Ich habe mir mehrere Möglichkeiten überlegt, dies zu tun:

  1. Verschieben Sie die gelöschte Entität in eine andere Tabelle. (Kunde nach Kunde_gelöscht)

  2. Ändern Sie ein Attribut der Entität. (aktiviert auf false)

Ich bin sicher, es gibt andere Möglichkeiten und die jeweils ihre eigenen Auswirkungen auf DB-Größe, Leistung, etc. haben, ich frage mich nur, was ist die allgemein empfohlene Art und Weise, so etwas wie dies zu tun?

1voto

Thomas Berger Punkte 1830

Ich würde eine Kombination aus beidem wählen:

  1. Eine Flagge setzen deleted zu wahr
  2. Verwenden Sie einen Cronjob, um die Einträge nach einer gewissen Zeit in eine Tabelle des Typs ARCHIVE
  3. Wenn Sie den Eintrag wiederherstellen müssen, select into die Artikeltabelle und löschen aus Archiv

Warum sollte ich diesen Weg gehen?

  • Wenn ein Kunde die falsche Datei gelöscht hat, kann die Wiederherstellung sofort erfolgen.
  • Nach ein paar Wochen/Monaten kann die Artikeltabelle zu sehr anwachsen, daher würde ich alle Einträge, die gelöscht werden, für 1 Woche pro Jahr archivieren.

0voto

Brad Punkte 5288

Eine gängige Praxis ist die Festlegung einer deleted_at auf das Datum, an dem die Entität vom Benutzer gelöscht wurde (Standardwert: null). Sie können auch eine deleted_by Spalte zur Kennzeichnung des Löschenden. Die Verwendung einer Löschspalte macht die Arbeit mit FK-Beziehungen einfacher, da diese nicht abbrechen werden. Wenn Sie die Zeile in eine neue Tabelle verschieben, müssten Sie die FK aktualisieren (und dann erneut aktualisieren, wenn Sie die Löschung rückgängig machen). Der Nachteil ist, dass Sie sicherstellen müssen, dass alle Ihre Abfragen gelöschte Zeilen ausschließen (was kein Problem wäre, wenn Sie die Zeile in eine neue Tabelle verschieben würden). Viele ORMs machen diese Filterung einfacher, es hängt also davon ab, was Sie verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X