Une table est considérée comme étant en deuxième forme normale si :
- Elle est déjà en première forme normale (1NF).
- Chaque colonne non-clé dépend de toute la clé primaire, et pas seulement d'une partie de la clé.
Si la clé primaire est composée de plusieurs champs (clé composite), alors aucun des attributs non-clés (colonnes) ne doit dépendre uniquement d'une partie de cette clé. En d'autres termes, la 2NF élimine les dépendances partielles.
Exemple de violation de la 2NF
Imaginons qu'on ait une table student_courses (Étudiants et Cours), qui stocke des infos sur les étudiants, leurs cours et les profs :
| student_id | course_id | course_name | instructor_name |
|---|---|---|---|
| 1 | 101 | Mathématiques | Lin |
| 1 | 102 | Littérature | Song |
| 2 | 101 | Mathématiques | Lin |
student_idetcourse_idensemble forment la clé primaire composite.- Mais regarde bien les colonnes
course_nameetinstructor_name. Elles dépendent seulement decourse_id, pas de tout le couple (student_id,course_id).
Voilà, c'est une dépendance partielle ! course_name et instructor_name dépendent seulement d'une partie de la clé composite (course_id). C'est une violation des principes de la 2NF.
Mettre la table en 2NF
Notre mission — éliminer la dépendance partielle, en divisant la table en deux. Ça va nous débarrasser de la redondance et améliorer la cohérence des données.
On extrait les infos sur les cours dans une table séparée courses :
| course_id | course_name | instructor_name |
|---|---|---|
| 101 | Mathématiques | Lin |
| 102 | Littérature | Song |
La table principale devient :
| student_id | course_id |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
Maintenant, chaque colonne dépend de toute la clé primaire. On a séparé les données pour que tout soit logiquement lié, et on a éliminé la violation de la 2NF.
La magie de l'élimination de la redondance
Regarde la table avant la normalisation. Dans la colonne instructor_name, le nom "Lin" se répète. Et imagine combien de répétitions il pourrait y avoir dans une vraie base avec des milliers d'enregistrements ! En séparant les tables, on a supprimé la redondance et réduit le risque d'erreurs, genre des fautes de frappe ("Lin" vs "Ling").
Exemple de la vraie vie
Imagine que tu gères les commandes de produits. Tu as la table suivante order_items (commandes et articles), où order_id et item_id forment la clé primaire :
| order_id | item_id | item_name | price |
|---|---|---|---|
| 1 | 101 | Ordinateur portable | 50000 |
| 1 | 102 | Souris | 1000 |
| 2 | 101 | Ordinateur portable | 50000 |
Comme tu vois, les prix et les noms des articles se répètent. C'est un signe de violation de la 2NF, parce que item_name et price dépendent seulement de item_id.
Pour mettre la table en 2NF, on crée une table items :
| item_id | item_name | price |
|---|---|---|
| 101 | Ordinateur portable | 50000 |
| 102 | Souris | 1000 |
Et on modifie la table order_items, en gardant seulement les identifiants de commande et d'article :
| order_id | item_id |
|---|---|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
Maintenant les données sont clean comme du code après un code review — plus aucune redondance.
Exercice pratique : à toi de jouer !
Supposons que tu as une table employee_projects, qui contient des infos sur les employés, leurs projets et les managers des projets :
| employee_id | project_id | project_name | manager_name |
|---|---|---|---|
| 1 | 201 | CRM Upgrade | Lin |
| 2 | 202 | Website Revamp | Ming |
| 1 | 202 | Website Revamp | Ming |
Essaie de :
- Trouver les dépendances qui violent la 2NF.
- Diviser la table en deux pour corriger la violation.
Pourquoi c'est important de respecter la 2NF ?
Pourquoi se prendre la tête avec la deuxième forme normale (2NF) ? Simple : pour éviter les doublons et la confusion dans les données. Quand tu vires les dépendances partielles, tes tables sont plus propres — sans infos qui se répètent, comme le même nom de prof à chaque ligne. Ça économise de la place et ça évite les incohérences : tu mets à jour un nom à un endroit — et hop, tout est à jour partout.
En plus, écrire des requêtes sur une base comme ça, c'est plus simple : quand la structure est logique et que les données ne sont pas éparpillées dans plein de lignes, le filtrage et le groupement sont plus rapides et fiables. Oui, ça demande parfois des requêtes SQL un peu plus costaudes avec des JOIN, parce qu'il y a plus de tables. Mais franchement, mieux vaut un JOIN que cent lignes avec les mêmes noms de famille. Dans la plupart des cas, la normalisation vaut le coup.
Intégration dans des projets réels
Connaître la 2NF te servira :
- Quand tu conçois une base de données : pour éviter le chaos dans tes tables.
- En entretien : on te demande souvent d'expliquer ou de normaliser des tables.
- Au boulot : quand on te confie l'optimisation d'une base existante, en cassant des tables "monolithiques" en tables normalisées.
La deuxième forme normale (2NF) aide à éliminer les dépendances partielles dans une table où la clé primaire est composite. On découpe les tables en blocs logiques pour que chaque colonne dépende uniquement de toute la clé, pas d'une partie. Ça améliore la qualité de la base, élimine la redondance et la rend plus flexible. Prêt·e pour la troisième forme normale ? On continue !
GO TO FULL VERSION