Normalisation de base de données

La normalisation est une technique de conception de base de données, qui est utilisée pour concevoir une table de base de données relationnelle jusqu’à une forme normale supérieure. Le processus est progressif et un niveau plus élevé de normalisation de la base de données ne peut être atteint que si les niveaux précédents ont été satisfaits.

Cela signifie que, avoir des données sous une forme non normalisée (la moins normalisée) et visant à atteindre le plus haut niveau de normalisation, la première étape consisterait à assurer la conformité à la première forme normale, la deuxième étape consisterait à s’assurer que la deuxième forme normale est satisfaite, et ainsi de suite dans l’ordre mentionné ci-dessus, jusqu’à ce que les données soient conformes à la sixième forme normale.

Cependant, il convient de noter que les formes normales au-delà de 4NF sont principalement d’intérêt académique, car les problèmes qu’elles doivent résoudre apparaissent rarement dans la pratique.

Veuillez noter que les données de l’exemple suivant étaient intentionnellement conçu pour contredire la plupart des formes normales. Dans la vraie vie, il est tout à fait possible de pouvoir sauter certaines des étapes de normalisation car le tableau ne contient rien qui contredit la forme normale donnée. Il arrive également fréquemment que la correction d’une violation d’une forme normale corrige également une violation d’une forme normale supérieure dans le processus. Une table a également été choisie pour la normalisation à chaque étape, ce qui signifie qu’à la fin de cet exemple de processus, il se peut que certaines tables ne satisfassent pas à la forme normale la plus élevée.

Initial dataEdit

Soit une table de base de données avec la structure suivante:

Titre Auteur Auteur Nationalité Format Prix Objet Pages Épaisseur Éditeur Pays de l’éditeur Type de publication Identifiant du genre Nom du genre
Début de la conception et de l’optimisation de la base de données MySQL Chad Russell Américain Couverture rigide 49,99 MySQL,

Base de données,

Conception

520 Thick Apress USA E-book 1 Tutoriel

Nous supposons dans cet exemple que chaque livre n’a qu’un seul auteur.

Satisfaisant 1NFEdit

Pour satisfaire 1NF, les valeurs de chaque colonne d’une table doivent être atomiques. Dans le tableau initial, Subject contient un ensemble de valeurs de sujet, ce qui signifie qu’il n’est pas conforme.

Une façon d’atteindre le 1NF serait de séparer les duplicités en plusieurs colonnes en utilisant des groupes répétitifs Subject:

Titre Format Auteur Nationalité de l’auteur Prix Sujet 1 Sujet 2 Sujet 3 Pages Épaisseur Éditeur Pays de l’éditeur Identifiant du genre Nom du genre
Début de la conception et de l’optimisation de la base de données MySQL Couverture rigide Chad Russell Américain 49,99 MySQL Base de données Conception 520 Épaisse Apress États-Unis 1 Tutoriel

Bien que maintenant la table soit formellement conforme au 1NF (est atomique), le problème avec cette solution est évident – si un livre a plus de trois sujets, il ne peut pas être ajouté à la base de données sans modifier sa structure.

Pour résoudre le problème de manière plus élégante, il est nécessaire d’identifier les entités représentées dans le tableau et de les séparer dans leurs propres tables respectives. Dans ce cas, il en résulterait des tableaux Livre, Sujet et Editeur:

Livre
Titre Format Auteur Auteur Nationalité Prix Pages Épaisseur Identifiant du genre Nom du genre Identifiant de l’éditeur
Début de MySQL Conception et optimisation de la base de données Couverture rigide Chad Russell Américain 49.99 520 Épais 1 Tutoriel 1
Sujet
Identifiant du sujet Nom du sujet
1 MySQL
2 Database
3 Conception
Editeur
Publisher_ID Nom Pays
1 Apress USA

Le simple fait de séparer les données initiales en plusieurs tables romprait la connexion entre les données. Cela signifie que les relations entre les tables nouvellement introduites doivent être déterminées. Notez que la colonne « ID éditeur » dans le tableau du livre est une clé étrangère réalisant une relation plusieurs-à-un entre un livre et un éditeur.

