Ich suche nach einem geeigneten Prozess, um Revisionen oder Snapshots von Zeilen (und deren Beziehungen) in einer Datenbank zu behalten.
Nehmen Sie zum Beispiel eine eCommerce-Plattform -
Ich habe mir ein paar Konzepte angeschaut, von denen eines die Duplikat-Tabellen ist, das andere die temporalen Datenbanken und das andere eine Revisions-ID und ein aktives Flag.
Obwohl ich weiß, dass mir niemand die beste / geeignetste Lösung für meine Anwendung nennen kann, da es eine Frage der Meinung usw. ist, hatte ich gehofft, dass jemand möglicherweise die Vorteile / Nachteile im Vergleich demonstrieren könnte. Ich habe viele Fragen zu SO gelesen und ein paar Artikel zu den verschiedenen Implementierungen, aber keiner vergleicht wirklich jede Idee oder gibt an, wo sie am besten geeignet sind. Im Folgenden habe ich mein Verständnis für jedes der Konzepte dargelegt.
Speichern Sie die Informationen in Zeilen, die für die Daten relevant sind, mit denen sie einen Snapshot erstellen müssen. I.e. Behalten Sie eine Adresse in Spalten in der Bestellungstabelle eines Online-Shops.
Datenbankzeilen, die "zeitbewusst" sind, d. h. ihr Kontext ist die Zeit zwischen zwei Datumsangaben. Daten können verknüpft werden, wenn der Zeitkontext zwischen dem der temporalen Tabelle liegt.
Halten Sie eine Tabelle bereit, die Änderungen an allen Tabellen verfolgt und notiert, zu welcher Zeile sie gehört und wann sie gültig ist.
Ich habe mir bereits die folgenden Fragen zu SO und diesen anderen Ressourcen angesehen
Bearbeiten: Der Grund, warum ich diesen Beitrag nicht mit einem bestimmten DBMS markiert habe, da ich möchte, dass das Konzept mit so vielen wie möglich als Plattform funktioniert, ist zur Zeit DBMS-unabhängig und die Abstraktionsschicht erlaubt es zu arbeiten mit MySQL und MSSQL, aber wird hoffentlich andere in der Zukunft unterstützen.
Am Ende habe ich eine temporäre Datenbank verwendet, und die Implementierung führte zu dem Temporal Model in FuelPHP .
Ich kann meine Modelle jetzt so konfigurieren, dass Zeilen als zeitsensitive Entität behandelt werden. Änderungen bewirken, dass eine neue Zeile erstellt und die Endzeit der ursprünglichen Zeile entsprechend festgelegt wird.
Dadurch kann ich eine Zeile zu einem bestimmten Zeitpunkt abrufen.
Es gibt eine andere Option (zumindest auf Oracle), wo Sie einfach den Zeitpunkt festlegen und beliebige Abfragen ausführen können.
Ich glaube, es funktioniert mit großen Mengen von Flash-Recovery-Speicherplatz, aber wenn Sie nur ein paar Tabellen verfolgen möchten, könnte dies zu viel Aufwand sein.
Tags und Links database temporal-database