La dénormalisation est une approche visant à accélérer les performances d’extraction de données orientées lecture dans une base de données relationnelle, où l’administrateur de la base de données rajoute sélectivement des instances spécifiques de données redondantes après que la structure des données a été normalisée. Une base de données dénormalisée ne doit pas être confondue avec une base de données qui n’a jamais été normalisée.
En utilisant la normalisation en SQL, une base de données stockera des types de données différents mais liés dans des tables logiques distinctes, appelées relations. Lorsqu’une requête combine les données de plusieurs tables en une seule table de résultat, on parle de jointure. Les performances d’une telle jointure face à des requêtes complexes sont souvent l’occasion pour l’administrateur d’explorer l’alternative de la dénormalisation.
Normalisation vs dénormalisation
La multiplication des jointures dans une même requête peut avoir un impact négatif sur les performances. À mesure que le nombre de tables engendrées par la conception augmente, la complexité des jointures peut créer une surcharge de calcul inacceptable. Les jointures peuvent être intensives en E/S, et l’exécution des requêtes associées peut consommer un temps démesuré, allant parfois jusqu’à faire planter les applications.
Avec la dénormalisation des bases de données, les concepteurs de données assemblent des tables disparates. Cela se fait au prix d’un certain nombre de redondances de données, mais cela peut être utile pour réduire le nombre de jointures, et donc accélérer les opérations. Pour le concepteur de bases de données, le compromis consiste à créer des systèmes de bases de données comportant moins de grandes tables ou plus de petites tables, en fonction des ressources et des exigences en matière d’interactivité des requêtes. Le concepteur doit également mettre cela en balance avec les problèmes de redondance des données, en particulier la possibilité d’une augmentation de l’incohérence des données.
Après que les données ont été dupliquées, le concepteur de base de données doit prendre en compte la manière dont les instances multiples des données seront maintenues. Une façon de dénormaliser une base de données est de permettre au système de gestion de base de données de stocker les données redondantes sur le disque. Cela présente l’avantage supplémentaire de garantir la cohérence des copies redondantes. Le coût des disques ayant diminué au fil des ans, ce type d’approche a gagné en popularité. Les fabricants de bases de données relationnelles ont amélioré les bases de données pour assurer une meilleure cohérence lorsque la dénormalisation est employée.
Conception des données logiques
L’une des approches de la dénormalisation consiste à dénormaliser la conception réelle des données logiques. Cela peut rapidement conduire à des données incohérentes. Des règles appelées contraintes peuvent être utilisées pour spécifier comment les copies redondantes d’informations sont synchronisées, mais elles augmentent la complexité de la conception de la base de données et risquent également d’avoir un impact sur les performances d’écriture.
Les cas courants où la dénormalisation peut être utilisée efficacement incluent les tables pré-jointes qui regroupent les données pour des utilisations communes, les tables fractionnées adaptées à des groupes d’utilisateurs spécifiques et les tables combinées qui consolident les relations un-à-un et un-à-plusieurs.
La dénormalisation dans les entrepôts de données et NoSQL
Dans les entrepôts de données relationnels, la dénormalisation joue souvent un rôle important. Cela est particulièrement vrai dans les bases de données dimensionnelles, comme le prescrit l’influent architecte et auteur d’entrepôts de données Ralph Kimball. L’accent qu’il met sur les structures dimensionnelles qui utilisent la dénormalisation vise à accélérer l’exécution des requêtes, ce qui peut être particulièrement important dans les entrepôts de données utilisés pour la business intelligence. La dénormalisation aide les administrateurs d’entrepôts de données à garantir des performances plus prévisibles.
Les exemples de dénormalisation vont au-delà de la dénormalisation en SQL. Un type de dénormalisation a également une utilisation en dehors des bases de données relationnelles. La technique est souvent employée dans les applications basées sur les bases de données NoSQL, en particulier les bases de données NoSQL orientées vers les documents. Ces bases de données sont souvent à la base des architectures de gestion de contenu pour les pages de profil Web qui bénéficient d’optimisations de lecture. L’objectif de la dénormalisation dans ce contexte est de réduire le temps nécessaire à l’assemblage de pages comprenant des données de profil disparates. Dans de tels cas, le maintien de la cohérence des données devient le travail de l’application et, par ricochet, du développeur de l’application.