Un livre peut contenir de nombreux sujets, ainsi qu’un sujet peut correspondent à de nombreux livres. Cela signifie également qu’une relation plusieurs-à-plusieurs doit être définie, obtenue en créant une table de liens:

Titre – Sujet
Titre ID du sujet
Début de la conception et de l’optimisation de la base de données MySQL 1
Début de la conception et de l’optimisation de la base de données MySQL 2
Début de la conception et de l’optimisation de la base de données MySQL 3

Au lieu d’une table sous forme non normalisée, il y a maintenant 4 tables conformes au 1NF.

Satisfaisant 2NFEdit

La table Book a une clé candidate (qui est donc la clé primaire), la clé composée {Title, Format}. Considérez le fragment de tableau suivant:

Livre
Titre Format Auteur Nationalité de l’auteur Prix Pages Épaisseur Identifiant du genre Nom du genre Identifiant de l’éditeur
Début de la conception et de l’optimisation de la base de données MySQL Couverture rigide Chad Russell Américain 49,99 520 épais 1 Tutoriel 1
Début de la conception et de l’optimisation de la base de données MySQL E-book Chad Russell Américain 22,34 520 épais 1 Tutoriel 1
Le modèle relationnel pour la gestion de bases de données: version 2 E-book EFCodd Britannique 13,88 538 épais 2 Science populaire 2
Le modèle relationnel pour Database Ma nagement: Version 2 Broché EFCodd Britannique 39,99 538 Epais 2 Science populaire 2

Tous les attributs qui ne font pas partie de la clé candidate dépendent du titre, mais seul le prix dépend également du format. Pour se conformer à 2NF et supprimer les doublons, chaque attribut de clé non candidate doit dépendre de la clé candidate entière, pas seulement d’une partie de celle-ci.

Pour normaliser cette table, faites de {Title} une clé candidate (simple) (la clé primaire) pour que chaque attribut de clé non candidate dépende de la clé candidate entière, et supprimez Price dans une table séparée afin que sa dépendance au format puisse être préservée:

Livre
Titre Auteur Auteur Nationalité Pages Épaisseur Identifiant du genre Nom du genre Identifiant de l’éditeur
Début de la conception et de l’optimisation de la base de données MySQL Chad Russell Américain 520 épais 1 Tutoriel 1
Le modèle relationnel pour la gestion des bases de données: version 2 EFCodd britannique 538 Epais 2 Science populaire 2
Format – Prix
Titre Format Prix
Début de la conception et de l’optimisation de la base de données MySQL Couverture rigide 49,99
Début de la conception et de l’optimisation de la base de données MySQL E-book 22.34
Le modèle relationnel pour la gestion de base de données: version 2 E-book 13.88
The Relational Model for Database Management: Version 2 Broché 39,99

Maintenant, la table Book est conforme à 2NF.

Satisfait à 3NFEdit

La table Book a toujours une dépendance fonctionnelle transitive ({Author Nationality} dépend de {Author}, qui dépend de {Title }). Une violation similaire existe pour le genre ({Genre Name} dépend de {Genre ID}, qui dépend de {Title}). Par conséquent, la table Book n’est pas dans 3NF. Pour le faire dans 3NF, utilisons la structure de table suivante, éliminant ainsi les dépendances fonctionnelles transitives en plaçant {Author Nationality} et {Genre Name} dans leurs propres tables respectives:

Livre

Titre Auteur Pages Épaisseur Identifiant de genre Identifiant éditeur
Début de la conception de la base de données MySQL et Optimisation Chad Russell 520 épais 1 1
Le modèle relationnel pour la gestion des bases de données: version 2 EFCodd 538 Thick 2 2
Format – Prix
Titre Format Prix
Début de la conception de la base de données MySQL et Optimisation Couverture rigide 49,99
Début de la conception et de l’optimisation de la base de données MySQL Livre électronique 22.34
Le modèle relationnel pour la gestion de base de données: version 2 E-book 13.88
Le modèle relationnel pour la gestion des bases de données: version 2 Broché 39,99
Auteur
Auteur Auteur Nationalité
Chad Russell Américain
EFCodd Britannique
Genre
Gen re ID Nom du genre
1 Tutoriel
2 Science populaire

