Normalisation
Progression
#Normalisation
Objectif: réduire les redondances et anomalies (insertion, mise à jour, suppression) via les formes normales (1NF, 2NF, 3NF, BCNF) et la décomposition sans perte. La normalisation rend les données cohérentes et plus faciles à maintenir; on dénormalise ensuite si nécessaire pour des lectures plus rapides.
#Rappels
- Dépendance fonctionnelle (DF): X → Y signifie que X détermine Y.
- Clé candidate: ensemble minimal d’attributs déterminant tous les autres.
#Formes normales
- 1NF: valeurs atomiques, pas de listes imbriquées.
- 2NF: 1NF + aucun attribut non‑clé ne dépend d’une partie de clé composite.
- 3NF: 2NF + pas de dépendance transitive vers un attribut non‑clé.
- BCNF: pour toute DF X→Y, X est une super‑clé.
#Animation: décomposition sans perte
Détecter DF
Repérer X→Y qui violent 3NF/BCNF
Scinder R
R(XYZ) → R1(XY) + R2(XZ)
Clés & DF
Vérifier clés et dépendances dans chaque relation
Sans perte
R1 ⋈ R2 = R via clé commune ; préserver DF
#Étude de cas courte
Table factures(num, client, ville, ville_cp, total)
. DF implicite: ville → ville_cp
.
- Problème: mise à jour d’un code postal à plusieurs endroits (anomalie).
- Décomp.:
villes(ville, ville_cp)
etfactures(num, client, ville, total)
; jointure surville
. - Bénéfice: cohérence, moins de redondance; on pourra dénormaliser au besoin pour un rapport.
#Pas‑à‑pas: vérifier la décomposition
La DF ville → ville_cp
indique une connaissance indépendante du client et du numéro de facture.
Étape 1 / 4
Pitfall
La normalisation excessive peut nuire aux performances en multipliant les jointures; doser selon les besoins de lecture/écriture.
#Anomalies illustrées
- Insertion: impossible d’insérer une nouvelle ville sans habitant si ville et habitant partagent la même table.
- Mise à jour: changer un nom de ville dans une ligne mais pas dans d’autres → incohérence; les DF mal respectées favorisent ces divergences.
- Suppression: supprimer le dernier habitant d’une ville supprime aussi l’information de la ville.
Solution: séparer les entités (ex.: ville(id, nom)
et personne(id, ville_id, ...)
) et relier via clés étrangères.
#Propriétés souhaitables
- Décomposition sans perte: la jointure naturelle des nouvelles tables doit reconstituer la table d’origine (sur les clés communes).
- Préservation des DF: idéalement, les dépendances importantes se vérifient encore dans les tables résultantes (ou via contraintes).
#Quiz
Laquelle viole 3NF ?