Les lois de normalisation des tables SQL
La normalisation est un ensemble de règles permettant d’organiser les données dans une base SQL afin d’éviter les doublons, les incohérences et les anomalies de mise à jour.
Les trois formes normales les plus utilisées sont : 1NF, 2NF et 3NF.
1. Première forme normale (1NF)
Une table est en 1NF si :
- toutes les valeurs sont atomiques (pas de listes dans une cellule)
- chaque colonne contient un seul type de données
- chaque ligne est unique
Exemple non conforme
Client | Commandes
-------------------------
Alice | 12, 15, 18
Version conforme (1NF)
Client | Commande
-------------------------
Alice | 12
Alice | 15
Alice | 18
2. Deuxième forme normale (2NF)
Une table est en 2NF si :
- elle est déjà en 1NF
- toutes les colonnes dépendent entièrement de la clé primaire
Problème typique : une colonne dépend seulement d’une partie de la clé primaire (dans une clé composée).
Exemple non conforme
(Produit, Commande) | PrixProduit | Quantité
--------------------------------------------
Stylo, 12 | 2.50 | 10
Stylo, 15 | 2.50 | 5
Ici, PrixProduit dépend uniquement de Produit, pas de la clé complète (Produit + Commande).
Version conforme (2NF)
Table Produits :
Produit | Prix
----------------
Stylo | 2.50
Table CommandesProduits :
Produit | Commande | Quantité
--------------------------------
Stylo | 12 | 10
Stylo | 15 | 5
3. Troisième forme normale (3NF)
Une table est en 3NF si :
- elle est déjà en 2NF
- aucune colonne ne dépend d’une autre colonne non clé (pas de dépendance transitive)
Exemple non conforme
ClientID | Ville | CodePostal
---------------------------------
1 | Paris | 75000
2 | Lyon | 69000
Ici, Ville dépend de CodePostal, pas directement de ClientID.
Version conforme (3NF)
Table Clients :
ClientID | CodePostal
----------------------
1 | 75000
2 | 69000
Table Villes :
CodePostal | Ville
----------------------
75000 | Paris
69000 | Lyon
Résumé
- 1NF : données atomiques, pas de répétitions dans une cellule
- 2NF : dépendance totale à la clé primaire
- 3NF : pas de dépendance entre colonnes non clés