La normalisation est une approche de conception de la base de données pour décomposer systématiquement les tables afin de supprimer la redondance des données et d'empêcher les anomalies qui peuvent accompagner l'insertion, la mise à jour et la suppression des données. Il y a la première forme normale (1NF), la deuxième forme normale (2NF), la troisième forme normale (3NF), la forme normale de Boyce-Codd (BCNF), la quatrième forme normale (4NF) et la cinquième forme normale (5NF). La sixième forme normale est toujours en cours d'élaboration (toujours à l'état de recherche) et ne sera pas discutée dans cette série. La forme normale de Boyce-Codd est comme le 3½ (3.5) Forme normale. Une base de données relationnelle se compose de tables connexes, qui auraient dû être normalisées.
Cet article (tutoriel) explique la première forme normale. Ceci est la première partie de la série, les cinq formes normales. L'exemple de base de données utilisée est celle d'un magasin de commodité. En Grande-Bretagne, une boutique de commodité s'appelle un magasin d'angle. Dans certains pays, il s'appelle un magasin de disposition.
Table de transaction non normalisée
Une transaction est l'achat de produits par un client, de la boutique ou de recevoir des produits par la boutique des fournisseurs, à vendre. On suppose dans cette partie de la série (dans ce tutoriel) que le greffier qui enregistre les transactions n'est pas formé pour un tel enregistrement. Il peut y avoir plus d'un commis qui ne sait rien de la normalisation. S'il y a plus d'un commis, tous les commis enregistrent dans le même livre d'exercices et aucun d'entre eux ne sait quoi que ce soit sur la normalisation. Le propriétaire (propriétaire de l'atelier) ne sait pas non plus de la normalisation. Son père vient de mourir et lui a laissé de l'argent, et il a décidé d'investir dans un magasin de commodité. Ainsi, le greffier (ou les commis) commencent avec une table pour enregistrer toutes les transactions. Le tableau a les en-têtes de colonne suivantes où trans signifie transaction:
Trans (produit, catégorie, client, fournisseur, employé, prix)
Trans se réfère à une ligne dans le tableau. Le tableau est un tableau de transaction. Les exemples de produits vendus dans la boutique sont: les bonbons, les chocolats, le sprite, le coca-cola, la fantaisie, le pepsi, le lait, le yaourt, le fromage, les dentifrices, les tissus, les couches, les bonbons, les frites et les noix. N'importe lequel de ces noms peut apparaître dans la colonne du produit.
Ces produits entrent dans les catégories qui sont: confiserie, boisson gazeuse, produits laitiers, articles de toilette et collations.
La colonne Customer a les noms des personnes qui achètent dans la boutique. La colonne des fournisseurs a les noms des sociétés qui fournissent les produits à vendre par la boutique. La colonne des employés a le nom du greffier qui vend un produit ou reçoit un produit d'un fournisseur et l'enregistre. La colonne d'action indique si une vente a été effectuée à un client ou si une commande a été rendue (achetée) à un fournisseur.
Chaque prix est le prix total des produits vendus ou achetés en une seule transaction.
Et donc, les premières rangées de la table sont:
Avant de continuer, sachez que les colonnes de table dans une table de base de données sont également appelées attributs. Les lignes avec des valeurs peuvent être appelées objets.
Maintenant, notez que dans la colonne de prix, la devise n'est pas indiquée. Que la monnaie soit en dollars ou en euros ou dans une autre devise, il ne doit pas être indiqué. Cependant, il est indiqué dans une zone de commentaire qui ne fait pas partie du tableau.
De la table: Il y a jusqu'à présent trois commis, à l'exclusion du propriétaire, et l'un d'eux a effectué la transaction deux fois; Il y a jusqu'à présent trois clients, et l'un d'eux a acheté deux fois; Il y a jusqu'à présent quatre sociétés de fournisseurs, et chacune s'intéresse à une transaction.
Redondance:
Notez que «John Smith» apparaît comme une valeur en deux rangées dans la même colonne. La répétition de la même valeur dans la même colonne est la redondance qui peut entraîner des problèmes comptables.
Première règles de formulaire normal
Pour qu'une table soit sous la première forme normale, les règles suivantes doivent être respectées. Sinon, il y aurait des problèmes comptables:
1) Toutes les colonnes d'une table doivent avoir des noms d'en-tête uniques.
2) Chaque cellule ne doit avoir qu'une seule valeur.
3) Les valeurs stockées dans une colonne doivent être du même type.
4) Les lignes doivent être distinctes.
5) L'ordre des colonnes ou l'ordre des lignes n'a pas d'importance.
Vous, le lecteur, qui complète enfin cette série et sait tout sur les formulaires normaux, êtes devenu un développeur de base de données. Le propriétaire du magasin de commodité est votre ami. Vous avez décidé de visiter le site commercial de votre ami (boutique).
Vous regardez le tableau précédent qu'ils ont produit. Vous réfléchissez pendant un certain temps, puis secouez la tête en disant: "HM-HM-HM". Vous dites ensuite à votre ami, au propriétaire et à ses travailleurs, que toutes les règles de la première forme normale n'ont pas été respectées; Et cela entraînerait des erreurs comptables.
Vous avez ensuite décidé de leur enseigner les règles de la première forme normale, en examinant les cinq règles données telles qu'elles sont liées au tableau précédent, un par un.
Règle 1: Toutes les colonnes d'une table doivent avoir des noms d'en-tête uniques.
Toutes les colonnes de la table précédente ont des noms uniques? Oui, et ça va. Les membres du personnel ne sont pas inintelligents, après tout. Ils n'ont tout simplement pas été éduqués sur les formes normales. La règle 1 n'a pas été violée et cela ne pose pas de problème.
Règle 2: Chaque cellule ne doit avoir qu'une seule valeur.
Une cellule est l'intersection d'une ligne et d'une colonne. En regardant le dernier attribut (colonne) avec le cap, le prix, il y a un nombre dans chaque cellule et il n'y a qu'un seul nombre par cellule. Ça va. Chaque cellule est unique.
En regardant la colonne des employés, chaque cellule a un nom d'une personne. Un nom se compose du premier et du nom de famille, formant une chaîne (texte). Ça va. Chaque cellule de la colonne a une chaîne et donc, chaque cellule a une valeur.
Les cellules des colonnes client et fournisseur ont une seule chaîne chacune et donc une seule valeur. Ça va. Dans la colonne du client, «John Smith» est dans deux cellules différentes (lignes). C'est une redondance (répétition) et son problème sera discuté plus loin dans le tutoriel pour 2NF.
Dans la colonne de catégorie, chaque cellule doit avoir une catégorie. Un texte de catégorie (une valeur) est une chaîne. Cependant, dans la deuxième cellule du haut, il y a deux catégories (deux cordes): «boisson gazeuse» et «produit laitier» séparés par une virgule. Ce sont deux valeurs dans une cellule. Le reste des cellules de la colonne de catégorie a des valeurs uniques, mais cette cellule en a deux. La règle selon laquelle chaque cellule ne doit avoir qu'une seule valeur, a été violée ici dans la deuxième cellule. Cela entraînerait des problèmes comptables. Puisqu'il y a deux valeurs dans une cellule, la solution consiste à diviser la ligne de données en deux lignes en conséquence, mettant les deux valeurs en deux cellules, deux lignes, dans la même colonne que celle:
Les deux catégories qui étaient dans une cellule ont été placées dans deux cellules dans la même colonne. Cependant, les autres cellules ont été répétées dans leurs colonnes, introduisant plus de redondance. Au cours de la résolution d'un problème, des répétitions (redondance) ont été ajoutées, ajoutant un autre problème. La solution aux répétitions sera discutée dans le prochain tutoriel sur le deuxième formulaire normal.
En regardant la première colonne du produit, la première cellule a deux valeurs: «Sweets» et «Chocolates» séparés par une virgule. Ce sont aussi deux produits. La solution consiste à diviser la ligne en deux, en mettant les deux valeurs dans deux cellules différentes dans la même colonne et malheureusement doubler les autres cellules.
La deuxième cellule de la même colonne de produit a sept valeurs. Comme la première cellule, cela viole la règle: chaque cellule ne doit avoir qu'une seule valeur. La solution consiste à remplacer la ligne par sept nouvelles lignes, chacune de ces valeurs dans sa propre cellule dans la même colonne et les répétitions des autres cellules dans leurs propres colonnes. Les nouvelles répétitions augmentent la redondance.
Sur les sept produits, quatre tombent dans la catégorie des boissons gazeuses et trois tombent dans la catégorie des produits laitiers. Les quatre produits (Sprite, Coca-Cola, Fanta et Pepsi) sont chacun associés à la catégorie, boisson gazeuse. Les produits (lait, yaourt et fromage) sont chacun associés à la catégorie, produit laitier.
Le nouveau tableau devient:
La règle selon laquelle chaque cellule ne doit avoir qu'une seule valeur est maintenant satisfaite. Il n'y a pas de cellule avec plus d'une valeur dans le tableau maintenant. Cette solution est venue à un coût. Plus de cellules se sont répétées dans leurs colonnes, ajoutant plus de répétitions à la double répétition (originale) de «John Smith» donnée. Mettre une table dans la deuxième forme normale résout le problème de la répétition (redondance) de la première forme normale.
Note: La répétition dans la colonne des prix n'est pas considérée comme un problème et n'est pas prise en considération lors de la production du 2NF. Notez également que dans ce tableau résultant, certains des prix donnés ont été divisés et sont considérés comme appropriés.
Règle 3: Les valeurs stockées dans une colonne doivent être du même type.
Le dernier attribut, la colonne de prix n'a que des chiffres. Ainsi, toutes les valeurs de cette colonne sont du même type appelé nombres (précisément, entiers). Chacune des autres colonnes a des valeurs de chaîne de type. Le type de chaîne est appelé texte dans certains codes de table de base de données. Et donc, la règle selon laquelle les valeurs stockées dans une colonne devraient être du même type est satisfaite sans aucun changement à ce que le personnel avait fait. Ils ne sont pas inintelligents après tout.
Règle 4: Les lignes doivent être distinctes.
Dans le tableau précédent résultant, il n'y a pas deux lignes. Certaines cellules se produisent dans plus d'une ligne dans la même colonne, mais il n'y a pas deux lignes n'ont les mêmes cellules dans le même ordre. Et donc, la règle selon laquelle les lignes devraient être distinctes est satisfaite sans aucun changement à ce que le personnel avait fait. Ils ne sont pas inintelligents après tout.
Règle 5: L'ordre des colonnes ou l'ordre des lignes n'a pas d'importance.
Toute colonne peut être la première ou la dernière colonne. Toute ligne peut être la première ou la dernière rangée. Et donc, la règle selon laquelle l'ordre des colonnes ou l'ordre des lignes n'a pas d'importance est satisfaite sans aucun changement à ce que le personnel avait fait. Ils ne sont pas inintelligents après tout.
Le tableau est maintenant en première forme normale car les cinq règles sont satisfaites.
Sur les cinq règles pour avoir une table en première forme normale, le personnel, y compris son propriétaire, n'a violé qu'une seule d'ignorance qui n'est pas de leur faute. Vous, le développeur Web, les formation, devez les féliciter. Cependant, vous devez insister sur le fait que la règle selon laquelle chaque cellule ne doit avoir qu'une seule valeur est la règle la plus importante pour mettre un tableau sous la première forme normale.
Eh bien, ce n'est pas tout. Vous ne laissez pas les gens que vous entraînez encore. Le tableau doit être donné une clé (une clé primaire). En d'autres termes, chaque ligne doit être identifiable par une ou plusieurs valeurs cellulaires de cette ligne. Si cela n'est pas possible, une nouvelle colonne doit être créée sur le côté gauche de la table pour être appelée la colonne de clé.
Clé primaire
Y a-t-il une colonne dans le tableau précédent où aucune cellule ne peut être vide ou avoir une valeur nulle, et toutes les valeurs seront toujours uniques? Il n'y en a pas. S'il y en avait un, alors il serait fait de la clé principale. Le lecteur pourrait penser que la colonne de produit a des valeurs uniques, mais ce ne serait pas le cas tout le temps. Par exemple, le client «John Smith» ou un nouveau client peut encore venir acheter des bonbons à l'avenir, en tant que nouvelle transaction (ligne). Ensuite, il y aurait deux valeurs de chaîne de bonbons dans deux cellules dans la colonne du produit.
Y a-t-il deux colonnes ou plus dans le tableau précédent qui en résulte dont la combinaison de cellules de ligne est unique et ne peut pas avoir de répétition dans le tableau suivant? Si oui, le groupe de colonnes formera la clé primaire. En l'occurrence, il n'y a pas un tel groupe; À moins que toutes les colonnes de la table ne soient considérées comme la clé principale car aucune ligne ne peut se répéter. Il doit y avoir une clé primaire et il doit y avoir des colonnes non clés dans un tableau normalisé.
Puisqu'une ou plusieurs colonnes ne peuvent pas être la clé principale du tableau précédent résultant, une nouvelle colonne doit être ajoutée à l'extrémité gauche du tableau pour être la clé principale. Dans une telle colonne de clé primaire, aucune cellule n'est vide et aucune cellule n'a de valeur nulle. Toutes les valeurs de la cellule doivent être uniques. La façon la plus simple d'avoir de telles valeurs pour la colonne de clé primaire est d'avoir des nombres à partir de 1. C'est-à-dire que pour la première ligne, la valeur de la clé primaire serait 1. Pour la deuxième ligne, la valeur de la clé primaire serait 2. Pour la troisième rangée, la valeur de la clé primaire serait de 3, et ainsi de suite. Lorsqu'une nouvelle ligne de transaction est ajoutée en bas, la nouvelle valeur de clé primaire est une plus celle juste au-dessus. Ainsi, la table complète pour le premier formulaire normal est la suivante:
La colonne de clé principale est appelée transid pour «ID de transaction». Id signifie identifiant. Une telle clé primaire est le type d'auto-incrémentation qui est le même que le nombre automatique. Une nouvelle ligne aura un identifiant principal de 12. Ce tableau est un tableau de transaction. C'est le seul tableau que la boutique a jusqu'à présent.
Qui complète la conception de la table pour le premier formulaire normal. Cependant, vous en tant que développeur Web, ne vous éloignez pas des personnes que vous entraînez encore. Vous devez toujours expliquer au personnel (les stagiaires) le sens de la dépendance fonctionnelle. Sur ce, ils pourront gérer le problème de la clé primaire ainsi que les cinq règles que vous leur avez enseignées en votre absence.
Dépendance fonctionnelle
L'idée de dépendance fonctionnelle ou simplement de dépendance est qu'une fois que la clé principale d'une ligne est connue, toute autre valeur dans cette ligne peut être récupérée. Donc, la clé principale est la valeur dépendante. Cela dépend du reste des autres valeurs de la ligne. Par exemple, si le transid de 3 est donné pour le tableau précédent, le produit correspondant est sprite. La catégorie correspondante est la «boisson gazeuse». Le client correspondant est «John Smith». Le fournisseur correspondant est une «entreprise de boisson». L'employé correspondant (greffier) est «Mary Baker». L'action correspondante est les «ventes». Et le montant (prix) que le client a payé est de 12 $ ($ n'est pas indiqué dans le tableau).
À ce stade, vous en tant que développeur de base de données pouvez partir. Cependant, avant de partir, vous résumez ce que vous leur avez enseigné.
Conclusion
Un tableau dans la première forme normale ne doit violer aucune des règles suivantes:
1) Toutes les colonnes d'une table doivent avoir des noms d'en-tête uniques.
2) Chaque cellule ne doit avoir qu'une seule valeur.
3) Les valeurs stockées dans une colonne doivent être du même type.
4) Les lignes doivent être distinctes.
5) L'ordre des colonnes ou des lignes n'a pas d'importance.
Toute table sous n'importe quelle forme normale doit avoir une clé primaire.
L'idée de la dépendance fonctionnelle ou simplement de la dépendance est qu'une fois que la clé principale d'une ligne est connue, toute autre valeur dans cette ligne peut être récupérée.
À ce stade, vous en tant que développeur de base de données pouvez prendre votre congé. Cependant, vous reviendrez pour leur enseigner le deuxième formulaire normal car un tableau en 1NF peut encore avoir des vulnérabilités.