La troisième forme normale

La troisième forme normale

C'est la troisième partie de la série, cinq formes normales. Les titres des deux premières parties (tutoriels) sont d'abord une forme normale, suivie d'une deuxième forme normale. Dans cette partie de la série, la troisième forme normale est expliquée.

L'explication suit le scénario: un père est mort et a laissé de l'argent à son fils. Le fils a décidé d'investir l'argent dans un dépanneur. Un dépanneur, également connu comme un atelier de commodité, est une petite entreprise de vente au détail qui reçoit des articles de tous les jours des fournisseurs et les vend à des clients individuels du quartier.

À ce stade, la boutique est déjà stockée, et certaines ventes ont déjà été réalisées. Le fils, qui est le propriétaire de l'entreprise, a des employés, qui sont appelés commis dans ce tutoriel. Le propriétaire et tout employé peuvent recevoir des fournitures et faire des ventes après avoir enregistré les produits.

Cependant, avant le début du magasin, ni le propriétaire ni les employés ne savaient rien des formulaires normaux. Donc, ils enregistraient tout comme des transactions dans une table et un livre d'exercices. Ils n'avaient pas d'ordinateur.

Vous, le lecteur, avez terminé les cinq parties de cette série de tutoriels; Vous êtes maintenant un développeur de base de données. Le propriétaire du magasin de commodité est votre ami. Vous avez visité la boutique il y a deux jours et vous avez formé le propriétaire et les commis à la production d'une table dans sa première forme normale. Vous avez également visité la boutique hier et les avez formées sur la façon de créer une table dans la deuxième forme normale à partir de la première forme normale.

Aujourd'hui, vous venez d'arriver à la boutique pour une visite pour les former sur la façon de produire une table dans la troisième forme normale à partir du deuxième formulaire normal. Toutes les tables qu'ils ont actuellement sont sous la deuxième forme normale. Les tables (par nom et les titres de colonne) sont:

Produits (ProductId, catégorieID, produit)
Catégories (catégorieId, catégorie)

Ventes (SaleID, client, employé, date)
Saledetails (SaleID, ProductId, Numbersold, SelltPrice)

Commandes (OrderId, Fournisseur, Employé, date)
OrderDetails (OrderId, ProductId, Number Bound, CostPrice)

Les touches simples ou composites sont soulignées.

Après avoir résumé ce qui a été enseigné dans les deux jours précédents et avant de pouvoir faire n'importe quoi, le propriétaire demande:

«Qu'en est-il des numéros de téléphone, des adresses, etc., pour les clients et les employés?

Qu'en est-il de la quantité en stock, du niveau de réorganisation, etc., pour les produits?
Ont-ils besoin de leurs propres tables séparées, ou si elles sont installées dans les tables actuelles?"

Vous, le développeur de la base de données, Réponse:

«Félicitations, propriétaire! Vous avez indirectement introduit le problème de la troisième forme normale."

Vous continuez.

Autres colonnes nécessaires

D'autres colonnes nécessaires sont d'abord ajoutées aux tables précédentes, qui sont en 1NF et 2NF. Certains des noms de colonne précédents sont modifiés.

Au minimum, le tableau des catégories doit avoir les colonnes suivantes:

Catégories (catégoriesid, catégoriename, description)

La description est un court paragraphe qui décrit la catégorie. Ce tableau des catégories est déjà en 1NF, 2NF et 3NF. Le 3NF est expliqué ci-dessous:

Au minimum, le tableau des produits doit avoir les colonnes suivantes:

Produits (ProductId, catégorieID, fournisserid, productName, Unitprice, QuantityInstock, ReortreLevel)

Au fur et à mesure que chaque produit est vendu, un niveau bas (nombre) des produits sera atteint lorsque le produit doit être réorganisé, de sorte que les clients ne devraient pas venir au magasin et ne pas avoir le produit. Une telle absence n'est pas bonne pour les affaires. QuantityInstock est le nombre d'un produit particulier en stock. Cela comprend ce qui se trouve dans le magasin et ce qui est sur l'étagère.

catégoriesd et fournisserid sont des clés étrangères. C'est pourquoi ils ont un tableau de bord au lieu de souligner unique. La clé étrangère est expliquée ci-dessous. Dans la partie précédente de la série (deuxième formulaire normal), CatégoryId faisait partie de la clé principale avec un seul soulignement en raison de la façon dont il a été arrivé à. Cependant, d'après l'explication ci-dessous, il serait clair que la catégorieId devrait être une clé étrangère (avec un tableau de bord).

