Skip to main content

Comment convertir une base de données en troisième forme normale (3NF)

Thorium Disadvantages (Avril 2024)

Thorium Disadvantages (Avril 2024)
Anonim

La troisième forme normale (3NF) est un principe de base de données qui prend en charge l'intégrité des données en s'appuyant sur les principes de normalisation de la base de données fournis par la première forme normale (1NF) et la deuxième forme normale (2NF).

Troisième condition de forme normale

Une base de données doit avoir la troisième forme normale:

  • La base de données doit déjà répondre aux exigences de 1NF et 2NF.
  • Toutes les colonnes de la base de données doivent dépendre de la clé primaire, ce qui signifie que toute valeur de colonne ne peut être dérivée que de la clé primaire.

À propos de la dépendance à la clé primaire

Explorons plus avant ce que nous entendons par le fait que toutes les colonnes doivent dépendre de la clé primaire.

Si la valeur d'une colonne peut être dérivée à la fois de la clé primaire et d'une autre colonne de la table, elle viole 3NF. Considérez une table Employees avec ces colonnes:

  • ID employé
  • Prénom
  • Nom de famille

LastName et FirstName dépendent-ils uniquement de la valeur de EmployeeID? Eh bien, LastName peut-il dépendre de FirstName? Non, car rien d’inhérent à LastName ne suggère la valeur de FirstName. FirstName pourrait-il dépendre de LastName? Non plus, car la même chose est vraie: quel que soit le nom d'un dernier nom, il ne peut fournir d'indication sur la valeur de son prénom. Par conséquent, cette table est conforme à la norme 3NF.

Mais considérons ce tableau véhicules:

  • VehicleID
  • Fabricant
  • Modèle

Le fabricant et le modèle peuvent provenir de VehicleID - mais le modèle peut également provenir du fabricant car un modèle de véhicule est fabriqué uniquement par un fabricant particulier. Cette conception de table n'est pas conforme à la norme 3NF et pourrait donc entraîner des anomalies de données. Par exemple, vous pouvez mettre à jour le fabricant sans mettre à jour le modèle et introduire des inexactitudes.

Pour la rendre conforme, nous devrions déplacer la colonne dépendante supplémentaire dans une autre table et la référencer à l'aide d'une clé étrangère. Cela donnerait deux tables:

Tableau des véhicules

Dans le tableau ci-dessous, le ModelID est une clé étrangère à la Des modèles table:

  • VehicleID
  • Fabricant
  • ModelID

Tableau des modèles

Ce nouveau tableau mappe les modèles aux fabricants. Si vous souhaitez mettre à jour des informations sur un véhicule spécifiques à un modèle, vous le feriez dans ce tableau plutôt que dans le tableau Véhicules.

  • ModelID
  • Fabricant
  • Modèle

Champs dérivés dans le modèle 3NF

Une table peut contenir un champ dérivé, calculé à partir des autres colonnes de la table. Par exemple, considérons ce tableau des commandes de widgets:

  • Numéro de commande
  • Numéro de client
  • Prix ​​unitaire
  • Quantité
  • Total

Le total dépasse la conformité 3NF car il peut être obtenu en multipliant le prix unitaire par la quantité, plutôt que de dépendre entièrement de la clé primaire. Nous devons le retirer de la table pour nous conformer à la troisième forme normale.

En fait, comme il est dérivé, il est préférable de ne pas le stocker dans la base de données.

Nous pouvons simplement le calculer "à la volée" lors de l'exécution de requêtes sur une base de données. Par exemple, nous avons peut-être déjà utilisé cette requête pour récupérer les numéros de commande et les totaux:

SELECT NuméroCommande, Total DE WidgetOrders

Nous pouvons maintenant utiliser la requête suivante:

SELECT OrderNumber, UnitPrice * Quantity AS Total DE WidgetOrders

obtenir les mêmes résultats sans enfreindre les règles de normalisation.