Denormalisatie is een benadering voor het versnellen van lees-georiënteerde data retrieval performance in een relationele database, waarbij de database beheerder selectief specifieke instanties van overbodige data terug toevoegt nadat de data structuur is genormaliseerd. Een gedenormaliseerde database moet niet worden verward met een database die nooit is genormaliseerd.
Met normalisatie in SQL slaat een database verschillende maar verwante soorten gegevens op in afzonderlijke logische tabellen, relaties genoemd. Wanneer in een query gegevens uit meerdere tabellen worden gecombineerd tot een enkele resultatentabel, wordt dat een join genoemd. De prestatie van zo’n join bij complexe queries is vaak de aanleiding voor de beheerder om het denormalisatie alternatief te onderzoeken.
Normalisatie vs. denormalisatie
Meerdere joins in dezelfde query kunnen een negatieve invloed hebben op de prestatie. Als het aantal tabellen dat door het ontwerp wordt voortgebracht toeneemt, kan de complexiteit van de joins een onaanvaardbare rekenoverhead veroorzaken. Joins kunnen I/O-intensief zijn, en de uitvoering van query’s kan een buitensporige hoeveelheid tijd in beslag nemen, waardoor soms zelfs applicaties crashen.
Met database denormalisatie voegen data-ontwerpers ongelijksoortige tabellen samen. Dit gaat ten koste van een aantal redundanties in de gegevens, maar het kan nuttig zijn om het aantal joins te beperken en zo de operaties te versnellen. De afweging voor de database-ontwerper ligt in het creëren van databasesystemen met minder grote tabellen of meer kleine tabellen, gebaseerd op middelen en eisen voor interactiviteit van queries. De ontwerper moet dit ook afwegen tegen problemen van redundantie van gegevens, met name de mogelijkheid van toegenomen inconsistentie van gegevens.
Nadat gegevens zijn gedupliceerd, moet de database-ontwerper rekening houden met hoe meerdere instanties van de gegevens zullen worden onderhouden. Een manier om een database te denormaliseren is het databasemanagementsysteem toe te staan overbodige gegevens op schijf op te slaan. Dit heeft als bijkomend voordeel dat de consistentie van redundante kopieën gewaarborgd is. Aangezien de schijfkosten in de loop der jaren zijn gedaald, zijn dergelijke benaderingen populairder geworden. Fabrikanten van relationele databases hebben databases verbeterd om een betere consistentie te garanderen wanneer denormalisatie wordt toegepast.
Logisch gegevensontwerp
Eén van de benaderingen van denormalisatie is het denormaliseren van het eigenlijke logische gegevensontwerp. Dit kan snel leiden tot inconsistente gegevens. Regels, constraints genaamd, kunnen worden gebruikt om te specificeren hoe overbodige kopieën van informatie worden gesynchroniseerd, maar zij verhogen de complexiteit van het databaseontwerp en lopen ook het risico van invloed op de schrijfprestaties.
Gemeenschappelijke gevallen waarin denormalisatie effectief kan worden gebruikt, zijn pre-joined tabellen die gegevens voor gemeenschappelijk gebruik bundelen, gesplitste tabellen die zijn afgestemd op specifieke gebruikersgroepen en gecombineerde tabellen die een-op-een en een-op-veel relaties consolideren.
Denormalisatie in datawarehousing en NoSQL
In relationele datawarehouses speelt denormalisatie vaak een belangrijke rol. Dit geldt met name voor dimensionale databases zoals voorgeschreven door de invloedrijke datawarehouse-architect en auteur Ralph Kimball. Zijn nadruk op dimensionele structuren die gebruik maken van denormalisatie is bedoeld om de uitvoering van query’s te versnellen, wat vooral belangrijk kan zijn in datawarehouses die worden gebruikt voor business intelligence. Denormalisatie helpt datawarehouse-beheerders te zorgen voor meer voorspelbare prestaties.
Voorbeelden van denormalisatie gaan verder dan denormalisatie in SQL. Een vorm van denormalisatie wordt ook buiten relationele databases gebruikt. De techniek wordt vaak toegepast in toepassingen op basis van NoSQL-databases, met name document-georiënteerde NoSQL-databases. Dergelijke databases liggen vaak ten grondslag aan content management architecturen voor web profiel pagina’s die baat hebben bij lees-optimalisaties. Het doel van denormalisatie in deze context is om de tijd te verminderen die nodig is om pagina’s samen te stellen die uit ongelijksoortige profielgegevens bestaan. In dergelijke gevallen wordt het handhaven van de consistentie van de gegevens de taak van de applicatie, en daarmee van de applicatie-ontwikkelaar.