Cette table de produits est déjà en 1NF, 2NF et 3NF. Voyez pourquoi il est en 3NF ci-dessous:

Au minimum, le tableau Saledetails doit avoir les colonnes suivantes:

Saledetails (SaleID, ProductId, UnitsellingPrice, Quantité, Remise)

La valeur de réduction devrait être nulle la plupart du temps. Une remise est la réduction que la boutique donne à un client.

Au minimum, le tableau OrderDetails doit avoir les colonnes suivantes:

OrderDetails (OrderId, ProductId, UnitCostprice, Quantité, Remise)

La valeur de réduction devrait être nulle la plupart du temps. La remise ici est la remise que le fournisseur donne la boutique.

Comme indiqué ci-dessous, le tableau des produits peut être considéré en 2NF ou 3NF. Les tables de vente et de commande ont le problème de 3NF. Seul le tableau de vente sera utilisé pour expliquer le problème et la solution. Le tableau 3NF pour les commandes et le tableau des produits suivent un raisonnement similaire et serait simplement cité.

Tout en ajoutant des colonnes, le tableau des ventes serait:

Ventes (SaleID, Datesold CustomName, téléphone, adresse, ville, région, code postal, pays, employé)

Sept colonnes ont remplacé la colonne du client dans le tableau d'origine. Étant donné que les clients sont des habitants du quartier, les cellules de la ville, de la région (État), du code postal et des colonnes de pays peuvent être laissées vides, bien qu'elles ne soient pas vides dans cet article.

Ce tableau de vente est toujours en 2NF car les règles 1NF et 2NF n'ont pas été violées. Cependant, il convient de réaliser que dans une rangée de table de vente, le client (nom) a été remplacé par sept cellules de lignes du client.

Remarque: Une cellule d'adresse a le numéro de maison, le nom de la rue ou de la route et le nom de la ville, tous séparés par des virgules. Une ville peut être considérée comme composée de plusieurs villes. Bien que les virgules séparent ces composants de chaîne particulières, ils forment une valeur cellulaire et non trois valeurs cellulaires.

La colonne des employés doit également être remplacée par sept de ces colonnes. Cependant, cela ne se fait pas dans ce tutoriel pour gagner du temps et de l'espace. Ainsi, un tableau de vente avec des données peut être:

Tableau de vente - 2NF - Sans CustomerId

La colonne de type Type de données est un entier ou, mieux,. Le type de données de la colonne Datesold est une date et non un nombre car il a le caractère «/», qui n'est pas un chiffre. Le type de données pour le reste des colonnes, y compris la colonne du téléphone, est une chaîne (ou un texte). La valeur du téléphone a le personnage «-», qui n'est pas un chiffre.

Notez que pour chaque ligne, le client (nom), comme c'était dans la partie précédente de la série, a été remplacé par sept cellules, dont l'une est toujours le nom du client. Cela signifie que les données des clients sont une entité. Actuellement, le nom du client identifie ses six autres données consécutives. Si ce tableau est programmé, il sera pratique d'identifier l'entité client dans chaque ligne avec un entier (pas automatiquement). Dans ce cas, une colonne CustomerId devrait précéder le nom de personnalité. Le tableau précédent devient:

Tableau de vente - 2NF - avec CustomerId

Il y a trois clients: 1, 2 et 3, avec 1 se produisant cinq fois pour John Smith, 2 se produisant deux fois pour James Taylor, et 3 qui se produisent une fois pour Susan Wright.

Notez que certains clients et leurs dépendants se répètent.

Règles pour la troisième forme normale

Un tableau est en troisième forme normale si elle respecte les règles suivantes:

  1. Il devrait déjà être sous la deuxième forme normale.
  2. Et il ne devrait pas avoir une dépendance transitive.

Ensuite, l'un des commis (employés) demande: «Qu'est-ce qu'une dépendance transitive?". Et vous, le développeur de la base de données, répondez: «C'est une bonne question!"

Dépendance transitive