Satisfaire EKNFEdit

Article détaillé: Forme normale de clé élémentaire

La forme normale de clé élémentaire (EKNF) se situe strictement entre 3NF et BCNF et n’est pas beaucoup discutée dans la littérature. Il vise à « capturer les principales qualités de 3NF et de BCNF » tout en évitant les problèmes des deux (à savoir que 3NF est « trop indulgent » et que le BCNF est « sujet à une complexité de calcul »). Comme il est rarement mentionné dans la littérature, il n’est pas inclus dans cet exemple.

4NFEdit satisfaisant

Supposons que la base de données appartient à une franchise de libraires qui a plusieurs franchisés qui possèdent des magasins dans différents endroits.C’est pourquoi le détaillant a décidé d’ajouter un tableau contenant des données sur la disponibilité des livres à différents endroits:

Franchisé – Emplacement du livre
ID du franchisé Titre Emplacement
1 Début de la conception et de l’optimisation de la base de données MySQL Californie
1 Début de la conception et de l’optimisation de la base de données MySQL Floride
1 Début de la conception et de l’optimisation de la base de données MySQL Texas
1 Le modèle relationnel pour la gestion des bases de données: version 2 Californie
1 Le modèle relationnel pour la gestion des bases de données: version 2 Floride
1 Le modèle relationnel pour la gestion des bases de données: version 2 Texas
2 Début de la conception et de l’optimisation de la base de données MySQL Californie
2 Début de la conception et de l’optimisation de la base de données MySQL Floride
2 Début de la conception et de l’optimisation des bases de données MySQL Texas
2 Le modèle relationnel pour la gestion des bases de données: version 2 Californie
2 Le modèle relationnel pour la gestion des bases de données: version 2 Floride
2 Le modèle relationnel pour la gestion des bases de données: version 2 Texas
3 Début de la conception et de l’optimisation de la base de données MySQL Texas

Comme cette structure de table consiste en une clé primaire composée, elle ne contient aucun attribut non clé et elle est déjà en BCNF (et donc satisfait également toutes les formes normales précédentes). Cependant, si nous supposons que tous les livres disponibles sont proposés dans chaque zone, nous pourrions remarquer que le titre n’est pas lié sans ambiguïté à un certain emplacement et que la table ne satisfait donc pas 4NF.

Cela signifie que, pour satisfaire la quatrième forme normale, ce tableau doit également être décomposé:

Franchisé – Livre
Identifiant du franchisé Titre
1 Début de la conception et de l’optimisation de la base de données MySQL
1 Le modèle relationnel pour la gestion des bases de données: version 2
2 Début de la conception et de l’optimisation des bases de données MySQL
2 Le modèle relationnel pour la gestion des bases de données: version 2
3 Début de la conception et de l’optimisation de la base de données MySQL
Franchisé – Emplacement
ID du franchisé Emplacement
1 Californie
1 Floride
1 Texas
2 Californie
2 Floride
2 Texas
3 Texas

Désormais, chaque enregistrement est identifié sans ambiguïté par une super-clé, donc 4NF est satisfait.

Satisfait à ETNFEdit

Supposons que les franchisés puissent également commander des carnets auprès de différents fournisseurs. Soit la relation également soumise à la contrainte suivante:

  • Si un certain fournisseur fournit un certain titre
  • et que le titre est fourni au franchisé
  • et le franchisé est fourni par le fournisseur,
  • alors le fournisseur fournit le titre au franchisé.
Fournisseur – Livre – Franchisé
ID fournisseur Titre ID du franchisé
1 Début de la conception et de l’optimisation de la base de données MySQL 1
2 Le modèle relationnel pour la gestion de base de données: version 2 2
3 Apprentissage de SQL 3

