In eerdere blogposts en artikelen ben ik uitgebreid ingegaan op de voordelen van next generation enterprise datawarehousing in het algemeen, en van Data Vault als methodiek/enabler voor het next generation EDW in het bijzonder. Next gen EDW is echter geen haarlemmerolie: hoewel het een bepaalde set problemen oplost, introduceert het zelf ook weer nieuwe vraagstukken, die in een traditionele omgeving niet aan de orde zouden zijn.
Eén daarvan is de vraag welke view op het bronsysteem de basis is voor het datawarehouse-datamodel.
“Single version of the truth” vs “system of facts”
Bij traditionele datawarehouses, waar het centrale datawarehouse (CDW) de single version of the truth representeert, wordt binnenkomende data direct omgevormd naar een (generiek) bedrijfsmodel. Om als bedrijfsmodel te kunnen fungeren, moet het datawarehouse-datamodel op zichzelf staan, en zo min mogelijk bepaald worden door de bron.
Dit in tegenstelling tot het next gen EDW: daar is het CDW een “system of facts”, dat zich in hoge mate richt naar de modellering van de feiten in het bronsysteem.
Maar wat zijn dan die “feiten”? De gebeurtenissen in de werkelijkheid? Of de technische events in het systeem?
Interface vs implementatie
Dat klinkt als een non-issue: een bronsysteem wordt geacht te registreren wat er in de werkelijkheid gebeurt, dus werkelijkheid en systeem moeten wel 1:1 zijn. Maar wat het systeem naar buiten toe laat zien, hoeft niet overeen te komen met hoe e.e.a. onder de motorkap geregeld wordt.
Neem als voorbeeld een CRM-systeem: als de gebruiker in het systeem een klant laat verhuizen, en daartoe dus zijn straatnaam, huisnummer, postcode, woonplaats en telefoonnummer wijzigt, is dat in zijn beleving één feit: “klant 12345 verhuist van X naar Y”. Het is echter niet ondenkbaar dat het systeem dat ene feit in zijn data access layer implementeert als 5 verschillende databasetransacties. Wat registreren we nu als feit: 1 verhuizing, of 5 updates?
(Andere afwijkingen tussen interface en implementatie die je zoal kunt tegenkomen, zijn bijvoorbeeld slordige modelleringen - denk aan het opslaan van relaties tussen entiteittypen d.m.v. een onvolledige foreign key, zodat de bedoelde occurrence afgeleid moet worden in de applicatielogica - of performance-optimalisaties die de modellering en/of de data-inhoud beïnvloeden.)
Wat moeten we in het CDW vastleggen om het system of facts zuiver te houden? Kiezen we voor een technische of een functionele benadering?
Technische benadering
Bij een technische benadering richt je je naar de implementatie, oftewel: naar de systeemgebeurtenissen. Je haalt de data 1:1 uit de brondatabase, en slaat die op in het CDW. Je hanteert dus het technische datamodel als basis voor het CDW-model.
Collega en co-auteur Ronald Damhof heeft al eens over dit onderwerp geblogd, en toonde zich daarbij groot voorstander van de technische benadering. Het klinkt ook aantrekkelijk: je weet tenminste zeker dat je altijd alles binnenkrijgt, en nog op het laagste granulaire niveau ook, dus je kunt alle kanten op. Ook prettig: je hoeft je eigen project niet on hold te zetten tot de beheerders van het bronsysteem tijd hebben om een interface voor je te maken – gewoon een image copy trekken of een replicator laten meelopen, en klaar is Kees.
Tenminste, als Kees toevallig een bronsysteem aan het ontsluiten is wat alle informatie-inhoud in zijn data vastlegt. Want bij systemen waarvan interface en implementatie uit elkaar lopen, boet de data aan betekenis in als deze niet door de bril van de applicatielogica bekeken wordt. Wat je in dat geval binnenhaalt is geen granular data, het is less-than-granular: meer data, minder informatie-inhoud.
Er is dan ook geen sprake van dat je bij een technische benadering “no source-related programming” nodig hebt. René Veldwijk zei ‘t al: “technische trucs lossen geen logische problemen op”. Je ontkomt er niet aan om in het EDW - in de Big T, om precies te zijn - de ontbrekende applicatielogica alsnog op de data los te laten: niet eens om “extra” informatie te creëren, maar om überhaupt de informatiewaarde van de binnengehaalde data te reconstrueren. (En dan heb je toch weer die bronbeheerders nodig om je te vertellen hoe de data geïnterpreteerd moet worden.)
Functionele benadering
Bij een functionele benadering baseer je je op de interface van het systeem, ofwel: de gebeurtenissen in de werkelijkheid. Het conceptuele datamodel van de bron is dus het uitgangspunt voor het CDW-model. In de interfacing wordt eerst de real-world feiten gereconstrueerd vanuit de implementatie, door er de bijbehorende applicatielogica op los te laten; pas na die vertaalslag worden ze doorgesluisd naar het EDW.
Het EDW wordt daarmee bevrijd van een stuk complexiteit waar het sowieso niet de beste papieren voor had; en de Big T, van nature al geen lichtgewicht, wordt qua processing en beheerbaarheid in ieder geval niet extra belast.
Bovendien zal het weinig betoog behoeven dat een functioneel georiënteerd model een stuk robuuster c.q. veranderbestendiger is dan een technisch georiënteerde variant. De functionele benadering sluit aan bij diverse principes van goede software-architectuur, zoals information hiding en loose coupling.
En verder?
Zelf heb ik een sterke voorkeur voor de functionele benadering, maar misschien zijn er goede redenen om toch te kiezen voor de technische benadering. Ik ben zeer geïnteresseerd in de afwegingen die daarbij een rol spelen.
Ook zegt het bovenstaande nog niets over hoe de doelstellingen van het next gen EDW het beste gerealiseerd worden – is bijvoorbeeld traceerbaarheid beter gediend met een functionele of een technische benadering?
Ik ben benieuwd naar jullie mening over dit onderwerp.
Trackback URI: http://blog.grey-matter.nl/system-of-facts-maar-wat-zijn-facts/trackback/Back to home page
« BI: to ROI or not to ROI Het architectuurproces, BI style »
Ik ben Lidwine van As, sinds 1994 werkzaam in de IT, en actief als 







