Det finns ett antal olika approacher för att historisera data i en RDBMS. Alla sätt har förstås för och nackdelar. Historisering av icke-realtidsdata brukar benämnas som Slowly changing dimension, och approacherna brukar refereras till som nivåer, ungefär som nivåer för databasnormalisering.
Här kan man se att enova har implementerat varianter av både nivå 2 och 4.
Nivå 1 är att inte historisera data alls.
Nivå 2 är att markera historiserade rader inom en tabell som inaktuella när de blir raderade.
Nivå 3 är att historisera data mha kolumner på samma rad.
Nivå 4 är att flytta raden till en historiktabell, här har Enova varit ambitiös och flyttar även raden till en helt annan databas.
För att smidigt kunna använda nivå 4 i ett icke-trivialt system krävs i princip att man utvecklar verktyg för att skapa upp historiktabellerna automatiskt. Vanligtvis kombinerar man även detta med databastriggers som flyttar rader vid insert/update/delete.
Eftersom Enova har läst in större delen av databasen i minnet har funktionaliteten för historisering implementerats i .NET-kod, och förlitar sig relativt lite på funktionalitet som databasen erbjuder. Enova använder heller inte foreign keys i databasen utan förutsätter att skrivningar alltid görs via Enovakärnan. Detta bidrar också till att implementationen blir betydligt enklare än om man skulle gjort den i T/SQL som samtidigt bevarat atomär referensintegritet.
Postat i:Uncategorized
