Frage

Ich erstelle eine Revisionskontrolle für Daten in unserer Datenbank. Es wird die Möglichkeit haben, Revisionen, Rollback und Rollback -Rollbacks zu speichern. Die Datenbanktabellen, die ich verwende, die überarbeitet werden muss, finden Sie unten:

Objekte
Objekt_Chwers
Object_attributes

Objekte sind das Hauptobjekt, die Stücke sind zusammengefasst, und Attribute sind Attribute von Daten in einem Stück. Die Attribute speichert die Objekt -ID zusammen mit der Chunk -ID auf diese Weise, so einfach alle Attribute für ein Objekt auszuwählen, ohne dass ein weiterer Verbinden mit der Stücken Tabelle angeschlossen werden muss.

Das einzige, was sich jemals wirklich ändern wird, sind Attribute, aber wenn sich ein Attribut ändert, werden die betroffenen Stücke aktualisiert, und wenn ein Stück aktualisiert wird, wird das Objekt auch aktualisiert. Jetzt habe ich an zwei verschiedene Möglichkeiten nachgedacht, dieses Problem zu lösen.

  1. Erstellen Sie drei neue Tabellen mit einem Suffix von _rev. Diese Tabellen würden einfach ältere Versionen der Objekte speichern. Die wirklichen Objekte würden auch eine Drehzahlnummer speichern. Nehmen wir also an, ich habe drei verschiedene Attribute geändert, diese Attribute wurden über drei Teile übernommen, also drei neue Zeilen in Stücken, drei in Attributen und eine in Objekt für Revisionen. Da dies die erste Änderung ist, wäre die Rev -ID 1, in den realen Tabellen, ihr Drehzahl würde 2 sein.
  2. Ich würde das oben genannte einfach tun, aber anstatt einen separaten Tisch zu haben, speichern ich es einfach im selben Tisch.

Eine Sache zu beachten, es wird immer Überarbeitungen geben, die Anzahl der Stücke kann von 1 bis 100+ variieren. Obwohl der Durchschnitt bei 1-15 liegt. Die Attribute können von 0 bis 100+ variieren. Der Durchschnitt beträgt wahrscheinlich um 30. Jedes Attribut wird sich ändern. Diese Objekte werden durch eine „Phase“ gestellt, in der alle Attribute von Benutzern ausgefüllt werden müssen. Sobald sie gefüllt sind, ist das Objekt archiviert und nie wieder modifiziert. Alle Objekte haben eine entsprechende Datei. So speichert das Objekt auch den aktuellen Hash (SHA256) der Datei. Dieser Hash wird für Deduplizierungszwecke verwendet.

War es hilfreich?

Lösung

Das Hinzufügen einer Revisions -ID zum Primärschlüssel der Objekttabelle ist definitiv der richtige Weg. Sie können mehrere aktive Überarbeitungen durchführen und müssen keine Daten zwischen Tabellen verschieben. Wenn Sie mit mehreren Tabellen gehen, werden Sie es schwierig finden, Rollback-Algorithmen zu schreiben, die Daten bewegten, während die Integritätsbeschränkungen beibehalten werden-insbesondere schwierig, wenn das System in aktiver Entwicklung steht.

Wenn Überarbeitungen in der menschlichen Zeit erstellt werden, kann eine einfache Zeitstempel als Revisions -ID funktionieren. Ansonsten verwenden Sie einfach eine Ganzzahl als Revisionsnummer-ich habe gepunktete Revisionsnummern im CVS-Stil implementiert und wünschte, ich hätte es nicht. Sie können die Ableitungshistorie in einer separaten Tabelle verfolgen, wenn Personen später nach der Funktion fragen.

Andere Tipps

Wie wäre es mit

objects object_chunks revision object_attributes

Wenn die Revision eine zunehmende Zahl ist, können Sie einfach die Objekte mit maximaler (Revision) Gruppierung nach Objekt, Object_Chunks, in der Zukunft auswählen.

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