Aller au contenu principal

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) et factures(num, client, ville, total); jointure sur ville.
  • 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 ?
Laquelle viole 3NF ?