De fabel van het sterschema
Auteur: Rick F. van der Lans
Geschreven: mei 2000
Gepubliceerd in: CM Corporate.Net, nummer 152

Nog bij elke lezing, conferentie en cursus waarin het ontwerpen van datawarehouses wordt behandeld, komt de discussie ter sprake: Wat is sneller - een sterschema of een sneeuwvlokschema? Het grote verschil is dat een sneeuwvlokschema genormaliseerd is en een sterschema niet. Om deze reden denken sommigen dat een database-ontwerp met het patroon van een ster sneller is. Want we hoeven dan geen join uit te voeren over bijvoorbeeld zes, maar slechts over drie tabellen, en dat is sneller. Was het leven echter maar zo eenvoudig. In de praktijk blijkt namelijk dat het ster- maar soms ook het sneeuwvlokschema sneller is.
Voor de niet-ingewijden: de tabellen van een datawarehouse verdelen we in feit- en dimensietabellen. Feittabellen bevatten de cijfers, zoals het aantal verkochte eenheden, het aantal uren ziekteverzuim en het aantal dagen met zonneschijn. De primaire sleutels van deze tabellen worden gevormd door de begrippen waarvan deze feiten afhankelijk zijn. Bijvoorbeeld, het aantal verkochte eenheden is afhankelijk van producten, klanten en winkels. Dit noemen we de dimensies. En de dimensies worden beschreven in - u begrijpt het al - de dimensietabellen.
Het verschil tussen het ster- en sneeuwvlokschema is dat de dimensietabellen bij eerstgenoemde gedenormaliseerd zijn. Veronderstel dat elk product tot een productgroep behoort en dat we over elke productgroep apart informatie moeten opslaan. Bij een sterschema slaan we deze informatie in de dimensietabel 'producten' op. Bij een sneeuwvlokschema wordt daarvoor een aparte tabel gecreëerd. Nogmaals, een sneeuwvlokschema is genormaliseerd.
Omdat we dus bij sterschema's met minder tabellen werken, wordt er wel eens gedacht dat zoiets sneller is. Harm van der Lek in zijn boekje "Sterren en Dimensies" verwoordt het als volgt: "De reden dat we dimensietabellen denormaliseren heeft te maken met performance."
Helaas is dit een fabel. En wel een hardnekkige fabel. Recentelijk vroeg ik het weer eens tijdens een paneldiscussie aan vertegenwoordigers van diverse database-leveranciers: Wat is sneller? Hun antwoord was eensluidend: Het ligt er aan, soms zijn de sterren en soms de sneeuwvlokjes sneller. En dat is ook vandaag het enige correcte antwoord. Het is naïef om te denken dat we de performance van queries altijd verbeteren door de tabellen te denormaliseren. Het is van vele factoren afhankelijk, waaronder de hoeveelheid records in de te denormaliseren tabellen, de breedte van de betrokken kolommen, de verdeling van waarden binnen deze kolommen, maar ook de beschikbare interne bufferruimte, welke databaseserver u gebruikt, de snelheid van de machine, en zo kan ik nog wel even doorgaan.
Momenteel zijn we bezig met een benchmark op dit vlak. Wederom komt hier naar voren dat sterschema's in bepaalde situaties sneller zijn, maar in andere langzamer. Als we daarbij bedenken dat de frequentie waarmee het datawarehouse moet worden bijgewerkt, langzaam wordt opgevoerd (we spreken al van near-online datawarehouses), wordt de aanpak om te denormaliseren en dus met sterren te implementeren, steeds aantrekkelijker.
Conclusie, pas op met sterschema's. Ze zijn niet altijd zo snel als u denkt. Vaak is een sneeuwvlokschema sneller of is een andere truc nog beter aan te raden.