</>
Plan du cours — 18/64

Normalisation : quand et jusqu'où

Intermédiaire

Normaliser, c'est éviter de stocker la même information à plusieurs endroits : chaque fait est enregistré une seule fois.

FormeRègle en une phrase
1FNUne valeur atomique par colonne (pas de « rouge,bleu » dans un champ)
2FNChaque colonne dépend de toute la clé (pas d'une partie seulement)
3FNChaque 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 un count(*) 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.