Cette table est en 4NF, mais l’ID fournisseur est égal à la jointure de ses projections: {{ID fournisseur, livre}, {Livre, ID franchisé}, {ID franchisé, fournisseur IDENTIFIANT}}.Aucun composant de cette dépendance de jointure n’est une super-clé (la seule super-clé étant l’en-tête entier), donc la table ne satisfait pas l’ETNF et peut être décomposée davantage:

Fournisseur – Livre
ID fournisseur Titre
1 Début de la conception et de l’optimisation de la base de données MySQL
2 Le modèle relationnel pour la gestion de bases de données: version 2
3 Apprentissage de SQL
Livre – Franchisé
Titre Identifiant du franchisé
Début de la conception et de l’optimisation de la base de données MySQL 1
Le modèle relationnel pour la gestion de base de données: version 2 2
Apprentissage de SQL 3
Franchisé – Fournisseur
ID fournisseur ID du franchisé
1 1
2 2
3 3

La décomposition produit la conformité ETNF.

Satisfaisant 5NFEdit

Pour repérer une table ne satisfaisant pas le 5NF, il est généralement nécessaire pour examiner les données de manière approfondie. Supposons la table de l’exemple 4NF avec une petite modification des données et examinons si elle satisfait 5NF:

Franchisé – Emplacement du livre
ID du franchisé Titre Emplacement
1 Début de la conception et de l’optimisation de la base de données MySQL Californie
1 Apprentissage de SQL Californie
1 Le modèle relationnel pour la gestion des bases de données: version 2 Texas
2 Le modèle relationnel pour la gestion des bases de données: version 2 Californie

Si nous décomposons ce tableau, nous réduisons les redondances et obtenons les deux tableaux suivants:

Franchisé – Livre
ID du franchisé Titre
1 Début de la conception et de l’optimisation de la base de données MySQL
1 Apprentissage de SQL
1 Le modèle relationnel pour la gestion de base de données: version 2
2 Le modèle relationnel pour la gestion des bases de données: version 2
Franchisé – Emplacement
ID du franchisé Emplacement
1 Californie
1 Texas
2 Californie

Que se passe-t-il si nous essayons de rejoindre ces tables? La requête renverrait les données suivantes:

Franchisé – Livre – Emplacement JOIN
ID du franchisé Titre Emplacement
1 Début de la conception de la base de données MySQL et Optimisation Californie
1 Learning SQL Californie
1 Le modèle relationnel pour la gestion des bases de données: version 2 Californie
1 Le modèle relationnel pour la gestion des bases de données: version 2 Texas
1 Learning SQL Texas
1 Début de la conception et de l’optimisation de la base de données MySQL Texas
2 Le modèle relationnel pour la gestion des bases de données: version 2 Californie

Apparemment, le JOIN renvoie trois lignes de plus qu’il ne le devrait – essayons d’ajouter une table pour clarifier la relation.Nous nous retrouvons avec trois tableaux distincts:

Franchisé – Livre
ID du franchisé Titre
1 Début de la conception et de l’optimisation de la base de données MySQL
1 Apprentissage de SQL
1 Le modèle relationnel pour la gestion de base de données: version 2
2 Le modèle relationnel pour la gestion des bases de données: version 2
Franchisé – Emplacement
ID du franchisé Emplacement
1 Californie
1 Texas
2 Californie
Emplacement – Boo k
Emplacement Titre
Californie Début de la conception et de l’optimisation de la base de données MySQL
Californie Learning SQL
Californie Le modèle relationnel pour la gestion des bases de données: version 2
Texas Le modèle relationnel pour la gestion des bases de données: version 2

Que retournera le JOIN maintenant? Il n’est en fait pas possible de joindre ces trois tables. Cela signifie qu’il n’était pas possible de décomposer le Franchisé – Emplacement du livre sans perte de données, donc la table satisfait déjà 5NF.

CJ Date a fait valoir que seule une base de données dans 5NF est vraiment « normalisée ».

Satisfaisant DKNFEdit

Jetons un œil à la table Book des exemples précédents et voyons si elle satisfait la forme normale de la clé de domaine:

