Temporale Datenhaltung in der Praxis mit Java

Fazit

Im Prinzip werden aus einem neuen Adressendatensatz zwei zusätzliche bitemporale Datensätze erstellt und der bitemporale Ursprungsdatensatz gleichzeitig verändert ("Aus Einem mach' Drei"-Prinzip). Dieser Prozess ist für jedes angelegte Adressenobjekt zu wiederholen.

Datenbankinhalt BITEMP_ADDRESS nach Ausführung des Tests (Abb. 8)


Ein wichtiges Thema ist die (bi)temporale Objektintegrität. Wie bereits in Stufe 1 erwähnt, muss sich das Framework in dem Fall ebenfalls darum kümmern, dass zu einem Zeitpunkt stets ein eindeutiges Objekt (in dem Fall Adresse) existiert. Ausführliche Informationen zur temporalen Integrität lassen sich an anderer Stelle nachlesen.

Fazit

Das Konzept der Temporalität gehört zum festen Bestandteil jeder Geschäftsanwendung. Daten sind dort oft zu historisieren, um die Nachvollziehbarkeit eines Geschäftsobjektes zu ermöglichen. Je nach Situation müssen Architekt oder Entwickler eine Stufe von 0 (keine Temporalität) bis 3 (Bitemporalität) festlegen. Die Wahl ist sehr wichtig, denn eine falsche Entscheidung kann zu einer aufwändigen Implementierung und gleichzeitig zu einer schlechten Systemperformanz im Betrieb führen. Schließlich muss die darunterliegende Datenbank alle zusätzlichen Daten, die durch die Temporalität entstanden sind, verwalten.

Aus Erfahrungen des Autors reicht Stufe 1 oder 2 für viele Anwendungsfälle aus. Die Entscheidung für den Einsatz der Stufe 3 (Bitemporalität) für ausgewählte Geschäftsobjekte muss stets durchdacht und gut mit der Fachseite diskutiert sein. Falls Stufe 1, 2 oder 3 notwendig ist, lässt sich auf Open-Source-Frameworks wie DAOFusion, Hibernate Envers und Spring Data JPA zurückgreifen. Eigene Implementierungen und ein entsprechender API-Entwurf sind meistens nicht sinnvoll und verursachen später mehr Kosten bei der Wartung der Anwendungen.

Dr. Lofi Dewanto
arbeitet als Softwarearchitekt und -entwickler bei der Deutschen Post Renten Service. Er engagiert sich besonders für "javanische" Open-Source-Software sowie modellgetriebene Softwareentwicklung mit UML.