- 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.
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
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 :
- ID du cours
- 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:
- Une nouvelle table des Cours, qui inclut uniquement l’ ID du Cours et le Nom du Cours.
- 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 |
- 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!