Gibt es eine Bibliothek / Rahmen für die Undo / Redo Änderungen der Zeilen in der Datenbank?

stimmen
2

Kann mein Titel sein, ist nicht klar. Ich suche eine Art Versionskontrolle auf Datenbanktabellen, wie Subversion auf Dateien der Fall ist, wie Wiki tut.

Ich möchte die Änderungen verfolgen protokollieren. Ich möchte extrahieren und das diff rückwärts zu laufen. (Undo wie ein merge Svn -R 101: 100). Ich kann eine indizierte Suche über die Geschichte braucht.

Ich habe das „lese Design - Muster für Undo - Engine “, aber es ist verwandt mit „Patterns“. Gibt es etwas , das ich wieder verwenden könnte , ohne das Rad neu erfinden?

EDIT: Zum Beispiel, Bankkontotransaktionen. Ich habe Spalte „Saldo“ (und andere) in der Tabelle aktualisiert. ein Benutzer einen Fehler von ihm 10 Tage später finden, und er wird die spezifische Transaktion, ohne Änderung anderer abbrechen / Rollback möchten.

Wie kann ich es anmutig in der Anwendungsebene?

Veröffentlicht am 09/12/2008 um 15:08
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
1

Pedantisch Punkt. Ihr Bankkonto Beispiel würde sich nicht über einen Wirtschaftsprüfer / Regler.

Etwaige fehlerhafte Einträge in einem Konto sollte für die Aufzeichnung dort belassen werden. Eine gleiche und entgegengesetzte Korrektur Transaktion würde auf das Konto angewandt werden. In der Tat rollt die ursprüngliche Transaktion zurück, aber eine sehr offensichtliche Spur des ursprünglichen Fehlers und deren Korrektur zu verlassen.

Beantwortet am 09/12/2008 um 16:05
quelle vom benutzer

stimmen
2

Martin Fowler deckt das Thema in Patterns für Dinge , die mit der Zeit ändern . Noch Muster und kein tatsächlicher Rahmen , sondern er zeigt Beispieldaten und wie es zu benutzen.

Beantwortet am 09/12/2008 um 16:19
quelle vom benutzer

stimmen
2

Sie könnten eine Revision Ansatz für jeden Datensatz verwenden, die Sie verfolgen möchten. Dies würde bedeuten, für jede Änderung eines Datensatzes eine Zeile in der Tabelle zu halten. Die Aufzeichnungen würden durch eine gemeinsame ‚ID‘ zusammengebunden werden und könnte auf der ‚Revisionsstatus‘ abgefragt werden (zB Holen Sie sich das neueste „Approved“ record).

In Ihrem Anwendungsebene können Sie diese Datensätze einzeln und rollen zurück in einen früheren Zustand behandeln, wenn nötig, solange Sie alle notwendigen Informationen aufzuzeichnen.

[ID] [Revision Date] [Revision Status] [Modified By] [Balance]
1     1-1-2008         Expired           User1         $100
1     1-2-2008         Expired           User2         $200
2     1-2-2008         Approved          User3         $300
1     1-3-2008         Approved          User1         $250
Beantwortet am 09/12/2008 um 16:40
quelle vom benutzer

stimmen
0

Basierend auf Ihrem Kommentar zu James Anderson, würde ich die Benutzeroberfläche hat einen neuen Einsatz schreiben, wenn eine Transaktion abgebrochen wird. Es würde einen neuen Datensatz in die Tabelle einfügen, die die gleichen Werte hatten als die annullierte Transaktion mit Ausnahme der Wert eine negative Zahl, anstatt eine positive Zahl sein würde. Wenn Sie eine Struktur haben, die etwas zu definieren, um den Zweck der Transaktion enthält, würde ich es abgebrochen machen sagen und die Datensatznummer der Transaktion wurde abgebrochen wird.

Beantwortet am 09/12/2008 um 17:05
quelle vom benutzer

stimmen
0

Ich würde gehen mit einem bi-temporalen Datenbank-Design, die Sie alle Daten erforderlich würde auszuführen und Rollbacks, ob das bedeutet mehr Einfügen von Zeilen oder einfach die späteren Änderungen zu löschen.

Es gibt eine ganze Menge Raffinesse zu einer solchen Datenbank-Design, aber es gibt sehr gutes Buch zu diesem Thema:

Entwicklungszeitorientierte Datenbankanwendungen in SQL von Richard T. Snodgrass

zum Download hier:

http://www.cs.arizona.edu/people/rts/tdbbook.pdf

eine Datenbanktransaktion wäre eine schlechte Idee, weil die Sperren in der Datenbank erstellen würde - im Grunde Datenbank-Transaktionen so kurz wie möglich sein sollten.

Alles, was in der Anwendungsschicht, es sei denn, es einige Persistenzmechanismus selbst hat, wird nicht Anwendung neu gestartet wird überleben (obwohl das vielleicht nicht Voraussetzung sein).

Beantwortet am 09/12/2008 um 18:02
quelle vom benutzer

stimmen
0

Basierend auf den verschiedenen Kommentaren wäre eine mögliche Lösung für Ihr Problem sein, einen „Tag wirksam“ Tisch zu machen.

Basicly Sie zu jedem Tisch Gültig-ab-Datum und Gültig-to-date Spalten hinzufügen.

Der „aktuelle“ Datensatz sollte immer eine valid_to_date von „2999.12.31“ oder einem arbiteraly hohen Wert. Wenn ein Wert ändert Sie „Gültig-to-date“ ändern, um eine neue Zeile mit einem Gültig-ab-Datum des heutigen Tages und einem gültigen-to-date „2999.12.31“ auf das aktuelle Datum und legen Sie kopieren alle Spalten aus der alten Zeile, wenn sie nicht geändert werden.

Sie können Ansichten erstellen mit "wählen Sie alle-Spalten-außer-valid-xx-Datum aus der Tabelle, wo gültig-to-date = '2999.12.31'"

Welche alle aktuellen Anfragen können unverändert arbeiten.

Dies ist eine sehr häufige tecnique in Data-Warehouse-Umgebungen und für etwas wie Wechselkurse, wo der Zeitpunkt ihres Inkrafttretens wichtig ist.

Die Undo-Logik sollte klar sein.

Beantwortet am 10/12/2008 um 11:07
quelle vom benutzer

stimmen
0

Ich bin mir nicht bewusst einem bestimmten Muster, obwohl ich voll Undo / audit Historien eingerichtet haben, bevor Trigger und rowversions verwenden.

Es gibt ein paar Anwendungen für MS SQL, die Sie durch die Protokolle schleppen lassen und die tatsächlichen Änderungen sehen.

Ich habe einen zurück mit MS SQL 2000 genannt Log Navigator verwendet, die mich benutzt, lassen eine bestimmte historische Transaktion rückgängig zu machen - ich es nicht jetzt aber finden.

http://www.lumigent.com und http://www.apexsql.com tun Werkzeuge für die Protokolle sehen, aber ich glaube nicht , dass können Sie sie wieder rollen.

Ich denke, der beste Weg, dies zu tun, ist Ihre Anwendung in diesem Sinne schreiben - die Ihnen ein paar gute Vorschläge haben hier bereits auf, wie zu tun.

Beantwortet am 10/12/2008 um 11:20
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more