La normalisation est un processus de conception qui organise les données pour éliminer la redondance et éviter les anomalies lors des mises à jour. Elle se fait par étapes appelées "formes normales".
Normalization is a design process that organizes data to eliminate redundancy and avoid anomalies during updates. It proceeds in stages called "normal forms".
Le problème que la normalisation résout
The Problem Normalization Solves
Une table mal conçue répète les mêmes informations sur plusieurs lignes, ce qui crée trois types d'anomalies : d'insertion, de mise à jour et de suppression.
A poorly designed table repeats the same information across multiple rows, which creates three types of anomalies: insertion, update, and deletion anomalies.
-- Table non normalisée : le nom du client est répété à chaque commande
commande_id | client_nom | client_courriel | produit
1 | Marie Roy | marie@exemple.com | Clavier
2 | Marie Roy | marie@exemple.com | Souris
-- Unnormalized table: the customer name repeats on every order
order_id | customer_name | customer_email | product
1 | Mary Ross | mary@example.com | Keyboard
2 | Mary Ross | mary@example.com | Mouse
Si le courriel de Marie change, il faut le mettre à jour sur toutes ses lignes de commande — sinon les données deviennent incohérentes.
If Mary's email changes, it has to be updated on every one of her order rows — otherwise the data becomes inconsistent.
1NF : la première forme normale
1NF: First Normal Form
Chaque colonne doit contenir une seule valeur atomique (pas de listes ni de valeurs multiples dans une même cellule), et chaque ligne doit être identifiable de façon unique.
Every column must hold a single atomic value (no lists or multiple values in one cell), and every row must be uniquely identifiable.
2NF : la deuxième forme normale
2NF: Second Normal Form
En plus de respecter la 1NF, chaque colonne non-clé doit dépendre de la totalité de la clé primaire — pertinent surtout pour les tables à clé composée.
In addition to satisfying 1NF, every non-key column must depend on the entire primary key — mainly relevant for tables with a composite key.
3NF : la troisième forme normale
3NF: Third Normal Form
En plus de la 2NF, aucune colonne non-clé ne doit dépendre d'une autre colonne non-clé (pas de dépendance transitive). C'est le niveau visé par la plupart des bases de données transactionnelles.
In addition to 2NF, no non-key column may depend on another non-key column (no transitive dependency). This is the level most transactional databases aim for.
-- Version normalisée (3NF) : deux tables séparées
CREATE TABLE clients (
id INT PRIMARY KEY,
nom VARCHAR(100),
courriel VARCHAR(100)
);
CREATE TABLE commandes (
id INT PRIMARY KEY,
client_id INT REFERENCES clients(id),
produit VARCHAR(100)
);
-- Normalized version (3NF): two separate tables
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT REFERENCES customers(id),
product VARCHAR(100)
);
| Forme | Exigence principale |
|---|---|
| 1NF | Valeurs atomiques, pas de colonnes répétées |
| 2NF | Dépendance envers la clé primaire complète |
| 3NF | Aucune dépendance transitive entre colonnes non-clés |
| Form | Main Requirement |
|---|---|
| 1NF | Atomic values, no repeating columns |
| 2NF | Dependency on the full primary key |
| 3NF | No transitive dependency between non-key columns |
Points clés à retenir
Key Takeaways
- La normalisation vise avant tout à éliminer la redondance et les anomalies de mise à jour
- La 3NF est un bon objectif par défaut pour la plupart des systèmes transactionnels
- Dénormaliser volontairement peut être justifié pour la performance, mais doit rester un choix conscient, pas un oubli de conception
- Normalization's main goal is eliminating redundancy and update anomalies
- 3NF is a good default target for most transactional systems
- Deliberately denormalizing can be justified for performance, but should be a conscious choice, not a design oversight
