Data vault modellering

Eenvoudig data vault model met twee hubs (blauw), één link (groen) en vier satellieten (geel)

Data vault probeert het probleem van het omgaan met verandering in de omgeving op te lossen door de bedrijfssleutels (die niet zo vaak muteren, omdat zij een bedrijfseenheid op unieke wijze identificeren) en de associaties tussen deze bedrijfssleutels, te scheiden van de beschrijvende attributen van deze sleutels.

De bedrijfssleutels en hun associaties zijn structurele attributen, die het geraamte van het gegevensmodel vormen. De data vault methode heeft als een van haar belangrijkste axioma’s dat echte bedrijfssleutels alleen veranderen wanneer de business verandert en daarom de meest stabiele elementen zijn om de structuur van een historische database uit af te leiden. Als u deze sleutels gebruikt als de ruggengraat van een data warehouse, kunt u de rest van de gegevens daaromheen organiseren. Dit betekent dat de keuze van de juiste sleutels voor de hubs van het grootste belang is voor de stabiliteit van uw model. De sleutels worden opgeslagen in tabellen met een paar constraints op de structuur. Deze sleuteltabellen worden hubs genoemd.

HubsEdit

Hubs bevatten een lijst van unieke bedrijfssleutels die weinig geneigd zijn te veranderen. Hubs bevatten ook een surrogaatsleutel voor elk hub-item en metagegevens die de oorsprong van de bedrijfssleutel beschrijven. De beschrijvende attributen voor de informatie op de Hub (zoals de beschrijving voor de sleutel, mogelijk in meerdere talen) worden opgeslagen in structuren die Satellite-tabellen worden genoemd en die hieronder zullen worden besproken.

De Hub bevat ten minste de volgende velden:

  • een surrogaatsleutel, gebruikt om de andere structuren met deze tabel te verbinden.
  • een bedrijfssleutel, de drijfveer voor deze hub. De business key kan uit meerdere velden bestaan.
  • de record source, die kan worden gebruikt om te zien welk systeem elke business key het eerst heeft geladen.
  • optioneel kunt u ook metadata velden hebben met informatie over handmatige updates (gebruiker/tijd) en de extractiedatum.

Een hub mag niet meerdere bedrijfssleutels bevatten, behalve wanneer twee systemen dezelfde bedrijfssleutel leveren, maar met botsingen die verschillende betekenissen hebben.

Hubs moeten normaal gesproken ten minste één satelliet hebben.

Hub-voorbeeldEdit

Dit is een voorbeeld voor een hub-tabel met auto’s, genaamd “Auto” (H_CAR). De belangrijkste sleutel is het identificatienummer van het voertuig.

Voornaam Beschrijving Verplicht? Commentaar
H_CAR_ID Sequence ID en surrogaatcode voor de hub Nee Aanbevolen maar optioneel
VEHICLE_ID_NR De bedrijfssleutel die deze hub aanstuurt. Kan meer dan één veld zijn voor een samengestelde bedrijfssleutel Ja
H_RSRC De recordbron van deze sleutel wanneer deze voor het eerst wordt geladen Ja
LOAD_AUDIT_ID Een ID in een tabel met auditinformatie, zoals laadtijd, duur van de lading, aantal regels, enzovoort. Nee

LinksEdit

Associaties of transacties tussen bedrijfssleutels (die bijvoorbeeld de hubs voor klant en product met elkaar in verband brengen via de aankooptransactie) worden gemodelleerd met behulp van koppelingstabellen. Deze tabellen zijn in feite many-to-many join tabellen, met een aantal metadata.

Links kunnen linken naar andere links, om te gaan met veranderingen in granulariteit (bijvoorbeeld, het toevoegen van een nieuwe sleutel aan een database tabel zou de korrel van de database tabel te veranderen). Bijvoorbeeld, als u een associatie tussen klant en adres hebt, zou u een verwijzing naar een link tussen de hubs voor product en transportbedrijf kunnen toevoegen. Dit zou een link kunnen zijn met de naam “Levering”. Verwijzen naar een link in een andere link wordt beschouwd als een slechte praktijk, omdat het afhankelijkheden introduceert tussen links die parallel laden bemoeilijken. Aangezien een link naar een andere link hetzelfde is als een nieuwe link met de hubs van de andere link, verdient het in deze gevallen de voorkeur de links te creëren zonder naar andere links te verwijzen (zie het gedeelte over laadpraktijken voor meer informatie).

