CodeGym /Cours /SQL SELF /Principes de la deuxième forme normale (2NF)

Principes de la deuxième forme normale (2NF)

SQL SELF
Niveau 25 , Leçon 2
Disponible

Une table est considérée comme étant en deuxième forme normale si :

  1. Elle est déjà en première forme normale (1NF).
  2. 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_id et course_id ensemble forment la clé primaire composite.
  • Mais regarde bien les colonnes course_name et instructor_name. Elles dépendent seulement de course_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 :

  1. Trouver les dépendances qui violent la 2NF.
  2. 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 !

2
Mission
SQL SELF, niveau 25, leçon 2
Bloqué
Mise en conformité de la table avec la 2NF
Mise en conformité de la table avec la 2NF
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION