I. Algorithmes de Normalisation (Processus)
La normalisation s’effectue généralement par une série de tests (formes normales). Si une table ne satisfait pas à une forme normale, on applique un algorithme de décomposition.
Étape 1 : Identification des Dépendances Fonctionnelles
Avant de normaliser, il faut lister toutes les règles métiers.
- Exemple :
Num_Employé → Nom_Employé(Un numéro d’employé unique détermine son nom).
Étape 2 : Décomposition sans perte d’information
Pour passer d’une forme normale à une supérieure, on “casse” la table en plusieurs tables plus petites.
- Règle d’or : La décomposition doit être sans perte (on doit pouvoir reconstruire la table originale par jointure) et préserver les dépendances fonctionnelles.
Étape 3 : Vérification progressive
On applique les règles séquentiellement : 1NF → 2NF → 3NF.
II. Les Formes Normales Fondamentales
A. La Première Forme Normale (1NF)
Définition : Une relation est en 1NF si et seulement si :
- Tous les attributs sont atomiques (indivisibles).
- Il n’existe pas de groupes de répétition (listes, tableaux imbriqués).
- La table possède une clé primaire.
Explication : Une case ne doit contenir qu’une seule valeur. On ne doit pas avoir de colonnes “Enfant1, Enfant2, Enfant3…” ni de liste “Enfants : Jean, Paul”.
Exemple de violation et correction :
-
Table brute (Pas 1NF) :
ID_Etudiant Nom Cours 1 Owen Maths, Physique 2 Sohan Informatique -
Correction (Passage en 1NF) : On éclate les listes en plusieurs lignes.
ID_Etudiant Nom Cours 1 Owen Maths 1 Owen Physique 2 Martin Informatique
B. La Deuxième Forme Normale (2NF)
Définition : Une relation est en 2NF si :
- Elle est en 1NF.
- Tous les attributs non-clés dépendent de la totalité de la clé primaire (pas seulement d’une partie de celle-ci).
Contexte : Cette règle s’applique principalement aux tables ayant une clé primaire composée (plusieurs colonnes).
Explication : Si la clé est (A, B) et qu’un attribut C dépend uniquement de A, alors la table n’est pas en 2NF (dépendance partielle). On doit sortir C dans une autre table.
Exemple :
Soit la table suivante avec une clé composée (ID_Commande, ID_Produit) :
| ID_Commande | ID_Produit | Quantité | Nom_Produit |
|---|---|---|---|
| 101 | P1 | 2 | Stylo |
| 101 | P2 | 1 | Gomme |
Quantitédépend de(ID_Commande, ID_Produit)→ OK.Nom_Produitdépend uniquement deID_Produit→ Dépendance Partielle.
Correction (Passage en 2NF) : On sépare les infos produit.
- Table
Ligne_Commande(ID_Commande, ID_Produit, Quantité) - Table
Produit(ID_Produit, Nom_Produit)
C. La Troisième Forme Normale (3NF)
Définition : Une relation est en 3NF si :
- Elle est en 2NF.
- Aucun attribut non-clé ne dépend d’un autre attribut non-clé.
Explication : On élimine les dépendances transitives. Schéma : Clé → A → B. Ici, B ne dépend pas directement de la clé, mais transitivement via A. B doit être déplacé.
Exemple :
Table Employé (Clé : ID_Employé) :
| ID_Employé | Nom | Service | Localisation_Service |
|---|---|---|---|
| 1 | Diane | Comptabilité | Baf |
| 2 | Rostand | Ventes | Bafou |
Localisation_Servicedépend deService.Servicedépend deID_Employé.- Donc
Localisation_Servicedépend transitivement deID_Employé. - Problème : Si on supprime l’employé Rostand, on perd l’info que le service Ventes est à Bafou.
Correction (Passage en 3NF) :
- Table
Employé(ID_Employé, Nom, #Service) - Table
Service(Service, Localisation_Service)
III. Exemple Complet de Normalisation (Mise à jour et Corrigé)
Prenons une table brute issue d’un fichier Excel mal structuré. La clé supposée est composée de (CommandeID, ProduitID) car une commande contient plusieurs produits.
Table Initiale (Non Normalisée) :
| CommandeID | Date | ClientID | ClientNom | ClientVille | ProduitID | NomProduit | PrixUnitaire | Quantité |
|---|---|---|---|---|---|---|---|---|
| 101 | 01/01 | C1 | Diane | Baf | P1 | Stylo | 1.50 | 10 |
| 101 | 01/01 | C1 | Diane | Baf | P2 | Gomme | 0.80 | 5 |
| 102 | 02/01 | C2 | Rostand | Bafou | P1 | Stylo | 1.50 | 2 |
Étape 1 : Passage à la 1NF
Analyse : La table est déjà en 1NF car chaque cellule est atomique. Il n’y a pas de listes dans une seule cellule.
Étape 2 : Passage à la 2NF
Analyse : La clé est (CommandeID, ProduitID).
Les dépendances partielles (qui ne dépendent que d’une partie de la clé) sont :
ClientNom,ClientVille,Datene dépendent que deCommandeID.NomProduit,PrixUnitairene dépendent que deProduitID.- Seule
Quantitédépend de la clé complète(CommandeID, ProduitID).
Action : On décompose en 3 tables.
Table A (Détails Commande) :
| CommandeID | ProduitID | Quantité |
|---|---|---|
| 101 | P1 | 10 |
| 101 | P2 | 5 |
| 102 | P1 | 2 |
Table B (Commande - Infos générales) :
| CommandeID | Date | ClientID | ClientNom | ClientVille |
|---|---|---|---|---|
| 101 | 01/01 | C1 | Diane | Baf |
| 102 | 02/01 | C2 | Rostand | Bafou |
Table C (Produits) :
| ProduitID | NomProduit | PrixUnitaire |
|---|---|---|
| P1 | Stylo | 1.50 |
| P2 | Gomme | 0.80 |
Étape 3 : Passage à la 3NF
Analyse : Regardons la Table B.
Les attributs non-clés sont : Date, ClientID, ClientNom, ClientVille.
- Il y a une dépendance transitive :
CommandeID→ClientID→ClientNom,ClientVille. - Les informations sur le client sont redondantes dans la table des commandes et dépendent de
ClientID, pas directement deCommandeID.
Action : On extrait les informations clients dans une table séparée.
Résultat Final (Modèle en 3NF) :
-
Table Clients :
- Clé primaire :
ClientIDClientID ClientNom ClientVille C1 Diane Baf C2 Rostand Bafou
- Clé primaire :
-
Table Commandes :
- Clé primaire :
CommandeID - Clé étrangère :
ClientIDCommandeID Date ClientID 101 01/01 C1 102 02/01 C2
- Clé primaire :
-
Table Produits :
- Clé primaire :
ProduitIDProduitID NomProduit PrixUnitaire P1 Stylo 1.50 P2 Gomme 0.80
- Clé primaire :
-
Table Ligne_Commande (Détails) :
- Clé primaire composée :
(CommandeID, ProduitID)CommandeID ProduitID Quantité 101 P1 10 101 P2 5 102 P1 2
- Clé primaire composée :
Conclusion : Le modèle est maintenant optimal. Les données clients et produits ne sont plus redondantes, et une modification d’adresse client se fait en un seul endroit.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur Cours Détaillé : Algorithmes de Normalisation et Formes Normales. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.