Il est vrai que dans la ligne, SaleID identifie toutes les valeurs de la ligne; Cependant, CustomerID identifie ses sept valeurs de données mais n'identifie pas les autres valeurs identifiées par SaleID dans cette ligne. Autrement dit, le Saleid dépend de dix valeurs cellulaires dans chaque ligne. Cependant, le CustomerId dépend de sept valeurs de cellules dans la même ligne, mais le CustomerId ne dépend pas de la SaleID et des autres valeurs dont SaleID dépend.

Une telle dépendance pour le Custumerid est la dépendance transitive. Et CustomerId est appelé une clé étrangère et est souligné dans cette série de tutoriels, les cinq formulaires normaux.

Supposons qu'un attribut non prison (valeur des cellules non primaires) dépend des autres attributs non prisonniers et de l'attribut non prison en question (E.g., CustomerId et ses dépendances) ne dépend pas de la clé primaire et du reste des valeurs cellulaires dans la ligne. Alors c'est une dépendance transitive.

Le tableau des ventes précédent avec la clé étrangère et ses dépendances provoquerait des problèmes comptables (anomalies).

Table de vente de 2NF à 3NF

Pour résoudre le problème posé par la clé étrangère et ses dépendances, retirez la clé étrangère et ses dépendances, pour former une nouvelle table sans répétitions. Cependant, même si la clé étrangère ne dépend pas de la clé primaire, la clé principale dépend de la clé étrangère. Ainsi, une copie de la clé étrangère doit rester dans le tableau parent. Le nouveau tableau des ventes, à ce stade, est conforme 1NF, 2NF et 3NF; c'est une table parentale. Le nouveau tableau des enfants de la table de vente précédente est également conforme 1NF, 2NF et 3NF. Le nom de la table d'enfants avec clé étrangère et ses dépendances, ce sont les clients. Si un nom approprié ne peut être trouvé, alors quelque chose a mal tourné avec l'analyse. La nouvelle table de vente en 3NF est:

Table de vente finale en 3NF

Ce tableau en 3NF a le même nombre de lignes que celle de 2NF mais avec moins de colonnes.

La notation du tableau pour ce tableau de vente final en 3NF est:

Ventes (SaleID, Datesold, CustomerID, EmployeeID)

Le SaleID est la clé principale avec un seul soulignement. CustomerId est une clé étrangère, avec un tableau de bord souligne. Employeeid est également une clé étrangère avec un tableau de bord souligne. Notez que la situation des employés dans le tableau des ventes en 2NF est la même que la situation client. L'employé et ses propres dépendants doivent être retirés pour former une autre table; Une copie de l'employeeid reste.

Remarque: SaleID, CustomerID et EmployeeId ne forment pas de clé composite. SaleID dépend de CustomerID et EmployeeID.

La relation entre SaleID et CustomerId est plusieurs à un.

Le tableau client en 3NF

Ce tableau a trois lignes au lieu de 9 lignes dans le tableau de vente 2NF. Dans ce tableau, CustomerId est une clé principale. C'est la même chose que la clé étrangère du tableau des ventes, mais sans répétitions. La clé étrangère de la table de vente et la clé principale de la table client liennt les deux tables.

Les lignes répétées dans la table des clients ont été supprimées afin de ne pas violer 1NF.

Comme le lecteur peut le voir, mettre une table en 3NF résoudrait également le problème des lignes répétées (redondance).

La table Notation pour les clients est:

Clients (CustomerId, CustomName, téléphone, adresse, ville, région, code postal, pays)

La table de produits revisitée

Le tableau des produits donnés ci-dessus sous forme de notation est:

Produits (ProductId, catégorieID, fournisserid, productName, Unitprice, QuantityInstock, ReortreLevel)

La clé principale ici est ProductId. catégoriesd et fournisserid sont des clés étrangères. Semblable à la table des clients, il existe un tableau de catégories, où catégories est la clé principale, et il y a une table de fournisseur, où ProdibleId est la clé principale.

Si les valeurs pour les cellules pour unitprice, la quantité de stoc. Si ces valeurs changent, alors la table des produits, tel quel est en 2NF. Dans cette partie de la série de tutoriels, on suppose que ces valeurs restent fixes dans le temps.

Toutes les tables

Toutes les tables sont maintenant en 3NF. Ils sont montrés comme:

Employés (employés, nom, téléphone, adresse, ville, région, code postal, pays, date de naissance, embauché, dateelent)

Fournisseurs (fournisseur, nom, téléphone, adresse, ville, région, code postal, pays)

