Ich arbeite an einem Webprojekt, das vom Benutzer bearbeitbare Inhalte umfasst, und ich möchte in der Lage sein, eine Versionsverfolgung der tatsächlichen Inhalte durchzuführen, die in einer Datenbank gespeichert sind. Grundsätzlich möchte ich Änderungsverläufe im Wiki-Stil implementieren.
Ich mache einige Hintergrundrecherchen und sehe eine Menge Dokumentation darüber, wie man das Datenbankschema versioniert (meines ist bereits kontrolliert), aber alle vorhandenen Strategien, wie man die Änderungen des Datenbankinhalts verfolgt , gehen zumindest in der Lawine der Schemaversionierung verloren in meinen Suchen.
Ich kann mir ein paar Möglichkeiten vorstellen, mein eigenes Change Tracking zu implementieren, aber sie scheinen alle ziemlich grob zu sein:
- Speichern Sie die gesamte Zeile bei jeder Änderung, und verknüpfen Sie die Zeile mit einem Primärschlüssel mit der Quell-ID (was ich derzeit anstrebe, ist die einfachste). Viele kleine Änderungen können jedoch zu viel Blähungen führen.
- Speichern Sie vor / nach / Benutzer / Zeitstempel für jede Änderung mit einem Spaltennamen, um die Änderung wieder auf die entsprechende Spalte zu beziehen.
- Speichern Sie vor / nach / Benutzer / Zeitstempel mit einer Tabelle für jede Spalte (dies würde zu vielen Tabellen führen).
- Speichern Sie Diffs / Benutzer / Zeitstempel für jede Änderung mit einer Spalte (dies würde bedeuten, dass Sie den gesamten Änderungsverlauf durchgehen müssten, um zu einem bestimmten Datum zurückzukehren).
Was ist hier der beste Ansatz? Meinen eigenen zu rollen scheint, als würde ich wahrscheinlich die (bessere) Codebasis eines anderen neu erfinden.
Bonuspunkte für PostgreSQL.