Historie. We gaan het nu hebben over historie. En wel in het bijzonder over de zogeheten Slowly Changing Dimensions.
De afkorting van deze Engelse term is SCD. Deze afkorting zul je nog vaak horen. SCD's zijn dus Langzaam Veranderende Dimensies. Maar wat zijn dat dan? Als je gegevens hebt in je database systeem, dan kun je die wijzigen.
Stel je hebt in je operationele systeem een product... en dat product heeft een omschrijving. Als daar nu iets in staat dat je niet wilt hebben, dan kun je twee dingen doen. Je kunt ten eerste een nieuw product aanmaken. Dat is meestal niet wenselijk, omdat je dan ook een nieuw productnummer krijgt.
Een tweede optie is het aanpassen van de omschrijving. Dit is wat meestal gebeurt. Als we s'nachts alle gegevens van het live systeem, van het dagelijkse systeem, overzetten in onze analytische database, dan betekent dat...
dat die wijziging in onze dimensietabel terecht komt. In dit geval in onze productdimensie. Maar we hebben niets gedaan om ervoor te zorgen dat we iets over de historie weten.
Dus wat gebeurt er? De nieuwe naam wordt in die dimensietabel gezet en alle gegevens die gelinkt zijn aan die naam krijgen allemaal die nieuwe naam. Ook alle producten die voor deze wijziging een andere naam hadden zijn dus nu aangepast. En dat kan ervoor zorgen dat het geheel niet meer klopt.
Je kunt je voorstellen dat als je een rapport hebt gemaakt en de volgende dag de productomschrijving er compleet anders uitziet, je behoorlijk in de war kunt raken. Dat is wat er dreigt als je historie niet opslaat. Maar met Slowly Changing Dimensions kunnen we dat voorkomen.
Met SCD hebben we de keuze uit meerdere types. Dus we kunnen kiezen hoe we historie gaan bijhouden. In dit geval kunnen we vaststellen dat de wijziging wel degelijk van belang is.
Dus we gaan alle gegevens tot een bepaald moment onder de oude productnaam zetten. Maar vanaf het moment dat de gegevens gewijzigd zijn, geven we die een nieuwe naam. Ondanks dat de twee omschrijvingen hetzelfde productnummer hebben. Naast dit voorbeeld bestaan er natuurlijk nog veel meer situaties waarin zaken veranderen. Per situatie kunnen we vaststellen hoe belangrijk het is om het verleden op te slaan en in welke mate van detail.
SCD-typen geven je kortom een handvat om historie op een bepaalde manier bij te houden. Er zijn zeven typen waarvan we er drie uitgebreid gaan bespreken. Deze komen ook het meest voor en zijn belangrijk om te herkennen om je rapportages op een bepaalde manier op te bouwen. SCD 1. Overschrijven Slowly Changing Dimensions type 1 is het meest eenvoudige type.
Dit type is het simpelweg overschrijven van gegevens. Dit gebruik je als je vlug iets wilt corrigeren. Dus op het moment dat iemand bijvoorbeeld een typfout corrigeert in een productnaam of in de achternaam van een persoon, dan is het handig als dat door alle gegevens heen gebeurt.
Als van dit type informatie geen historie wordt bijgehouden, dan is dat niet zo erg. Je kunt dus SCD type 1 gebruiken voor wijzigingen waarvan je geen historie wilt bijhouden. SCD 2. Oké, het volgende type.
Slowly Changing Dimension type 2. Dat is een heel gedetailleerde manier om je historie bij te houden. In dit geval maak je voor elke historische wijziging een nieuwe rij aan in de dimensietabel. Stel je detecteert een wijziging in de gegevens. Het kan bijvoorbeeld zijn dat iemand de naam van een product gewijzigd heeft.
Het gaat hier dus niet om een typfout, maar om een bewuste wijziging. Deze wijziging is doorgevoerd zonder dat er een nieuwe SKU, Stock Keeping Unit, nummer of productnummer aan is gegeven. Dat is vervelend, want dan weten we niet meer wat de oude en de nieuwe naam was. Hoe gaan we dat oplossen? Nou, dat los je op door zelf de primaire sleutel aan te passen.
Want zoals je inmiddels weet, verwijs je vanuit de feitetabel naar de dimensietabel met een uniek nummer. Dat unieke nummer is de sleutel. En daar wordt vaak gewoon een SKU of productnummer voor gebruikt.
Op het moment dat je dat productnummer gebruikt hebt, heb je een probleem. In dit geval kun je geen historie bijhouden, omdat je niet twee verschillende omschrijvingen aan één productnummer kunt toewijzen. Elk product bestaat immers maar één keer in de dimensietabel product.
Dit is opgelost doordat er twee wijzigingen zijn doorgevoerd. Ten eerste is er een nieuw veld aangemaakt in de dimensietabel product. Dat veld heet productnummer. In dit veld staat het productnummer zoals deze is vastgesteld in de operationele database. Ten tweede is het sleutelveld aangepast in de productdimensie.
In plaats dat we het productnummer nu gebruiken in de sleutel, is dit aangepast naar een productnummer plus een versienummer. Dus bijvoorbeeld productnummer 873 krijgt de sleutel 873-001. Zolang er niets wijzigt in het product, verwijzen we steeds met dit nummer naar de feitetabel.
Als iemand een wijziging heeft gemaakt... Dan voegen we een nieuwe regel toe in de productdimensie en geven we deze product key 873-002. Omdat we een extra kolom hebben toegevoegd met een productnummer, kun je in je rapportages nog steeds het oorspronkelijke productnummer weergeven. SCD 2 is ervoor bedoeld om oneindig wijzigingen bij te kunnen houden.
SCD 3 Slowly Changing Dimension type 3 zorgt ervoor dat je historie bijhoudt, maar beperkt. Je kunt niet zoals bij SCD2 oneindig historie bijhouden. In SCD3 is er een huidig waardeveld aangemaakt, oftewel een current value field en een vorige waardeveld, previous value field.
Dit zorgt ervoor dat er alleen maar een extra veld is toegevoegd aan de dimensie. Er is niets veranderd aan sleutels. In het vorige waardeveld vind je de voorlaatste waarde, in het huidige waardeveld vind je de huidige waarde. En alle overige historie is niet meer aanwezig. Dit is een techniek uit het verleden, toen opslag nog erg duur was en ze op deze manier konden voorkomen dat er heel veel gegevens onnodig werden opgeslagen.
Tegenwoordig kom je deze SCD bijna niet meer tegen. Overige typen. Goed. Je weet nu dat er drie Slowly Changing Dimensions zijn. Naast deze drie zijn er nog vier SCD's.
Omdat de eerste twee het meest voorkomen en je de derde moet herkennen, hoef je van de laatste vier alleen maar te weten dat ze bestaan. SCD 4 is het toevoegen van een minidimentie, waar we later nog op terugkomen. SCD 5 tot en met 7 zijn combinaties van SCD 1 tot en met 4.