Links linken soms hubs naar informatie die op zichzelf niet voldoende is om een hub te construeren. Dit gebeurt wanneer een van de bedrijfssleutels die door de link worden geassocieerd, geen echte bedrijfssleutel is. Neem als voorbeeld een bestelbon met “bestelnummer” als sleutel, en bestelregels die zijn gecodeerd met een semi-willekeurig nummer om ze uniek te maken. Laten we zeggen, “uniek nummer”. Deze laatste sleutel is geen echte bedrijfssleutel, dus het is geen hub. We moeten hem echter wel gebruiken om de juiste granulariteit voor de link te garanderen. In dit geval gebruiken we geen hub met surrogaat sleutel, maar voegen we de bedrijfssleutel “uniek nummer” zelf toe aan de link. Dit wordt alleen gedaan wanneer er geen mogelijkheid is om de bedrijfssleutel ooit voor een andere koppeling te gebruiken of als sleutel voor attributen in een satelliet. Deze constructie is door Dan Linstedt op zijn (inmiddels ter ziele gegane) forum een “peg-legged link” genoemd.

Links bevatten de surrogaat sleutels voor de hubs die zijn gelinkt, hun eigen surrogaat sleutel voor de link en metadata die de oorsprong van de associatie beschrijven. De beschrijvende attributen voor de informatie over de associatie (zoals de tijd, de prijs of het bedrag) worden opgeslagen in structuren die satelliettabellen worden genoemd en die hieronder worden besproken.

Link-voorbeeldEdit

Dit is een voorbeeld voor een link-tabel tussen twee hubs voor auto’s (H_CAR) en personen (H_PERSON). De link heet “Driver” (L_DRIVER).

Fieldname Description Mandatory? Commentaar
L_DRIVER_ID Sequence ID en surrogaatcode voor de link Nee Aanbevolen maar optioneel
H_CAR_ID surrogaatcode voor de autokoppeling, het eerste anker van de link Ja
H_PERSON_ID surrogaatsleutel voor de persoonsnaaf, het tweede anker van de link Ja
L_RSRC De recordsource van deze associatie bij de eerste keer laden Ja
LOAD_AUDIT_ID Een ID in een tabel met auditinformatie, zoals laadtijd, duur van de lading, aantal regels, enz. Nee

SatellitesEdit

De hubs en links vormen de structuur van het model, maar hebben geen temporele attributen en bevatten geen beschrijvende attributen. Deze zijn opgeslagen in afzonderlijke tabellen, satellieten genaamd. Deze bestaan uit metadata die hen verbinden met hun bovenliggende hub of link, metadata die de oorsprong van de associatie en de attributen beschrijven, alsmede een tijdlijn met begin- en einddata voor het attribuut. Waar de hubs en links de structuur van het model vormen, vormen de satellieten het “vlees” van het model, de context voor de bedrijfsprocessen die in de hubs en links zijn vervat. Deze attributen worden zowel met betrekking tot de details van de zaak als tot de tijdlijn opgeslagen en kunnen variëren van vrij complex (alle velden die een volledig profiel van een cliënt beschrijven) tot vrij eenvoudig (een satelliet op een link met alleen een geldigheidsindicator en een tijdlijn).

In de regel worden de attributen in satellieten gegroepeerd per bronsysteem. Beschrijvende attributen zoals grootte, kosten, snelheid, hoeveelheid of kleur kunnen echter met verschillende snelheden veranderen, zodat u deze attributen ook kunt opsplitsen in verschillende satellieten op basis van de snelheid waarmee ze veranderen.

Alle tabellen bevatten metadata, die minimaal het bronsysteem beschrijven en de datum waarop deze invoer geldig werd, zodat een volledig historisch beeld ontstaat van de gegevens zoals die het data warehouse binnenkomen.

SatellietvoorbeeldEdit

