Qu’est-ce que la Troisième Forme Normale (3NF) ?

Imaginez travailler avec une base de données massive et non structurée remplie d’informations répétées et redondantes. Chaque mise à jour ou suppression devient un potentiel désastre, risquant des erreurs et des incohérences. La troisième forme normale (3NF) est une méthode éprouvée de normalisation de base de données pour éviter ce chaos. L’implémentation de la 3NF nettoie votre structure de données, garantissant qu’elle est efficace, organisée et exempte de redondances inutiles.

Dans cet article, nous explorerons comment fonctionne la 3NF, pourquoi elle est précieuse et comment vous pouvez la mettre en pratique. Nous comparerons également la 3NF à d’autres formes et apprendrons quand utiliser chacune. Tout le monde peut bénéficier d’un meilleur apprentissage de ces structures, mais cette connaissance est particulièrement précieuse si vous êtes concepteur de bases de données ou scientifique des données, car elle peut simplifier considérablement votre travail et maintenir vos bases de données fiables. Si vous vous intéressez à la conception de bases de données dans son ensemble, jetez un œil à notre cours complet Conception de Bases de Données.

Définition de la Troisième Forme Normale (3NF)

La troisième forme normale est un concept clé de la normalisation des bases de données qui supprime les dépendances non désirées. La 3NF s’appuie sur la première forme normale (1NF) et la deuxième forme normale (2NF), ce qui signifie qu’elle hérite de leurs règles : la 1NF exige des valeurs atomiques (indivisibles) dans chaque cellule, et la 2NF supprime les dépendances partielles sur une clé primaire composite. La 3NF va plus loin en supprimant les dépendances transitives, une situation où les attributs non clés dépendent indirectement de la clé primaire.

En se concentrant sur cela, la 3NF garantit que chaque colonne non clé dans une table est directement liée à la clé primaire et à rien d’autre. En termes plus pratiques, la 3NF aide à minimiser la redondance et à éviter les anomalies lors de l’insertion, de la mise à jour ou de la suppression de données.

Dans les années 1970, Edgar F. Codd a introduit la 3NF pour formaliser les conditions permettant d’obtenir une structure de base de données entièrement normalisée. Une reformulation par Carlo Zaniolo quelques années plus tard a fourni une explication plus claire de la différence entre la 3NF « classique » et la forme normale de Boyce-Codd plus restrictive (BCNF). Ne vous inquiétez pas trop pour le BCNF pour l’instant, nous y reviendrons plus loin.

Comprendre les conditions de la troisième forme normale

Alors, que faut-il exactement pour atteindre la 3NF ? Pour qu’une table soit qualifiée, elle doit répondre à quelques conditions :

  • Être en 2NF: Cela signifie qu’elle est déjà atomique, sans groupes répétitifs et sans dépendances partielles sur des clés composites.

La 3NF inclut la 2NF et la 1NF. Image par l’Auteur

  • Pas de dépendances transitives: Cette règle est essentielle. Dans une table en 3NF, toute colonne qui n’est pas clé primaire doit dépendre uniquement de la clé primaire, et non indirectement par une autre colonne non clé.

Examinons ce que cela signifie concrètement.

Décomposition des tables pour atteindre la 3NF

Passons en revue le processus de décomposition des tables pour atteindre la 3NF. Nous utiliserons des exemples de données provenant des cours DataCamp pour illustrer chaque étape.

Étape 1 : Identifier les dépendances transitives

Pour commencer, nous allons rechercher des attributs dans une table qui dépendent indirectement de la clé primaire. En règle générale, si un attribut dépend de quelque chose d’autre que la clé primaire, cela indique une dépendance transitive. C’est un signe qu’il pourrait être temps de diviser votre table.

Jetez un œil aux trois tables ci-dessous. Laquelle a une dépendance transitive ?

Table 1 : Cours

