Du bist auf der Suche nach einer effektiven Methode, um Dein Datenmanagement zu revolutionieren und dabei auch noch Methoden für eine History und ein Audit umzusetzen? Dann solltest Du Dich unbedingt mit dem Thema Temporal Tables auseinandersetzen.
Mit diesen speziellen Einstellungen für Tabellen in Microsoft SQL-Servern hast Du die Möglichkeit, Daten auf eine völlig neue Art und Weise zu verwalten. Durch die Erstellung einer „system-period temporal table“ kannst Du nicht nur die aktuellen Daten in einer Tabelle speichern, sondern auch die Änderungen im Verlauf der Zeit nachverfolgen. So behältst Du stets den Überblick über die Entwicklung Deiner Daten und hast Zugriff auf eine umfassende History. Probiere es aus und starte jetzt mit der Erstellung Deiner ersten Temporal Table.
Was sind Temporal Tables?
Du hast sicher schon einmal von Datenbank-Tabellen gehört. Temporale (nicht zu verwechseln mit temporären) Tabellen sind eine besondere Art davon, die es ermöglichen, Daten nicht nur aktuell zu speichern, sondern auch ihre historischen Veränderungen festzuhalten.
Eine temporale Tabelle enthält dabei zusätzlich ein System-Period-Start-Datum und -End-Datum pro Zeile, das den Zeitraum angibt, für den diese Zeile gültig war. Dadurch können nicht nur die aktuellen Daten abgefragt werden, sondern auch vergangene Zustände der gespeicherten Informationen.
Hierbei gibt es zwei Arten von temporalen Tabellen: system-versioned und application-time-period. Bei system-versioned Temporal Tables wird die Historie automatisch durch das Erstellen von Versionen der Datensätze verwaltet und in einer separaten History-Tabelle gespeichert. Der Vorteil liegt darin, dass man hierfür keinen komplizierten Code schreiben muss – das System übernimmt das automatisch. Ein Beispiel dafür ist die Implementierung in Microsoft SQL Server ab 2016 mit dem Befehl „CREATE TABLE foo (….) SYSTEM VERSIONING“.
Was sind die Vorteile von Temporal Tables?
Temporal Tables bieten einige Vorteile gegenüber der manuellen Speicherung von Daten in historisierten Tabellen.
Wie funktionieren Temporal Tables auf Datenbank-Ebene in MS SQL?
Um eine Temporal Table in MS SQL Server zu erstellen, musst Du eine normale Tabelle erstellen und sie mit einer Historientabelle verknüpfen. Die Haupttabelle enthält die aktuellen Daten, während die Historientabelle die historischen Versionen der Daten speichert. Dabei werden nur die geänderten Datensätze gespeichert und nicht der komplette Zustand der Tabelle.
Wenn Du Daten in der Haupttabelle änderst, erstellt SQL Server automatisch eine historische Version der geänderten Daten in der Historientabelle. Dies erfolgt mithilfe von Zeitstempeln (ValidFrom und ValidTo), die den Gültigkeitszeitraum der Datensätze angeben. So kannst du Datenänderungen nachverfolgen.
Um historische Daten abzufragen, kannst Du die „FOR SYSTEM_TIME“-Klausel in Deinen SQL-Abfragen verwenden. Hier ist ein einfaches Beispiel:
Mit dieser Klausel kannst Du Daten zu einem bestimmten Zeitpunkt oder innerhalb eines Zeitraums in der Vergangenheit abrufen.
Mit „ALTER TABLE … SET (SYSTEM_VERSIONING = OFF)“ kannst Du die Systemversionierung für eine Temporal Table deaktivieren. Dies löscht jedoch nicht automatisch die historischen Daten in der Historientabelle. Wenn Du die Systemversionierung erneut aktivierst, kannst du die historischen Daten weiterhin verwenden.
Wie funktionieren Temporal Tables mit LINQ in EF Core 6?
Um zunächst ein Modell für die Temporal Table zu erstellen, brauchst Du ein Modell in deiner EF Core-Anwendung, das die Temporal Table repräsentiert. Dieses Modell sollte die relevanten Eigenschaften für die Haupttabelle enthalten.
Du kannst historische Daten mithilfe von LINQ-Abfragen abrufen, indem du die AsOf-Methode verwendest. Diese Methode ermöglicht es Dir, den Zeitpunkt oder den Zeitraum anzugeben, für den Du historische Daten abrufen möchtest.
Aktuelle Daten abrufen: Wenn Du die aktuellen Daten abrufen möchtest, kannst Du dies auf die gleiche Weise tun, ohne die AsOf-Methode zu verwenden.
Stelle zur Nutzung sicher, dass Du die Systemversionierung für die Temporal Table in der Datenbank aktiviert hast. Du kannst dies über SQL Server Management Studio (Database-first-Ansatz) oder über eine Migration in EF Core (Code-first-Ansatz) durchführen.
Unsere Erfahrungen
Temporal Tables kommen bei uns zunehmend häufiger zum Einsatz, da auch unsere Kunden von den Vorteilen überzeugt sind. Besonders für Kunden, für die wir Business Intelligence Anwendungen implementieren und betreuen, sind sie relevant, da Budgetplanungen und Umsatzänderungen analysiert werden müssen.
Mit der Einführung von Temporal Tables kann nun einfach ein Datensatz zum Zeitpunkt X ausgewählt und mit dem aktuellen Stand verglichen werden. Früher mussten dafür „Snapshots“ der Daten separat abgespeichert werden. Dies hatte eine höhere Speicherplatznutzung und schlechtere Performance zur Folge.
Auch im Falle eines Imports von Datensätzen in eines unserer Systeme konnten wir bereits von Temporal Tables profitieren, da bei einem fehlerhaften Import nicht immer ein Backup möglich ist. Mit historischen Queries können jedoch fälschlicherweise gelöschte Datensätze jederzeit wiederhergestellt werden, ohne Änderungen an anderen Datensätzen zu löschen.
Insgesamt ist die Anwendung von Temporal Tables in vielen unserer Projekte nicht mehr wegzudenken und hat durch ihren geringen Implementierungsaufwand und den großen Nutzen bereits Einzug in den Projektalltag genommen.
Fazit: Temporal Tables revolutionieren das Datenmanagement
Du weißt nun, was Temporal Tables sind und wie sie Dein Datenmanagement revolutionieren können. Wenn Du eine temporale Tabelle erstellst, kannst Du alle Änderungen an Deinen Daten im Laufe der Zeit verfolgen. Das bedeutet, dass Du immer die aktuelle Version Deiner Daten abrufen, aber auch auf frühere Versionen zurückgreifen kannst, um zu sehen, wie sich Deine Daten über die Zeit entwickelt haben. Mit einem System-Period oder einem System-Versioned Schema in beispielsweise MS SQL Server kannst Du alles einfach einrichten und verwalten. Eine solche Tabelle speichert dabei neben den aktuellen Row-Daten auch einen Zeitraum (start date/end date) für jede Zeile sowie automatisch generierte Historiendaten für jede Änderung an der betreffenden Zeile.
Das ermöglicht es Unternehmen und Entwickler:innen gleichermaßen, zeitliche Abfragen und Analysen flexibel zu gestalten und somit mehr Erkenntnisse aus ihren Daten zu gewinnen. Darüber hinaus bietet das System-Versioned Schema von Microsoft SQL Server ab Version 2016 eine einfache Möglichkeit zur Migration bestehender Tabellen in system-versionierte Tabellen.
Durch die Nutzung von Temporal Tables kann also das gesamte Data-Life-Cycle-Management verbessert werden – von der Datenspeicherung bis hin zur Bearbeitung und Analyse. Und seitdem .NET EF Core 6 die Integration vereinfacht hat, sind sie umso einfacher zu nutzen.
Also worauf wartest du noch? Starte jetzt damit, Dein Datenmanagement mit Temporal Tables zu revolutionieren!
Seit fast 9 Jahren schätzen wir Bea als Teil unseres BAYOOTEC Teams. Ihre Reise begann vor 2,5 Jahren als Softwareentwicklerin, mittlerweile unterstützt sie uns mit ihrer Expertise als Senior Softwarearchitektin.
Bea ist nicht nur beruflich erfolgreich, sondern auch eine leidenschaftliche Tierliebhaberin mit einem quirligen Shiba Inu und zwei Schlangen zu Hause. Ihre Freizeit widmet sie zudem Brettspielen, Dungeons & Dragons sowie verschiedenen Online-Spielen. Ihre künstlerische Ader zeigt sich im Chorsingen und im Schneidern von Kostümen. Ihre Vielseitigkeit manifestiert sich auch in ihrem Ruf, stets kreative Lösungen für Probleme zu finden.
In beruflichen Projekten liegt Beas Verantwortungsbereich im .NET Bereich, wobei ihr besonderes Interesse den SQL-Datenbanken gilt. Mit ihrer Fachkompetenz und ihrer Fähigkeit, Herausforderungen kreativ zu bewältigen, prägt Bea die Erfolgsgeschichte von BAYOOTEC maßgeblich.