2009-07-20 6 views
1

Meine zweite Überlegung war einfach eine Kopie der Tabellendaten macht mit dem aktiven Dokument oder einen Ordner von Dokumenten verbunden ist, die die Grundlinie angelegt wurde, und Speichern Sie das für die sichere Aufbewahrung. Die Codekomplexitätseinsparungen wären enorm, das Schema würde einfacher gehalten, obwohl es einige Auswirkungen in Bezug auf die Speichernutzung gibt (obwohl ich nicht glaube, dass es so groß sein wird).Intelligente Wege versions Tabellen in einer relationalen Datenbank zu pflegen (Programmierung Überlegungen?)

Antwort

3

Dies ist etwas, mit dem ich auch konfrontiert bin an einem aktuellen Projekt. Einige gute Antworten here.

ich persönlich mit der Option # 1, eine Version Spalte zum pTaste jeder „versioniert“ Tabelle hinzufügen. FKeys verwenden auch die Versionsspalte. Mein Hauptaugenmerk lag auf der Leichtigkeit der Abfrage, mit der Folge hoher Speicheranforderungen. Ich habe den Spielraum, die Anzahl der Versionen, die herumgehalten werden, streng zu begrenzen, was dieses Problem mildert.

1

Ich glaube wirklich, Sie suchen nach einem temporal database. Unsere eigene Implementierung hinzugefügt ein Paar von Audit-Log-IDs zu einer Tabelle, der „create-ID“ und „löscht ID“ (und jede Transaktion, die die Datenbank geändert wurde in einem „Audit-Protokoll“ und angesichts eine einzigartige sequentielle Kennung zusammengefasst). Für jede Transaktion, die der Tabelle einen Datensatz hinzugefügt hat, wurde die Kennung des Überwachungsprotokolls als Erstellungs-ID verwendet und die Lösch-ID war Null. Wenn sich ein Datensatz änderte, hatte die neue Version die neue Erstellungs-ID und dieselbe Kennung wurde als Lösch-ID für die alte Version verwendet.

Es war ganz einfach, einen Blick auf eine Tabelle, in der die Lösch ID Null war zu erstellen, eine virtuelle Tabelle nur aktueller Daten zu schaffen. Sie können auch den Inhalt der Tabellen vor oder direkt nach der Verarbeitung einer bestimmten Transaktion finden, eine Liste der Transaktionen abrufen, die eine bestimmte Zeile einer Tabelle usw. geändert haben.

Es gibt Zeit, Platz und Komplexität Nachteile für all das. Aber für uns, mit großen Geldsummen umzugehen, hat sich das gelohnt.