Course ID Course Name Difficulty
201 Fondamentaux SQL Débutant
202 Introduction à Python Débutant
203 Comprendre la science des données Intermédiaire

Table 2 : Instructeur

Instructor ID Instructor Name Expertise
1 Sarah Johnson Science des données
2 Tom Williams Apprentissage automatique
3 Emily Brown Python

Tableau 3 : Inscriptions

Enrollment ID Student Name Course ID Course Name
1001 Alice Smith 201 Principes de SQL
1002 Bob Green 202 Introduction à Python
1003 Charlie Blue 201 Principes de SQL

La réponse est… Tableau 3!

Dans ce tableau, Nom du cours dépend de ID du cours, mais pas directement de ID d’inscription (la clé primaire). Cette dépendance indirecte fait de Nom du cours une dépendance transitive.

Étape 2 : Séparer les données en nouvelles tables

Pour résoudre la dépendance transitive, nous allons diviser la Table 1 en deux tables. Chaque table se concentrera sur des données directement dépendantes.

Table des inscriptions révisée

Enrollment ID Student Name Course ID
1001 Alice Smith 201
1002 Bob Green 202
1003 Charlie Blue 201

Table des cours

Course ID Course Name
201 Fondamentaux de SQL
202 Introduction à Python

Maintenant, chaque table contient uniquement des informations qui dépendent directement de sa clé primaire : ID du cours est maintenant la clé primaire pour Nom du cours dans la table des cours, et ID d’inscription est la clé primaire dans la table des inscriptions.

Avec cette décomposition, les tables répondent désormais aux exigences de la 3NF, éliminant la redondance et garantissant que chaque table ne stocke que des informations directement pertinentes.

Si vous souhaitez vous lancer et créer vos propres bases de données, jetez un œil à notre Création de bases de données PostgreSQL. Si vous êtes un peu plus avancé, vous pourriez essayer Introduction à la modélisation des données dans Snowflake, qui couvre des idées comme la modélisation entité-relation et la modélisation dimensionnelle.

Avantages et limites de l’utilisation de la troisième forme normale

Alors, pourquoi faire tout cet effort pour atteindre la 3NF ? Voici les principaux avantages :

  • Intégrité des données améliorée: En éliminant les dépendances transitives, la 3NF aide à garantir que les mises à jour et les suppressions ne conduisent pas à des données conflictuelles ou obsolètes à travers les tables.
  • Réduction de la redondance: Moins de redondance signifie que votre base de données est plus facile à maintenir et que l’utilisation de stockage est réduite.
  • Maintenance des données simplifiée: Le fait de conserver des informations similaires dans des tables dédiées facilite la mise à jour des enregistrements sans avoir à rechercher des entrées redondantes.

Cela dit, bien que les structures en 3NF soutiennent la précision des données, elles peuvent également conduire à des données plus segmentées, rendant parfois les requêtes complexes plus lentes en raison des joints de table supplémentaires. Dans les cas où le besoin de vitesse prime sur le besoin de normalisation, le BCNF ou le 4NF peuvent être des options plus pratiques.

Comparaison : Première, Deuxième, Troisième et Formes Normales de Boyce-Codd

Jetons un coup d’œil aux différences de forme.

Tableau de comparaison : premières, deuxièmes et troisièmes formes normales

Voici un tableau de comparaison pour vous aider à comprendre les exigences de la 1NF, 2NF et 3NF.

Feature 1NF 2NF 3NF
Données atomiques
Pas de dépendances partielles
Pas de dépendances transitives

Forme normale de Boyce-Codd (BCNF) vs. Troisième forme normale

BCNF est une forme « plus stricte » de la 3NF qui élimine davantage les anomalies qui surviennent avec des clés candidates chevauchantes. Elle peut être particulièrement utile dans des cas complexes où la 3NF seule n’élimine pas complètement les dépendances. BCNF s’applique lorsqu’un attribut non-primaire dépend d’un attribut qui fait partie d’une clé candidate composite. Je sais que cela semble complexe, alors décomposons cela avec un exemple.

