Frage

Können Sie Ihre Meinung, wie Sie Daten Versionierung in PostgreSQL implementieren würde. (Ich habe in Bezug auf ähnliche Fragen gestellt Cassandra und MongoDB . Wenn Sie irgendwelche Gedanken haben, die db ist besser für diese bitte Aktie)

Nehmen wir an, dass ich in einem einfachen Adressbuch Version Aufzeichnungen müssen. Adressbuch-Datensätze werden in einer Tabelle ohne Beziehungen zur Vereinfachung gespeichert. Ich erwarte, dass die Geschichte:

  • wird selten verwendet werden
  • werden alle an verwendet werden, wenn es in einer „Zeitmaschine“ Art und Weise zu präsentieren
  • wird es mehr Versionen nicht als einige hundert zu einem einzigen Datensatz.
  • wird die Geschichte nicht ab.

Ich betrachte die folgenden Ansätze:

  • Erstellen Sie eine neue Objekttabelle zum Speichern von Geschichte von Datensätzen mit einer Kopie des Schemas von Adressbuchs Tabelle und fügen Sie Zeitstempel und Fremdschlüssel zu Adressbuchtabelle.

  • Erstellen Sie eine Art Schema weniger Tabelle zum Speichern von Änderungen Adressbuch Aufzeichnungen. Eine solche Tabelle würde bestehen aus: AddressBookId, Timestamp, Feldname, Wert. So kann ich speichern würde nur Änderungen an den Datensätzen und ich würde nicht Geschichte Tabelle zu halten und Adressbuchtabelle synchron.

  • Erstellen Sie eine Tabelle zum Speichern von seralized (JSON) Adressbuch Aufzeichnungen oder Änderungen Adressbuch Aufzeichnungen. Eine solche Tabelle würde sieht wie folgt aus: AddressBookId, Timestamp, Object (varchar). Wieder ist dieses Schema weniger so würde ich nicht mit Adressbuchtabelle synchron die Geschichte Tabelle halten müssen. ( Dies wird nach einem einfachen Dokument Versioning mit CouchDB modelliert )

War es hilfreich?

Lösung

Ich mache so etwas wie Ihr zweiten Ansatz: haben Sie die Tabelle mit dem tatsächlichen Arbeitssatz und eine Geschichte mit Änderungen (Zeitstempel, record_id, property_id, property_value). Dazu gehört auch die Erstellung von Datensätzen. Eine dritte Tabelle beschreibt die Eigenschaften (id, property_name, property_type), die in der Datenkonvertierung hilft höher in der Anwendung auf. So können Sie auch sehr leicht verändert einzelner Objekte aufspüren können.

Statt einem Zeitstempel Sie könnte auch ein int-like hat, Weicht Sie pro record_id für jede Änderung erhöht, so dass Sie eine tatsächliche Version .

Andere Tipps

Sie könnten start_date und end_date haben.

Wenn end_date ist NULL, es `s die tatsächliche Aufzeichnung.

Ich bin Versionierung Glossar Daten und mein Ansatz war ziemlich erfolgreich für meine Bedürfnisse. Grundsätzlich für Datensätze, die Sie brauchen Versionierung, teilen Sie die Fieldset in persistenten Felder und versionsabhängige Felder, also zwei Tabellen zu erstellen. Ein Teil des ersten Satzes auch der eindeutige Schlüssel für die erste Tabelle sein sollte.

Adresse
id [pk]
fullname [uk]
Geburtstag [uk]
Version
id [pk]
address_id [uk]
Zeitstempel [uk]
Adresse

Auf diese Weise können Sie eine Adresse Themen von Fullname und Geburtstag bestimmt erhalten und eine versioniert Datensätze mit Adressen (sollte durch Versionierung nicht ändern). id durch Fremdschlüssel: address_id sollte Adresse bezogen werden. Mit jedem Eintrag in Version Tabelle finden Sie eine neue Version für Thema Adresse erhalten. Id = address_id mit einem bestimmten Zeitstempel, in welcher Weise Sie eine Geschichte Referenz hat

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