Normalisation : quand et jusqu'où
IntermédiaireNormaliser, c'est éviter de stocker la même information à plusieurs endroits : chaque fait est enregistré une seule fois.
| Forme | Règle en une phrase |
|---|---|
| 1FN | Une valeur atomique par colonne (pas de « rouge,bleu » dans un champ) |
| 2FN | Chaque colonne dépend de toute la clé (pas d'une partie seulement) |
| 3FN | Chaque colonne dépend uniquement de la clé (pas d'une autre colonne non clé) |
-- Mal : le nom du client est recopié dans chaque commande
commandes(id, client_nom, client_email, total)
-- Bien : le client est stocké une seule fois
clients(id, nom, email)
commandes(id, client_id, total)
Dénormaliser à bon escient#
On duplique volontairement des données pour la lecture (compteur, total précalculé, nom recopié pour l'historique), au prix d'une cohérence à maintenir.
- Le prix d'un produit au moment de la commande doit être copié dans la ligne de commande : le catalogue peut changer, pas la facture.
- Un compteur (
nb_commentaires) évite uncount(*)coûteux, mais doit être mis à jour dans la même transaction (trigger ou code).
Astuce : normalisez d'abord, mesurez ensuite, et ne dénormalisez que pour un besoin de lecture prouvé. Une vue matérialisée est souvent un meilleur compromis qu'une colonne dupliquée à la main.