Structure actuelle (en 3NF)

Après décomposition pour atteindre la 3NF, nous avions ces deux tables :

Table des inscriptions

Enrollment ID Student Name Course ID
1001 Alice Smith 201
1002 Bob Green 202
1003 Charlie Blue 201

Table des cours

Course ID Course Name
201 Fondamentaux de SQL
202 Introduction à Python

Dans cette structure, chaque table est en 3NF sans dépendances transitives, et les données sont correctement normalisées.

Introduction d’une nouvelle exigence

Maintenant, ajoutons un nouvel attribut à Cours: la Salle de classe dans laquelle chaque cours se déroule. Ce nouvel attribut pourrait entraîner un scénario nécessitant la BCNF.

Table des cours mise à jour (3NF)

Course ID Course Name Classroom
201 Fondamentaux de SQL Salle 101
202 Introduction à Python Salle 102
203 Comprendre la Science des Données Salle 101

Ici, ID du Cours est toujours la clé primaire, et tous les autres attributs en dépendent directement. Mais supposons qu’il y ait une nouvelle règle selon laquelle chaque salle de classe ne peut accueillir qu’une matière à la fois. Supposons également que le Nom du Cours « Fondamentaux de SQL » pourrait être offert sous différents IDs de Cours (comme 201, 204, etc.), s’ils étaient programmés à différents moments. Dans ce cas, chaque offre de « Fondamentaux de SQL » aurait toujours lieu dans la « Salle 101 », quel que soit le ID du Cours. Par conséquent, le Nom du Cours détermine également de manière unique la Salle de Classe.

Cela signifie que nous avons maintenant deux clés candidates :

  1. ID du cours
  2. Nom du cours

Avec les deux clés candidates, nous avons maintenant un problème que la 3NF ne traite pas : Salle de classe dépend de Nom du cours plutôt que juste ID du cours.

Application de la BCNF

Pour éliminer ce problème de dépendance, nous devrons décomposer davantage la Cours table en deux tables distinctes qui correspondent mieux à la BCNF:

  1. Une nouvelle table des Cours, qui inclut uniquement l’ ID du Cours et le Nom du Cours.
  2. Une table CourseDetails, qui stocke l’intitulé du cours et l’association de la salle de classe.

Voici à quoi cela ressemble :

Tableau des cours révisé (BCNF)

Tableau des détails des cours (BCNF)

Course Name Classroom
Fondements SQL Salle 101
Introduction à Python Salle 102
Compréhension de la science des données Salle 101

Avec cette nouvelle structure, chaque table satisfait les conditions de BCNF :

  • Dans la table Cours, l’identifiant du cours est la clé primaire, et tous les attributs en dépendent uniquement.
  • Dans la table CourseDetails, le nom du cours est la clé primaire, et la salle de classe dépend uniquement du nom du cours.

Ce paramétrage supprime tout problème de dépendance causé par des clés candidates qui se chevauchent, assurant une structure strictement normalisée.

Conclusion

La troisième forme normale est un outil précieux pour les concepteurs de bases de données qui visent à maintenir des données propres, cohérentes et exemptes de dépendances problématiques. Avec la 3NF, l’intégrité des données est améliorée, rendant la gestion plus fluide et réduisant la redondance. N’oubliez pas que, bien que la 3NF fonctionne bien dans la plupart des situations, des bases de données plus complexes pourraient bénéficier de formes supplémentaires comme BCNF ou 4NF.

Si vous avez trouvé cet article utile, envisagez de franchir une étape supplémentaire en obtenant notre Certification Associé SQL. C’est un excellent moyen de valider vos compétences en SQL et en gestion de base de données et de démontrer votre expertise à d’éventuels employeurs!

Source:
https://www.datacamp.com/tutorial/third-normal-form