Eén van de uitdagingen bij het maken van een dimensionaal model volgens de regels van Kimball, is het modelleren van hiërarchiën in dimensies zoals die bijv. voorkomen in zogenaamde bill of materials (producten die bestaan uit onderdelen waarbij ieder onderdeel zelf ook een los product kan zijn, maar ook in meerdere producten gebruikt kan worden). In de training die wij over dit onderwerp geven, zit ook het leuke voorbeeld van Star Wars DVD’s die los verkocht worden, maar ook als boxed products. Als je dan wilt weten hoeveel DVD’s je verkocht hebt van Star Wars Episode IV, of die nu los of als onderdeel van een box is verkocht, moet je dit soort hiërarchische indelingen op de een of andere manier modelleren in je dimensionale model. Kimball schrijft daarvoor de bridge tabel voor, een gebruikelijke modelleeroplossing voor hiërarchische relaties.
Tijdens de laatste dimensionaal modelleringstraining die ik gaf, vroeg iemand mij of je voor dit soort problematiek niet het HierarchyID type zou kunnen gebruiken. Dit datatype speciaal bedoeld voor het modelleren van hiërarchieën werd in SQL Server 2008 geïntroduceerd. Bij gebruik van dit datatype wordt het volledig pad van iedere rij in een hiërarchie vastgelegd. Gebruik van dit datatype voor zowel het vullen als het queryen wordt uitgebreid beschreven in onder andere dit artikel.
Terug naar de vraag of het HierarchyID datatype daarmee geschikt is voor toepassing in een Kimball dimensionaal model. Kimball stelt als één van de belangrijkste eisen aan een datawarehouse de makkelijke toegankelijkheid van de gegevens voor business users. En daarmee plaats ik meteen mijn eerste vraagtekens bij het HierachyID datatype. Het queryen van een tabel waarin dit datatype gebruikt wordt, is namelijk afwijkend van wat we meestal met SQL doen. Je moet veel meer met de verschillende functies werken die bij het datatype horen. Niet alledaagse, standaard SQL dus. Natuurlijk zou je middels views of andere abstractietechnieken die functies wel weer kunnen verbergen. Maar een andere belangrijke eis is de performance van een dimensionaal model. En daar blijkt HierarchyID ook te verliezen van de Kimball bridge tabel. John Simon heeft de verschillende mogelijkheden voor het implementeren van hiërarchieën in dimensionale modellen onderzocht, waaronder ook nog een alternatief, de common table expressions, en daaruit blijkt dat de Kimball oplossing de beste performance geeft.
Kortom, is HierarchyID een alternatief voor de Kimball bridge tabel? Zeker, maar het lijkt niet het beste alternatief.