Produits (ProductId, catégorieID, fournisserid, productName, Unitprice, QuantityInstock, ReortreLevel)
Catégories (catégoriesid, catégoriename, description)

Ventes (SaleID, Datesold, CustomerID, EmployeeID)
Saledetails (SaleID, ProductId, Numbersold, SelltPrice)
Clients (CustomerId, CustomName, téléphone, adresse, ville, région, code postal, pays)

Commandes (OrderId, Datesold, Providerid, EmployeeID)
OrderDetails (OrderId, ProductId, Number Bound, CostPrice)

Jusqu'à neuf tables professionnelles ont été produites à partir d'une seule table produite par les novices pour éviter les problèmes de redondance et de comptabilité (anomalies de l'insert, de la suppression et de la mise à jour). Le tableau novice entraînerait à lui seul des pertes financières.

Tester le personnel

À ce stade, tous les employés, y compris le propriétaire, auraient dû comprendre 1NF, 2NF et 3NF. Cependant, ils doivent être testés. Tous, y compris le propriétaire, s'asseoiront à différents endroits et termineront le test. Le test composé d'une question prendra une heure, et c'est le suivant:

Question: L'utilisation de règles pour 1NF, 2NF et 3NF, prouvent que toutes les neuf tables ci-dessus sont déjà en première forme normale, deuxième forme normale et troisième forme normale. Les clients et les fournisseurs n'ont pas à être de vraies entités. Les données pour les tables devraient sauvegarder les notations du tableau.

Pendant qu'ils terminent le test, vous, en tant que développeur de base de données, soyez pris pour prendre une collation et une bière, pour revenir après une heure.

L'avenir proche et lointain

Pendant que vous, le développeur de la base de données, êtes sorti, vous considérez également quels conseils leur donner s'ils passent tous le test.

De plus, pendant que vous les formes, et maintenant qu'ils passent le test, les clients sont venus et sont partis sans être servi. Ce n'est pas bon pour les affaires, et vous, le développeur de la base de données, savez que. Certains clients peuvent aller dans les magasins de concurrents et ne jamais revenir.

Vous, le développeur de la base de données, avez 30 ans. Le propriétaire, comme votre ami, a également 30 ans. Les commis (employés) ont entre 18 et 24 ans. Toutes les qualités dont ils avaient besoin pour travailler pour le propriétaire étaient: être en bonne santé, pouvoir lire et écrire, pouvoir ajouter, soustraire, multiplier et diviser et pouvoir utiliser l'ordinateur et Internet.

Lorsqu'une table est en 3NF, la plupart des vulnérabilités ont été supprimées de la base de données. De nombreuses bases de données commerciales ne vont pas au-delà de la 3NF, et les entreprises ou les entreprises sont à l'aise.

Donc, si tous réussissent le test, vous demanderez aux commis d'aller continuer à travailler. Vous leur conseillerez également d'économiser des parties de leurs salaires afin qu'ils puissent posséder leurs magasins de commodité. Vous continuerez demain pour former uniquement le propriétaire en 4NF et 5NF. Avec la connaissance de 4NF et 5NF, toutes les vulnérabilités connues sont supprimées.

Évaluation

Après une heure, vous, le développeur de la base de données, revenez. Vous marquez leurs scripts. Une excellente nouvelle! Ils, y compris le propriétaire, ont 100% chacun. Hourra! C'est excellent!

Alors félicitations à vous tous: l'enseignant et les élèves.

Il ne reste plus rien à faire dans ce tutoriel que pour conclure.

Conclusion

Un tableau est en première forme normale, s'il ne viole 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.

Un tableau est sous forme normale, si elle ne viole aucune des règles suivantes:

  1. Le tableau doit déjà être en première forme normale.
  2. Il ne doit pas y avoir de dépendance partielle.

Un tableau est en troisième forme normale, s'il ne viole aucune des règles suivantes:

  1. Il doit déjà être sous la deuxième forme normale.
  2. Et il ne doit pas avoir de dépendance transitive.

Vous, le développeur de la base de données, dites aux greffiers qu'ils ont suffisamment appris. Vous fournissez des conseils et demandez-leur de retourner au travail et de rester dans leurs stations par défaut.

Vous fixez un rendez-vous avec le propriétaire uniquement, pour avoir lieu dans son bureau demain pour une formation sur 4NF et 5NF.