Dit is een voorbeeld voor een satelliet op de bestuurderslink tussen de hubs voor auto’s en personen, genaamd “Bestuurdersverzekering” (S_DRIVER_INSURANCE). Deze satelliet bevat attributen die specifiek zijn voor de verzekering van de relatie tussen de auto en de persoon die de auto bestuurt, bijvoorbeeld een indicator of dit de primaire bestuurder is, de naam van de verzekeringsmaatschappij voor deze auto en persoon (kan ook een aparte hub zijn) en een overzicht van het aantal ongevallen waarbij deze combinatie van voertuig en bestuurder betrokken is. Ook is een verwijzing opgenomen naar een opzoek- of verwijzingstabel met de naam R_RISK_CATEGORY, die de codes bevat voor de risicocategorie waarin deze relatie geacht wordt te vallen.

Voornaam Beschrijving Verplicht? Commentaar
S_DRIVER_INSURANCE_ID Sequence ID en surrogaat sleutel voor de satelliet op de link Nee Aanbevolen maar optioneel
L_DRIVER_ID (surrogaat) primaire sleutel voor de chauffeurslink, de ouder van de satelliet Ja
S_SEQ_NR Orderings- of volgnummer, om uniciteit af te dwingen als er meerdere geldige satellieten voor één oudersleutel zijn Nee(**) Dit kan bijvoorbeeld gebeuren als u een hub COURSE hebt en de naam van de cursus een attribuut is, maar in meerdere verschillende talen.
S_LDTS Load Date (begindatum) voor de geldigheid van deze combinatie van attribuutwaarden voor de parent key L_DRIVER_ID Ja
S_LEDTS Load End Date (einddatum) voor de geldigheid van deze combinatie van attribuutwaarden voor de bovenliggende sleutel L_DRIVER_ID Nee
IND_PRIMARY_DRIVER Indicator of de bestuurder de primaire bestuurder is voor deze auto Nee (*)
INSURANCE_COMPANY De naam van de verzekeringsmaatschappij voor dit voertuig en deze bestuurder Nee (*)
NR_OF_ACCIDENTS Het aantal ongevallen van deze bestuurder in dit voertuig Nee (*)
R_RISK_CATEGORY_CD De risicocategorie voor de bestuurder. Dit is een verwijzing naar R_RISK_CATEGORY Nee (*)
S_RSRC De recordbron van de informatie in deze satelliet bij de eerste keer laden Ja
LOAD_AUDIT_ID Een ID in een tabel met auditinformatie, zoals laadtijd, duur van de lading, aantal regels, enz. Nee

(*) ten minste één attribuut is verplicht.(**) volgnummer wordt verplicht als het nodig is om uniciteit af te dwingen voor meerdere geldige satellieten op dezelfde hub of link.

ReferentietabellenEdit

Referentietabellen zijn een normaal onderdeel van een gezond data vault-model. Ze zijn er om redundante opslag van eenvoudige referentiegegevens waarnaar veel verwezen wordt te voorkomen. Meer formeel definieert Dan Linstedt referentiegegevens als volgt:

Alle informatie die nodig wordt geacht om beschrijvingen uit codes op te lossen, of om sleutels op (sic) een consistente manier te vertalen. Veel van deze velden zijn “beschrijvend” van aard en beschrijven een specifieke toestand van de andere, belangrijkere informatie. Als dusdanig staan referentiegegevens in aparte tabellen ten opzichte van de ruwe Data Vault-tabellen.

Referentietabellen worden vanuit satellieten geraadpleegd, maar zijn nooit gebonden aan fysieke foreign keys. Er is geen voorgeschreven structuur voor referentietabellen: gebruik wat in uw specifieke geval het beste werkt, gaande van eenvoudige opzoektabellen tot kleine gegevenskluizen of zelfs sterren. Ze kunnen historisch zijn of geen geschiedenis hebben, maar het is aan te bevelen om het bij de natuurlijke sleutels te houden en in dat geval geen surrogaatsleutels te maken. Normaal gesproken hebben data vaults veel referentietabellen, net als elk ander Data Warehouse.

ReferentievoorbeeldEdit

Dit is een voorbeeld van een referentietabel met risicocategorieën voor bestuurders van voertuigen. Er kan vanuit elke satelliet in de data vault naar worden verwezen. Voor nu verwijzen we er naar vanuit satelliet S_DRIVER_INSURANCE. De referentietabel is R_RISK_CATEGORY.

Fieldname Description Mandatory?
R_RISK_CATEGORY_CD De code voor de risicocategorie Ja
RISK_CATEGORY_DESC Een beschrijving van de risicocategorie Nee (*)

(*) ten minste één attribuut is verplicht.

Plaats een reactie