Logiquement, l’épaisseur est déterminée par le nombre de pages. Cela signifie que cela dépend de Pages qui n’est pas une clé. Prenons un exemple de convention disant qu’un livre de 350 pages est considéré comme « mince » et un livre de plus de 350 pages est considéré comme « épais ».

Cette convention est techniquement une contrainte mais ce n’est ni un domaine contrainte ni contrainte clé; par conséquent, nous ne pouvons pas nous fier aux contraintes de domaine et aux contraintes clés pour conserver l’intégrité des données.

En d’autres termes – rien ne nous empêche de mettre, par exemple, « Thick » pour un livre avec seulement 50 pages – et cela fait que le tableau enfreint DKNF.

Pour résoudre ce problème, nous pouvons créer un tableau contenant une énumération qui définit l’épaisseur et supprimer cette colonne de la table d’origine:

Livre
Titre Pages Épaisseur ID de genre ID d’éditeur
Début de la conception et de l’optimisation de la base de données MySQL 520 Épais 1 1
Le modèle relationnel pour la gestion de base de données: version 2 538 Épais 2 2
Apprentissage de SQL 338 Slim 1 3
Livre de recettes SQL 636 Épais 1 3
Enum d’épaisseur
Épaisseur Pages min. Pages max.
Slim 1 350
Épais 351 999 999 999 999
Livre – Pages – Genre – Éditeur
Titre Pages Identifiant de genre Identifiant d’éditeur
Début de la conception et de l’optimisation de la base de données MySQL 520 1 1
Le modèle relationnel pour Gestion de la base de données: version 2 538 2 2
Learning SQL 338 1 3
Livre de recettes SQL 636 1 3

De cette façon, la violation d’intégrité de domaine a été éliminée et la table est en DKNF.

Satisfaire 6NFEdit

Une définition simple et intuitive de la sixième forme normale est que « une table est en 6NF lorsque la ligne contient la clé primaire, et au plus un autre attribut ».

Cela signifie, par exemple, la table Publisher conçue lors de la création du 1NF

Publisher
Publisher_ID Nom Pays
1 Apress USA

doit être plus décomposé en deux tableaux:

Éditeur
Publisher_ID Nom
1 Apress
Pays de l’éditeur
Publisher_ID Pays
1 États-Unis

L’inconvénient évident de 6NF est la prolifération des tableaux nécessaires pour représenter les informations sur une seule entité. Si une table dans 5NF a une colonne de clé primaire et N attributs, représentant les mêmes informations dans 6NF nécessitera N tables; les mises à jour multi-champs d’un seul enregistrement conceptuel nécessiteront des mises à jour de plusieurs tables; et les insertions et les suppressions nécessiteront également des opérations sur plusieurs tables. Pour cette raison, dans les bases de données destinées à répondre aux besoins de traitement des transactions en ligne, 6NF ne doit pas être utilisé.

Cependant, dans les entrepôts de données, qui ne permettent pas les mises à jour interactives et qui sont spécialisés pour les requêtes rapides sur de gros volumes de données , certains SGBD utilisent une représentation 6NF interne – connue sous le nom de magasin de données en colonne. Dans les situations où le nombre de valeurs uniques d’une colonne est bien inférieur au nombre de lignes de la table, le stockage orienté colonne permet d’importantes économies d’espace grâce à la compression des données. Le stockage en colonne permet également une exécution rapide des requêtes de plage (par exemple, afficher tous les enregistrements où une colonne particulière est comprise entre X et Y, ou inférieure à X.)

Dans tous ces cas, cependant, le concepteur de la base de données ne doivent effectuer la normalisation 6NF manuellement en créant des tables séparées. Certains SGBD spécialisés pour l’entreposage, tels que Sybase IQ, utilisent le stockage en colonnes par défaut, mais le concepteur ne voit toujours qu’une seule table multi-colonnes. D’autres SGBD, tels que Microsoft SQL Server 2012 et versions ultérieures, vous permettent de spécifier un « index columnstore » pour une table particulière.

Write a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *