Table des matières:
Vidéo: Conception de base de données #07 : Normalisation - Première forme normale 2025
Il existe trois sources d'anomalies de modification en SQL sont définis comme première, deuxième et troisième formes normales (1NF, 2NF, 3NF). Ces formes normales agissent comme des remèdes aux anomalies de modification.
Première forme normale
Pour être en première forme normale (1NF), une table doit avoir les qualités suivantes:
-
La table est bidimensionnelle avec des lignes et des colonnes.
-
Chaque ligne contient des données qui concernent une chose ou une partie d'une chose.
-
Chaque colonne contient des données pour un seul attribut de la chose qu'il décrit.
-
Chaque cellule (intersection d'une ligne et d'une colonne) de la table ne doit avoir qu'une seule valeur.
-
Les entrées d'une colonne doivent toutes être du même type. Si, par exemple, l'entrée dans une ligne d'une colonne contient un nom d'employé, toutes les autres lignes doivent également contenir les noms d'employés dans cette colonne.
-
Chaque colonne doit avoir un nom unique.
-
Aucune ligne ne peut être identique (c'est-à-dire que chaque ligne doit être unique).
-
L'ordre des colonnes et l'ordre des lignes ne sont pas significatifs.
Une table (relation) en première forme normale est immunisée contre certains types d'anomalies de modification mais reste soumise à d'autres. La table SALES est en première forme normale et la table est sujette à des anomalies de suppression et d'insertion. La première forme normale peut s'avérer utile dans certaines applications mais pas fiable dans d'autres.
Deuxième forme normale
Pour apprécier la seconde forme normale, il faut comprendre l'idée de dépendance fonctionnelle. Une dépendance fonctionnelle est une relation entre ou parmi les attributs. Un attribut dépend fonctionnellement d'un autre si la valeur du deuxième attribut détermine la valeur du premier attribut. Si vous connaissez la valeur du deuxième attribut, vous pouvez déterminer la valeur du premier attribut.
Supposons, par exemple, qu'une table possède des attributs (colonnes) StandardCharge, NumberOfTests et TotalCharge qui se rapportent à l'équation suivante:
TotalCharge = StandardCharge * NumberOfTests
TotalCharge dépend fonctionnellement de StandardCharge et de NumberOfTests. Si vous connaissez les valeurs de StandardCharge et NumberOfTests, vous pouvez déterminer la valeur de TotalCharge.
Chaque table au premier format normal doit avoir une clé primaire unique. Cette clé peut comporter une ou plusieurs colonnes. Une clé composée de plus d'une colonne est appelée une clé composite . Pour être dans la deuxième forme normale (2NF), tous les attributs non clés doivent dépendre de la clé entière. Ainsi, toute relation qui se trouve dans 1NF avec une seule clé d'attribut est automatiquement dans la seconde forme normale.
Si une relation a une clé composite, tous les attributs non clés doivent dépendre de tous les composants de la clé. Si vous disposez d'une table dans laquelle certains attributs non clés ne dépendent pas de tous les composants de la clé, divisez la table en deux tables ou plus afin que, dans chacune des nouvelles tables, tous les attributs non clés dépendent de tous les composants de la clé primaire.
Son confus? Regardez un exemple pour clarifier les choses. Considérez la table des ventes. Au lieu d'enregistrer un seul achat pour chaque client, vous ajoutez une ligne chaque fois qu'un client achète un article pour la première fois. Une autre différence est que les clients charter (ceux qui ont des valeurs CustomerID de 1001 à 1007) obtiennent un rabais sur le prix normal.
Customer_ID n'identifie pas de manière unique une ligne. Dans deux lignes, Customer_ID est 1001. Dans deux autres lignes, Customer_ID est 1010. La combinaison de la colonne Customer_ID et de la colonne Product identifie de manière unique une ligne. Ces deux colonnes sont ensemble une clé composite.
Si ce n'est pas parce que certains clients ont droit à une réduction et d'autres pas, la table ne serait pas en seconde forme normale, car Price (un attribut non-clé) ne dépendrait que d'une partie de la clé (Produit). Étant donné que certains clients bénéficient d'une remise, le prix dépend à la fois du code client et du produit, et la table est en deuxième forme normale.
Troisième forme normale
Les tables en seconde forme normale sont particulièrement vulnérables à certains types d'anomalies de modification - en particulier celles qui proviennent de dépendances transitives.
Une dépendance transitive se produit lorsqu'un attribut dépend d'un deuxième attribut, qui dépend d'un troisième attribut. Les suppressions dans une table avec une telle dépendance peuvent entraîner une perte d'information non désirée. Une relation dans la troisième forme normale est une relation dans la deuxième forme normale sans dépendances transitives. Regardez à nouveau la table SALES, dont vous savez qu'elle est en première forme normale. Tant que vous restreignez les entrées pour n'autoriser qu'une seule ligne pour chaque Customer_ID, vous disposez d'une clé primaire à un seul attribut et la table est au deuxième format normal. Cependant, la table est toujours sujette à des anomalies. Que se passe-t-il si le client 1010 n'est pas satisfait de l'agent de blanchiment au chlore, par exemple, et renvoie l'article pour un remboursement?
Vous voulez supprimer la troisième rangée de la table, qui enregistre le fait que le client 1010 a acheté de l'eau de Javel. Vous avez un problème: si vous supprimez cette rangée, vous perdez également le fait que l'eau de Javel a un prix de 4 $. Cette situation est un exemple de dépendance transitive. Le prix dépend du produit, qui à son tour dépend de la clé primaire Customer_ID.
Briser la table SALES en deux tables résout le problème de dépendance transitive. Les deux tables constituent une base de données en troisième forme normale.
