4 Stimmen

SQL Server-Papierkorb

Ich baue eine Content-Management-Website auf, die auch andere Funktionen enthalten soll. Wenn ein Admin-Mitglied ein Element über das Admin-Panel löscht, möchte ich, dass dieses Element für 30 Tage in einen "Papierkorb" verschoben (und dann automatisch gelöscht) wird.

Wie lässt sich diese Funktion am besten implementieren?

Eine Idee, die ich hatte, war, eine Bit-Spalte "Gelöscht" in meiner Tabelle zu haben und dann nur Datensätze anzuzeigen WHERE Hide=0 . Dies würde jedoch bedeuten, dass ich mich jedes Mal daran erinnern müsste, diese Bedingung zu setzen, wenn ich SELECT vom Tisch.

Eine andere Idee, die ich hatte, war, eine zweite Tabelle zu haben, in die die Datensätze beim Löschen verschoben würden. Da ich jedoch viele Tabellen auf meiner Website verwende, würde dies bedeuten, dass ich die Anzahl der Tabellen verdoppeln müsste und doppelte Tabellenstrukturen hätte (was in Zukunft zu Konsistenzproblemen führen könnte).

Im Idealfall würde ich gerne eine Tabelle "RecycleBin" haben, in die alle Datensätze verschoben werden, aber diese könnte 100 Spalten enthalten, um Daten aus allen verschiedenen Tabellen speichern zu können.

Wenn jemand eine andere Idee hat, wäre er sehr dankbar.

Danke.

7voto

Jan Fabry Punkte 6892

Die meisten mir bekannten Implementierungen verwenden eine deleted Spalte (kein Boolescher Wert, sondern ein Zeitstempel, so dass Sie feststellen können, wann sie gelöscht wurde). Ja, Sie müssen dies zu allen Ihren Abfragen hinzufügen, aber vielleicht verwenden Sie eine ORM-Schicht, so dass Sie es nur einmal hinzufügen müssen? Ich würde diesen Weg vorschlagen.

Wikipedia verwendet mehrere Tabellen für die aktuelle und die archivierte Version ihrer Artikel, aber das liegt daran, dass sie nicht so groß sind und die aktuelle Version viel häufiger angefordert wird als die älteren Versionen.

Wenn Sie eine verwenden möchten RecycleBin Tabelle, sollten Sie in Erwägung ziehen, die Zeilen zu serialisieren und sie in eine value Spalte, anstatt alle einzelnen Spalten zu speichern. Dies funktioniert natürlich nur, wenn Sie den Inhalt einzelner Spalten gelöschter Elemente nicht abfragen müssen, da dies sehr kostspielig ist.

0voto

Cade Roux Punkte 85601

Die Verwendung einer IsDeleted-Spalte ist eine gute Technik.

Sie können dies mit einem "Löschen statt Trigger" kombinieren, der das Kennzeichen anstelle eines regulären Löschvorgangs verwendet. Sie können die Tabelle auch mit Ansichten umhüllen, so dass nur nicht gelöschte Zeilen in der Ansicht sichtbar sind.

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