# Datenhistorisierung



## Hamburger (2. Mai 2008)

Hallo liebe Leute,

da es sich um einen Grenzbereich handelt aber mich die IMplementierung genau wie wie das Datenbankdesign interessiert, schreibe ich einfach mal hier.

Wir entwickeln eine WebApp auf Basis Spring 2.5.x, Webflow, JSF und Hibernate. Als DBMS steht eine Postgres 8.3.X zur Verfügung.

Die Anwendung wird von vielen Usern benutzt. Im Durchschnitt werden ca. 500 User während der regulären Geschäftszeiten damit arbeiten (Intranet).

Für uns ist nun wichtig, dass alle Daten, sobald sie geändert wurden, historisiert werden, um etwaige Änderungen fix erkennen zu können. Noch bessere wäre es, wenn man einen Rollback machen könnte 

Gibt es da evtl Standardlösungen? Frameworks?
Schön wäre es natürlich, wenn die Historisierung per Aspekt an einer zentralen Stelle erfolgen könnte.

Also, ich bin auf Vorschläge gespannt... 

Schöne Grüße aus Hamburg,

Hamburger


----------



## ms (16. Mai 2008)

Wie tief soll denn die Historisierung gehen bzw. um welche Art von Historisierung geht es?
Soll wirklich jede Änderung als Historie erfasst werden oder sollen damit fachliche Anforderungen erfüllt werden wie zB. die Gültigkeit von Preisen in einem bestimmten Zeitraum?

ms


----------



## KSG9|sebastian (3. Jun 2008)

Was genau versucht ihr? Temporale oder Bitemporale Datenhaltung?

Ein richtiges Framework gibt es nicht, aber tausende von Dokumenten. Ervacon hat sowas wie ne Referenzimplementierung.

https://svn.ervacon.com/public/projects/bitemporal/

Und INfos gibts massig:

http://de.wikipedia.org/wiki/Temporale_Datenhaltung
http://www.cs.arizona.edu/people/rts/tdbbook.pdf
http://martinfowler.com/ap2/timeNarrative.html

Bin momentan auch dran ein Framework für Bitemp. Datenhaltung zu entwerfen, grade mit Aspekten wie abkoppeln der Logik, zentrale Steuerung der Gültigkeits- und Transaktionszeiten u.s.w.


----------



## happy_robot (27. Aug 2008)

- verpasse allen entitäten ein weiteres feld welches dem typ des primary key entspricht.
- beim anlegen einer neuen entität schreibst dur hier einen eindeutigen wert rein der für ALLE änderungen dieser entität beibehalten wird.
- bei veränderungen clonest du die entität und schreibst eine weiteren neuen satz mit den veränderten daten in die DB


so kannst du geordnet nach primary key alle veränderungen tracken. das aktuelle ist immer das mit dem höchsten primary-key


----------



## SnooP (2. Sep 2008)

Ich würde ehrlich gesagt die Historisierung nicht via Java sondern von der DB realisieren lassen... d.h. Trigger auf jede Tabelle und bei jedem Einfügen eines Datensatzes (nach erfolgreichem einfügen wohlgemerkt) wird in eine historische Tabelle geschrieben...

so wird das in vielen mir bekannten Projekten gemacht...


----------



## Gast (14. Okt 2008)

Es gibt einen Zusatz zu Hibernate namens Envers oder so.


----------

