Dénormalisation maîtrisée
Dénormaliser, c'est réintroduire une redondance contrôlée pour accélérer des lectures fréquentes. On le fait après avoir normalisé et mesuré, avec un mécanisme qui garde la copie juste.
- dénormalisation
- performance
- agrégat
- entrepôt
- étoile
Syntaxe
Modèle normalisé (3FN) → mesure d'une requête trop lente→ copie ou agrégat ciblé+ mécanisme qui la tient à jour (déclencheur, traitement planifié, vue matérialisée)Exemple
Problème : le tableau de bord recalcule le chiffre d'affairesde chaque client à partir de millions de lignes de commande.Ajout : client(num_client PK, nom, ca_cumule) ca_cumule = somme de quantite × prix_vente de ses commandes, mis à jour par un déclencheur à chaque nouvelle ligne, ou recalculé chaque nuit.Entrepôt de données, schéma en étoile : fait_vente(id_date, id_produit, id_magasin, quantite, montant) dim_produit(id_produit PK, libelle, categorie, rayon) ← dénormaliséeÀ retenir
- Gardez la source de vérité normalisée : la colonne dénormalisée est une copie que l'on peut toujours recalculer.
- Essayez d'abord un index, une vue ou une vue matérialisée (PostgreSQL) : elles accélèrent les lectures sans dupliquer la donnée dans le modèle métier.
- Les entrepôts de données dénormalisent volontairement leurs dimensions : on y lit beaucoup et l'on y écrit par lots, ce qui limite le risque d'incohérence.
- Piège : dénormaliser « au cas où », sans mesure. Chaque copie ajoute un risque d'incohérence et du code de synchronisation à maintenir.
Voir aussi
- 2FN & 3FNLa 2FN interdit qu'un attribut dépende d'une partie seulement d'une clé composée ; la 3FN interdit qu'il dépende d'un autre attribut non clé. Ensemble, elles suppriment l'essentiel des redondances.
- FNBC (forme normale de Boyce-Codd)Une table est en FNBC si toute dépendance fonctionnelle part d'une clé candidate. Plus stricte que la 3FN, elle n'en diffère qu'avec plusieurs clés candidates composées qui se chevauchent.
- Généralisation → MLD (héritage)Une généralisation du MCD se traduit de trois façons : table unique avec colonne de type, table mère et tables filles, ou tables filles seules. Le choix dépend des requêtes et des contraintes.