Frage

Ich baue eine Content-Management-Website, die auch andere Funktionen enthalten werden. Wenn ein Admin-Mitglied einen Artikel über den Admin-Panel löscht, würde ich diesen Artikel gerne zu einem ‚Papierkorb‘ verschoben wird für 30 Tage (dann automatisch gelöscht).

Was ist der beste Weg, um diese Funktion zu implementieren?

Eine Idee, die ich hatte, war ein ‚Gelöscht‘ Bit-Spalte in meinem Tisch zu haben, dann nur Datensätze WHERE Hide=0 zeigen. Dies würde jedoch bedeuten, diese Bedingung zu erinnern, die aus der Tabelle anstelle jedes Mal wenn ich SELECT zu setzen.

Eine andere Idee, die ich hatte, war eine zweite Tabelle zu haben, wo die Datensätze zu bewegt werden würde, wenn gelöscht. Allerdings habe ich viele Tabellen in meiner Website verwendet werden, so dass dies bedeuten würde die Menge der Tabellen verdoppelt, und mit doppelten Tabellenstrukturen (die Konsistenzprobleme in der Zukunft führen könnte).

Im Idealfall würde Ich mag einen Tisch ‚RecycleBin‘ haben, die alle Datensätze zu bewegt werden, aber dies könnte 100s von Spalten in der Lage sein, Daten zu speichern aus den verschiedenen Tabellen enthält.

Wenn jemand noch andere Ideen hat, würde es am meisten geschätzt werden.

Danke.

War es hilfreich?

Lösung

Die meisten Implementierungen weiß, dass ich eine deleted Spalte verwenden (kein boolean, aber einen Zeitstempel, so dass man sagen kann, wenn es gelöscht wurde). Ja, müssen Sie dies für alle Ihre Fragen hinzuzufügen, aber vielleicht eine ORM Ebene, die Sie verwenden, so dass Sie nur einmal hinzufügen müssen? Ich würde vorschlagen, diesen Weg gehen.

Wikipedia verwendet mehrere Tabellen für die aktuelle und die archivierten Versionen ihrer Artikel, aber das ist, weil sie sind out-of-Liga riesig, und die aktuellen Versionen sind viel häufiger angefordert als die älteren Versionen.

Wenn Sie eine RecycleBin Tabelle verwenden möchten, könnten Sie die Zeilen zu prüfen, Serialisierung und sie in einer value Spalte setzen, anstatt alle einzelnen Spalten zu speichern. Natürlich funktioniert dies nur, wenn Sie über den Inhalt der einzelnen Spalten der gelöschten Elemente zu Abfrage nicht brauchen, denn das ist sehr teuer sein wird.

Andere Tipps

eine IsDeleted Spalte ist eine gute Technik.

Sie können dies kombinieren mit einem Lösch statt Trigger, der die Flagge anstelle eines normalen Löschvorgang verwendet wird. Sie können auch die Tabelle mit Blick wickeln, so dass nur Nicht-Lösch Zeilen in der Ansicht ausgesetzt sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top