Cursus
Imaginez que vous travaillez 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 désastre potentiel, avec des risques d'erreurs et d'incohérences. La troisième forme normale (3NF) est une méthode éprouvée de normalisation des bases de données qui permet d'éviter ce chaos. La mise en œuvre de la 3NF nettoie votre structure de données, en veillant à ce qu'elle soit efficace, organisée et exempte de redondances inutiles.
Dans cet article, nous verrons comment fonctionne la 3NF, pourquoi elle est utile et comment vous pouvez la mettre en pratique. Nous comparerons également la 3NF à d'autres formes et apprendrons quand utiliser chacune d'entre elles. Tout le monde peut tirer profit d'une meilleure connaissance de ces structures, mais cette connaissance est particulièrement précieuse si vous êtes un concepteur de base de données ou un scientifique des données, car elle peut considérablement simplifier votre travail et assurer la fiabilité de vos bases de données. Si vous êtes intéressé par la conception de bases de données dans son ensemble, jetez un coup d'œil à notre cours complet sur la 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 indésirables. La 3NF s'appuie sur la première forme normale (1NF) et la deuxième forme normale (2NF), c'est-à-dire 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 dans laquelle les attributs non clés dépendent indirectement de la clé primaire.
En se concentrant sur ce point, la 3NF garantit que chaque colonne non clé d'un tableau est directement liée à la clé primaire et à rien d'autre. Plus concrètement, la 3NF permet de minimiser la redondance et d'é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. Quelques années plus tard, une reformulation de Carlo Zaniolo a permis d'expliquer plus clairement la différence entre la 3NF "classique" et la forme normale de Boyce-Codd (BCNF), plus restrictive. Ne vous préoccupez pas trop du BCNF pour l'instant, nous y reviendrons plus loin.
Comprendre les conditions de la troisième forme normale
Alors, que faut-il faire exactement pour atteindre le niveau 3NF ? Pour qu'un tableau soit éligible, il doit remplir quelques conditions :
- Être dans 2NF: Cela signifie qu'il est déjà atomique, sans groupes répétitifs et sans dépendances partielles sur des clés composites.
La 3NF comprend la 2NF et la 1NF. Image par l'auteur
- Aucune dépendance transitive: Cette règle est essentielle. Dans un tableau 3NF, toute colonne sans clé primaire doit dépendre uniquement de la clé primaire, et non indirectement par l'intermédiaire d'une autre colonne sans clé.
Voyons ce que cela signifie concrètement.
Décomposition des tableaux pour obtenir la fonction 3NF
Passons en revue le processus de décomposition des tableaux pour atteindre la 3NF. Nous utiliserons quelques exemples de données issues des cours de DataCamp pour illustrer chaque étape.
Étape 1 : Identifier les dépendances transitives
Pour commencer, nous allons rechercher tous les attributs d'un tableau qui dépendent indirectement de la clé primaire. En règle générale, si un attribut dépend d'un élément autre que la clé primaire, cela indique unedépendance transitive . C'est le signe qu'il est peut-être temps de séparer votre tableau.
Consultez les trois tableaux ci-dessous. Lequel a une dépendance transitive ?
Tableau 1 : Cours
ID du cours | Nom du cours | Difficulté |
---|---|---|
201 | Principes fondamentaux de SQL | Débutant |
202 | Introduction à Python | Débutant |
203 | Comprendre la science des données | Intermédiaire |
Tableau 2 : Instructeur
ID de l'instructeur | Nom de l'instructeur | Expertise |
---|---|---|
1 | Sarah Johnson | Science des données |
2 | Tom Williams | Apprentissage automatique |
3 | Emily Brown | Python |
Tableau 3 : Inscriptions
ID d'inscription | Nom de l'élève | ID du cours | Nom du cours |
---|---|---|---|
1001 | Alice Smith | 201 | Principes fondamentaux de SQL |
1002 | Bob Green | 202 | Introduction à Python |
1003 | Charlie Blue | 201 | Principes fondamentaux de SQL |
La réponse est... Tableau 3!
Dans ce tableau, le nom du cours dépend de l'ID du cours, mais pas directement de l'ID de l'inscription (la clé primaire). Cette dépendance indirecte fait de Course Name une dépendance transitive.
Étape 2 : Séparer les données dans de nouveaux tableaux
Pour traiter la dépendance transitive, nous allons diviser le tableau 1 en deux tableaux. Chaque tableau se concentrera sur les données directement dépendantes.
Tableau des inscriptions révisé
ID d'inscription | Nom de l'élève | ID du cours |
---|---|---|
1001 | Alice Smith | 201 |
1002 | Bob Green | 202 |
1003 | Charlie Blue | 201 |
Tableau des cours
ID du cours | Nom du cours |
---|---|
201 | Principes fondamentaux de SQL |
202 | Introduction à Python |
Désormais, chaque tableau ne contient que les informations qui dépendent directement de sa clé primaire : ID du cours est désormais la clé primaire de Nom du cours dans la base de données cours et l'identifiant d'inscription ( ID d'inscription est la clé primaire de la table inscriptions tableau.
Grâce à cette décomposition, les tableaux répondent désormais aux exigences de la 3NF, ce qui permet d'éliminer les redondances et de s'assurer que chaque tableau ne stocke que les informations directement pertinentes.
Si vous souhaitez mettre la main à la pâte et créer vos propres bases de données, jetez un coup d'œil à notre cours sur la création de bases de données PostgreSQL. Si vous êtes un peu plus avancé, vous pouvez essayer Introduction à la modélisation des données dans Snowflake, qui couvre des idées telles que 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 tous ces efforts pour atteindre la 3NF ? Voici les principaux avantages :
- Amélioration de l'intégrité des données: En éliminant les dépendances transitives, la 3NF permet de s'assurer que les mises à jour et les suppressions n'entraînent pas de conflits ou de données obsolètes entre les tableaux.
- Redondance réduite: Moins de redondance signifie que votre base de données est plus facile à maintenir et que l'utilisation de l'espace de stockage est réduite.
- Simplification de la maintenance des données: Le fait de conserver des informations similaires dans des tableaux spécifiques facilite la mise à jour des enregistrements sans avoir à rechercher des entrées redondantes.
Cela dit, si les structures 3NF favorisent la précision des données, elles peuvent également conduire à des données plus segmentées, ce qui ralentit parfois les requêtes complexes en raison des jointures de tableaux supplémentaires. Dans les cas où le besoin de rapidité l'emporte sur le besoin de normalisation, BCNF ou 4NF peuvent être des options plus pratiques.
Comparaison : Première, deuxième, troisième et BC formes normales
Examinons les différences de forme.
Tableau de comparaison : première, deuxième et troisième formes normales
Voici un tableau comparatif pour vous aider à comprendre les exigences de la 1NF, de la 2NF et de la 3NF.
Fonctionnalité | 1NF | 2NF | 3NF |
---|---|---|---|
Données atomiques | ✅ | ✅ | ✅ |
Pas de dépendances partielles | ❌ | ✅ | ✅ |
Pas de dépendances transitives | ❌ | ❌ | ✅ |
Troisième forme normale vs. Forme normale de Boyce-Codd (BCNF)
La BCNF est une forme "plus stricte" de la 3NF qui élimine encore davantage les anomalies liées au chevauchement des clés candidates. Elle peut être particulièrement utile dans les cas complexes où la 3NF seule ne permet pas d'éliminer complètement les dépendances. La BCNF s'applique lorsqu'un attribut non premier dépend d'un attribut faisant partie d'une clé candidate composite. Je sais que cela peut paraître complexe, alors prenons un exemple.
Structure actuelle (en 3NF)
Après décomposition pour obtenir 3NF, nous avions ces deux tableaux :
Tableau des inscriptions
ID d'inscription | Nom de l'élève | ID du cours |
---|---|---|
1001 | Alice Smith | 201 |
1002 | Bob Green | 202 |
1003 | Charlie Blue | 201 |
Tableau des cours
ID du cours | Nom du cours |
---|---|
201 | Principes fondamentaux de SQL |
202 | Introduction à Python |
Dans cette structure, chaque tableau est en 3NF, sans dépendances transitives, et les données sont normalisées de manière appropriée.
Introduire une nouvelle exigence
Ajoutons maintenant un nouvel attribut aux cours: la salle de classe dans laquelle se déroule chaque cours. Ce nouvel attribut pourrait donner lieu à un scénario nécessitant l'utilisation de la BCNF.
Tableau des cours mis à jour (3NF)
ID du cours | Nom du cours | Salle de classe |
---|---|---|
201 | Principes fondamentaux de SQL | Salle 101 |
202 | Introduction à Python | Salle 102 |
203 | Comprendre la science des données | Salle 101 |
Ici, l'identifiant 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 seule matière à la fois. Supposons également que lenom du cours "SQL Fundamentals" puisse être proposé sous différents ID de cours (comme 201, 204, etc.), s'ils sont programmés à des moments différents. Dans ce cas, chaque offre de "SQL Fundamentals" aurait toujours lieu dans la "salle 101", indépendamment de l'ID de cours spécifique . Par conséquent, Course Name détermine également la salle de classe de manière unique .
Cela signifie que nous avons maintenant deux clés candidates :
- ID du cours
- Nom du cours
Avec les deux clés candidates, nous sommes confrontés à un problème que la méthode 3NF n'aborde pas : Salle de classe dépend de Nom du cours plutôt que de l ID du cours.
Application du BCNF
Pour éliminer ce problème de dépendance, nous devrons décomposer davantage l'élément Cours en deux tableaux distincts, mieux adaptés à la norme BCNF :
- A nouveau Cours qui ne contient que le tableau ID du cours et nom du cours.
- A CourseDetails qui contient les tableaux suivants nom du cours et salle de classe et la salle de classe.
Voici à quoi cela ressemble :
Tableau des cours révisé (BCNF)
ID du cours | Nom du cours |
---|---|
201 | Principes fondamentaux de SQL |
202 | Introduction à Python |
203 | Comprendre la science des données |
Tableau CourseDetails (BCNF)
Nom du cours | Salle de classe |
---|---|
Principes fondamentaux de SQL | Salle 101 |
Introduction à Python | Salle 102 |
Comprendre la science des données | Salle 101 |
Avec cette nouvelle structure, chaque tableau satisfait aux conditions de la BCNF :
- Dans les Cours tableau, ID cours est la clé primaire et tous les attributs dépendent uniquement d'elle.
- Dans l'espace Détails du cours tableau, Nom du cours est la clé primaire, et Salle de classe ne dépend que de Nom du cours.
Cette configuration élimine tout problème de dépendance causé par le chevauchement des clés des candidats, garantissant ainsi 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 souhaitent conserver des données propres, cohérentes et exemptes de dépendances problématiques. Avec 3NF, l'intégrité des données est améliorée, ce qui facilite la gestion et réduit la redondance. Rappelez-vous que si la 3NF fonctionne bien dans la plupart des situations, les bases de données plus complexes peuvent bénéficier de formes supplémentaires telles que la BCNF ou la 4NF.
Si cet article vous a été utile, envisagez de passer à l'étape suivante en obtenant notre certification SQL Associate. C'est un excellent moyen de valider vos compétences en SQL et en gestion de bases de données et de démontrer votre expertise à des employeurs potentiels !
Questions fréquemment posées sur la troisième forme normale
La 3NF peut-elle s'appliquer à tous les types de bases de données ?
Si la 3NF est efficace dans les bases de données relationnelles, elle n'est pas toujours nécessaire pour les bases de données NoSQL, qui privilégient souvent la flexibilité et l'évolutivité à une normalisation stricte. Dans certains cas, un schéma dénormalisé peut être préféré pour des raisons de performance, en particulier lors de l'interrogation rapide de grandes quantités de données.
Quels sont les inconvénients de suivre strictement la 3NF ?
Le respect strict de la 3NF peut parfois conduire à des schémas complexes comportant de nombreux tableaux, ce qui peut nécessiter des jointures multiples dans les requêtes. Cela peut nuire aux performances, en particulier dans les grandes bases de données ou les systèmes à fort volume de transactions. Dans ce cas, d'autres approches telles que la dénormalisation ou l'utilisation de la BCNF peuvent être plus pratiques.
La 3NF peut-elle être appliquée à des bases de données existantes, ou dois-je les redéfinir ?
La 3NF peut tout à fait être appliquée aux bases de données existantes, bien qu'elle puisse nécessiter une restructuration importante. Ce processus, appelé refonte de la base de données, consiste à décomposer les tableaux afin d'éliminer les redondances et les dépendances. En fonction de la taille et de la complexité de la base de données, cela peut nécessiter une certaine planification et des tests afin de garantir l'intégrité des données et les performances du système.
Quels outils ou techniques peuvent aider à automatiser le processus de réalisation de la 3NF ?
Il existe plusieurs outils de conception de base de données, tels que MySQL Workbench, Oracle SQL Developer et ER/Studio, qui permettent de visualiser le schéma de la base de données et d'identifier les problèmes de normalisation. Certains de ces outils peuvent suggérer ou automatiser des étapes pour atteindre la 3NF, bien que la supervision humaine reste importante pour garantir l'intégrité et la cohérence des données.
Quelle est la différence entre une clé candidate et une clé primaire ?
Une clé candidate est un ensemble minimal d'attributs permettant d'identifier de manière unique chaque ligne d'un tableau. Il peut y avoir plusieurs clés candidates dans un tableau. Une clé primaire, en revanche, est la clé candidate spécifique choisie par le concepteur de la base de données pour identifier les lignes de manière unique. Une seule clé primaire est autorisée par tableau, et elle ne peut pas avoir de valeurs NULL.
Pourquoi avons-nous besoin de la forme normale de Boyce-Codd (BCNF) si un tableau est déjà en troisième forme normale (3NF) ?
La BCNF est plus stricte que la 3NF et traite les cas où il existe des dépendances sur les clés candidates. Bien que la 3NF supprime les dépendances transitives, elle peut encore autoriser la redondance si une dépendance fonctionnelle a un déterminant qui n'est pas une superclé. La BCNF élimine ce problème en s'assurant que toutes les dépendances fonctionnelles ont une superclé sur le côté gauche.
Un tableau peut-il avoir plus d'une clé candidate ?
Oui, un tableau peut avoir plusieurs clés candidates. Chaque clé candidate est un ensemble unique et minimal d'attributs permettant d'identifier les lignes.