base de données relationnelle selon un ensemble de formes normales afin de réduire la redondance des données et d'améliorer leur intégrité . Elle a été proposée pour la première fois par l'informaticien britannique Edgar F. Codd dans le cadre de son modèle relationnel .
La normalisation consiste à organiser les colonnes (attributs) et les tables (relations) d'une base de données afin de garantir que leurs dépendances soient correctement appliquées par les contraintes d'intégrité de la base. Elle s'effectue par l'application de règles formelles, soit par synthèse (création d'une nouvelle structure de base de données), soit par décomposition (amélioration d'une structure existante).
logique du premier ordre . SQL est un exemple de ce type de langage , bien que Codd le considérât comme présentant de graves défauts.Les objectifs de la normalisation au-delà de la 1NF (première forme normale) ont été énoncés par Codd comme suit :
- Pour libérer l'ensemble des relations des dépendances indésirables d'insertion, de mise à jour et de suppression.
- Afin de réduire la nécessité de restructurer la collection de relations, à mesure que de nouveaux types de données sont introduits, et ainsi augmenter la durée de vie des programmes d'application.
- Pour rendre le modèle relationnel plus informatif pour les utilisateurs.
- Afin de rendre la collecte des relations neutre vis-à-vis des statistiques de requêtes, lesquelles sont susceptibles de changer au fil du temps.
— EF Codd, « Normalisation plus poussée du modèle relationnel de base de données »



Lorsqu'une tentative est faite pour modifier (mettre à jour, insérer ou supprimer) une relation, les effets secondaires indésirables suivants peuvent survenir dans les relations qui n'ont pas été suffisamment normalisées :
- anomalie d'insertion
- Il existe des cas où certaines informations ne peuvent être enregistrées. Par exemple, chaque enregistrement d'une relation « Personnel enseignant et ses cours » peut contenir un identifiant, un nom, une date d'embauche et un code de cours. Ainsi, les informations de tout membre du personnel enseignant dispensant au moins un cours peuvent être enregistrées, mais celles d'un nouveau membre du personnel enseignant n'ayant encore aucun cours à enseigner ne peuvent l'être, sauf en définissant le code de cours sur « null » .
- Anomalie de mise à jour
- Une même information peut figurer sur plusieurs lignes ; par conséquent, les mises à jour de la relation peuvent engendrer des incohérences logiques. Par exemple, chaque enregistrement de la relation « Compétences des employés » peut contenir un identifiant, une adresse et une compétence ; ainsi, une modification d'adresse pour un employé donné peut nécessiter d'être appliquée à plusieurs enregistrements (un par compétence). Si la mise à jour n'aboutit que partiellement – l'adresse de l'employé est mise à jour sur certains enregistrements mais pas sur d'autres – la relation se retrouve dans un état incohérent. Concrètement, la relation fournit des réponses contradictoires quant à l'adresse de cet employé.
- Anomalie de suppression
- Dans certains cas, la suppression de données relatives à certains faits entraîne la suppression de données relatives à des faits totalement différents. La relation « Professeurs et leurs cours » décrite dans l'exemple précédent présente ce type d'anomalie : si un professeur cesse temporairement d'être affecté à des cours, le dernier enregistrement où il apparaît doit être supprimé, ce qui a pour effet de supprimer également le professeur, sauf si le champ « Code du cours » est défini sur null.
Minimiser les modifications lors de l'extension de la structure de la base de données
Une base de données entièrement normalisée peut être étendue pour prendre en charge de nouveaux types de données avec des modifications minimales de sa structure existante. Par conséquent, les applications interagissant avec la base de données sont peu affectées.
Les relations normalisées et les relations qui les unissent reflètent les concepts du monde réel et leurs interrelations.
Formes normales
Codd a introduit le concept de normalisation et ce que l'on appelle aujourd'hui la première forme normale (1NF) en 1970. Codd a ensuite défini la deuxième forme normale (2NF) et la troisième forme normale (3NF) en 1971, et Codd et Raymond F. Boyce ont défini la forme normale de Boyce-Codd (BCNF) en 1974.
Ronald Fagin a introduit la quatrième forme normale (4NF) en 1977 et la cinquième forme normale (5NF) en 1979. Christopher J. Date a introduit la sixième forme normale (6NF) en 2003.
De manière informelle, une relation de base de données relationnelle est souvent décrite comme « normalisée » si elle est conforme à la troisième forme normale. La plupart des relations 3NF sont exemptes d'anomalies d'insertion, de mise à jour et de suppression.
Les formes normales (de la moins normalisée à la plus normalisée) sont :
Forme non normalisée| Contrainte UNF 1NF 2NF 3NF EKNF BCNF 4NF ETNF 5NF DKNF 6NF | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Colonnes scalaires (les colonnes ne peuvent pas contenir de relations ou de valeurs composites) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Chaque attribut non premier a une dépendance fonctionnelle complète sur chaque clé candidate (les attributs dépendent de l' intégralité de chaque clé) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Chaque dépendance fonctionnelle non triviale commence soit par une super-clé , soit se termine par un attribut premier (les attributs ne dépendent que des clés candidates) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Toute dépendance fonctionnelle non triviale commence soit par une superclé, soit se termine par un attribut premier élémentaire (une forme plus stricte de la 3NF). | Toute dépendance multivaluée non triviale commence par une superclé | dépendance de jointure possède un composant superclé | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Chaque dépendance de jointure est triviale |
Exemple
Cela signifie que, disposant de données sous forme non normalisée (la moins normalisée) et visant à atteindre le plus haut niveau de normalisation, la première étape consisterait à garantir la conformité à la première forme normale , la deuxième étape consisterait à garantir la conformité à la deuxième forme normale , et ainsi de suite dans l'ordre mentionné ci-dessus, jusqu'à ce que les données soient conformes à la sixième forme normale .
Cependant, les formes normales au-delà de la 4NF présentent principalement un intérêt académique, car les problèmes qu'elles sont censées résoudre apparaissent rarement en pratique.
Les données de l'exemple suivant ont été intentionnellement conçues pour contredire la plupart des formes normales. En pratique, il est souvent possible d'omettre certaines étapes de normalisation, car les données sont déjà normalisées dans une certaine mesure. Corriger une violation d'une forme normale corrige souvent également une violation d'une forme normale d'ordre supérieur. Dans l'exemple, une table a été sélectionnée pour la normalisation à chaque étape, ce qui signifie qu'à la fin, certaines tables pourraient ne pas être suffisamment normalisées.
Données initiales
Soit une table de base de données ayant la structure suivante, décrivant un livre :
| Titre | Auteur | Nationalité de l'auteur | Format | Prix | Sujet | Pages | Épaisseur | Éditeur | Pays de l'éditeur | Identifiant du genre | Nom du genre | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | Chad Russell | Américain | Couverture rigide | 49,99 |
| 520 | Épais | Presse | USA | 1 | Tutoriel |
Dans cet exemple, on suppose que chaque livre n'a qu'un seul auteur.
Une table conforme au modèle relationnel possède une clé primaire qui identifie de manière unique chaque ligne. Dans notre exemple, la clé primaire est une clé composite { Titre, Format} , indiquée par le soulignement :
| Titre | Auteur | Nationalité de l'auteur | Format | Prix | Sujet | Pages | Épaisseur | Éditeur | Pays de l'éditeur | Identifiant du genre | Nom du genre | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | Chad Russell | Américain | Couverture rigide | 49,99 |
| 520 | Épais | Presse | USA | 1 | Tutoriel |
Satisfaire 1NF
En première forme normale, chaque champ contient une seule valeur. Un champ ne peut pas contenir un ensemble de valeurs ni un enregistrement imbriqué. Le champ « Sujet » contient un ensemble de valeurs de sujet, ce qui signifie qu’il n’est pas conforme. Pour résoudre ce problème, les sujets sont extraits dans une table distincte nommée « Sujet » :
| Titre | Auteur | Nationalité de l'auteur | Format | Prix | Pages | Épaisseur | Éditeur | Pays de l'éditeur | Identifiant du genre | Nom du genre |
|---|---|---|---|---|---|---|---|---|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | Chad Russell | Américain | Couverture rigide | 49,99 | 520 | Épais | Presse | USA | 1 | Tutoriel |
| Titre | Nom du sujet |
|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | MySQL |
| Conception et optimisation de bases de données MySQL pour débutants | Base de données |
| Conception et optimisation de bases de données MySQL pour débutants | Conception |
Au lieu d'un seul tableau sous forme non normalisée , il y a maintenant deux tableaux conformes à la 1NF.
Satisfaire 2NF
Rappelons que la table Book ci-dessous possède une clé composite { Title, Format} , qui ne satisfait pas la 2NF si un sous-ensemble de cette clé est un déterminant. À ce stade de notre conception, la clé n'est pas encore finalisée comme clé primaire ; elle est donc appelée clé candidate . Considérons la table suivante :
| Titre | Format | Auteur | Nationalité de l'auteur | Prix | Pages | Épaisseur | Éditeur | Pays de l'éditeur | Identifiant du genre | Nom du genre |
|---|---|---|---|---|---|---|---|---|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | Couverture rigide | Chad Russell | Américain | 49,99 | 520 | Épais | Presse | USA | 1 | Tutoriel |
| Conception et optimisation de bases de données MySQL pour débutants | Livre électronique | Chad Russell | Américain | 22,34 | 520 | Épais | Presse | USA | 1 | Tutoriel |
| Le modèle relationnel pour la gestion de bases de données : version 2 | Livre électronique | EFCodd | britannique | 13,88 | 538 | Épais | Addison-Wesley | USA | 2 | Science populaire |
| Le modèle relationnel pour la gestion de bases de données : version 2 | Livre de poche | EFCodd | britannique | 39,99 | 538 | Épais | Addison-Wesley | USA | 2 | Science populaire |
Tous les attributs qui ne font pas partie de la clé candidate dépendent de Title , mais seul Price dépend également de Format . Pour être conforme à la 2NF et supprimer les doublons, chaque attribut qui ne fait pas partie de la clé candidate doit dépendre de la clé candidate entière, et non d'une partie seulement.
Pour normaliser ce tableau, faites de {Title} une clé candidate (simple) (la clé primaire) afin que chaque attribut non candidat dépende de la clé candidate entière, et déplacez Price dans un tableau séparé afin que sa dépendance à Format puisse être préservée :
| Titre | Auteur | Nationalité de l'auteur | Pages | Épaisseur | Éditeur | Pays de l'éditeur | Identifiant du genre | Nom du genre |
|---|---|---|---|---|---|---|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | Chad Russell | Américain | 520 | Épais | Presse | USA | 1 | Tutoriel |
| Le modèle relationnel pour la gestion de bases de données : version 2 | EFCodd | britannique | 538 | Épais | Addison-Wesley | USA | 2 | Science populaire |
| Titre | Format | Prix |
|---|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | Couverture rigide | 49,99 |
| Conception et optimisation de bases de données MySQL pour débutants | Livre électronique | 22,34 |
| Le modèle relationnel pour la gestion de bases de données : version 2 | Livre électronique | 13,88 |
| Le modèle relationnel pour la gestion de bases de données : version 2 | Livre de poche | 39,99 |
Désormais, les tables Book et Price sont toutes deux conformes à la 2NF .
Satisfaction 3NF
La table Livre présente toujours une dépendance fonctionnelle transitive ({Nationalité de l'auteur} dépend de {Auteur}, qui dépend de {Titre}). Des violations similaires existent pour l'éditeur ({Pays de l'éditeur} dépend de {Éditeur}, qui dépend de {Titre}) et pour le genre ({Nom du genre} dépend de {ID du genre}, qui dépend de {Titre}). Par conséquent, la table Livre n'est pas en 3NF. Pour résoudre ce problème, nous pouvons placer {Nationalité de l'auteur}, {Pays de l'éditeur} et {Nom du genre} dans leurs propres tables respectives, éliminant ainsi les dépendances fonctionnelles transitives.
| Titre | Auteur | Pages | Épaisseur | Éditeur | Identifiant du genre |
|---|---|---|---|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | Chad Russell | 520 | Épais | Presse | 1 |
| Le modèle relationnel pour la gestion de bases de données : version 2 | EFCodd | 538 | Épais | Addison-Wesley | 2 |
|
| Auteur | Nationalité |
|---|---|
| Chad Russell | Américain |
| EFCodd | britannique |
| Éditeur | Pays |
|---|---|
| Presse | USA |
| Addison-Wesley | USA |
| Identifiant du genre | Nom |
|---|---|
| 1 | Tutoriel |
| 2 | Science populaire |
Satisfaire EKNF
Cette structure de table, comportant une clé primaire composée , ne contient aucun attribut non clé et est déjà en BCNF (et satisfait donc également toutes les formes normales précédentes ). Cependant, en supposant que tous les livres disponibles soient proposés dans chaque zone, le titre n'est pas lié sans ambiguïté à un lieu précis et, par conséquent, la table ne satisfait pas la 4NF .
Cela signifie que, pour satisfaire la quatrième forme normale , ce tableau doit également être décomposé :
|
|
Désormais, chaque enregistrement est identifié sans ambiguïté par une superclé , donc la 4NF est satisfaite.
Satisfaire ETNF
Supposons que les franchisés puissent également commander des livres auprès de différents fournisseurs. Supposons également que la relation soit soumise à la contrainte suivante :
- Si un certain fournisseur fournit un certain titre
- et le titre est fourni au franchisé
- et le franchisé est approvisionné par le fournisseur,
- puis le fournisseur fournit le titre au franchisé .
| ID du fournisseur | Titre | Identifiant du franchisé |
|---|---|---|
| 1 | Conception et optimisation de bases de données MySQL pour débutants | 1 |
| 2 | Le modèle relationnel pour la gestion de bases de données : version 2 | 2 |
| 3 | Apprendre le SQL | 3 |
Ce tableau est en 4NF , mais l'ID du fournisseur est égal à la jointure de ses projections : {{ID du fournisseur, Titre}, {Titre, ID du franchisé}, {ID du franchisé, ID du fournisseur}} . Aucun composant de cette dépendance de jointure n'est une superclé (la seule superclé étant l'en-tête entier), donc le tableau ne satisfait pas l' ETNF et peut être décomposé davantage :
|
|
|
La décomposition permet d'obtenir la conformité à l'ETNF.
Satisfaire 5NF
Pour repérer un tableau ne respectant pas la 5NF , il est généralement nécessaire d'examiner attentivement les données. Prenons le tableau de l'exemple de la 4NF avec une légère modification des données et vérifions s'il respecte la 5NF :
| Identifiant du franchisé | Titre | Emplacement |
|---|---|---|
| 1 | Conception et optimisation de bases de données MySQL pour débutants | Californie |
| 1 | Apprendre le SQL | Californie |
| 1 | Le modèle relationnel pour la gestion de bases de données : version 2 | Texas |
| 2 | Le modèle relationnel pour la gestion de bases de données : version 2 | Californie |
La décomposition de ce tableau réduit les redondances, ce qui donne les deux tableaux suivants :
|
|
La requête reliant ces tables renverrait les données suivantes :
| Identifiant du franchisé | Titre | Emplacement |
|---|---|---|
| 1 | Conception et optimisation de bases de données MySQL pour débutants | Californie |
| 1 | Apprendre le SQL | Californie |
| 1 | Le modèle relationnel pour la gestion de bases de données : version 2 | Californie |
| 1 | Le modèle relationnel pour la gestion de bases de données : version 2 | Texas |
| 1 | Apprendre le SQL | Texas |
| 1 | Conception et optimisation de bases de données MySQL pour débutants | Texas |
| 2 | Le modèle relationnel pour la gestion de bases de données : version 2 | Californie |
La jointure renvoie trois lignes de plus que prévu ; l’ajout d’une autre table pour clarifier la relation aboutit à trois tables distinctes :
|
|
|
Que renverra la jointure maintenant ? Il est en fait impossible de joindre ces trois tables. Cela signifie qu’il n’a pas été possible de décomposer la table Franchisee – Book – Location sans perte de données ; par conséquent, la table satisfait déjà la 5NF .
Avertissement : les données utilisées illustrent le principe, mais ne sont pas nécessairement exactes. Dans ce cas, il serait préférable de décomposer les données comme suit, avec une clé de substitution que nous appellerons « ID du magasin » :
|
|
La fonction JOIN renverra désormais le résultat attendu :
| ID du magasin | Titre | Identifiant du franchisé | Emplacement |
|---|---|---|---|
| 1 | Conception et optimisation de bases de données MySQL pour débutants | 1 | Californie |
| 1 | Apprendre le SQL | 1 | Californie |
| 2 | Le modèle relationnel pour la gestion de bases de données : version 2 | 1 | Texas |
| 3 | Le modèle relationnel pour la gestion de bases de données : version 2 | 2 | Californie |
CJ Date a soutenu que seule une base de données en 5NF est véritablement « normalisée ».
Satisfaire DKNF
Examinons la table Book des exemples précédents et voyons si elle satisfait la forme normale de la clé de domaine :
| Titre | Pages | Épaisseur | Identifiant du genre | ID de l'éditeur |
|---|---|---|---|---|
| Conception et optimisation de bases de données MySQL pour débutants | 520 | Épais | 1 | 1 |
| Le modèle relationnel pour la gestion de bases de données : version 2 | 538 | Épais | 2 | 2 |
| Apprendre le SQL | 338 | Mince | 1 | 3 |
| Manuel SQL | 636 | Épais | 1 | 3 |
Logiquement, l'épaisseur d' un livre est déterminée par son nombre de pages. Autrement dit, elle dépend du nombre de pages , ce qui n'est pas un critère déterminant. Prenons l'exemple d'un livre de moins de 350 pages considéré comme « mince » et d'un livre de plus de 350 pages considéré comme « épais ».
Cette convention est techniquement une contrainte, mais ce n'est ni une contrainte de domaine ni une contrainte de clé ; par conséquent, nous ne pouvons pas nous appuyer sur les contraintes de domaine et les contraintes de clé pour garantir l'intégrité des données.
Autrement dit, rien ne nous empêche de mettre, par exemple, « Épais » pour un livre de seulement 50 pages, et cela rend le tableau non conforme à la DKNF .
Pour résoudre ce problème, une table contenant une énumération définissant l' épaisseur est créée, et cette colonne est supprimée de la table d'origine :
|
|
Ainsi, la violation d'intégrité du domaine a été éliminée et la table est en DKNF .
La normalisation ne permet pas d'éviter tous les cas de résultats impossibles, contradictoires ou imprévisibles. Dans cet exemple, des valeurs minimales et maximales de pages de 1/350 et 200/999 999 999 999 entraîneraient des résultats imprévisibles. Il est donc préférable de spécifier et d'utiliser uniquement le nombre minimal de pages.
Satisfaction 6NF
Une définition simple et intuitive de la sixième forme normale est la suivante : « 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 de la 1NF :
| ID de l'éditeur | Nom | Pays |
|---|---|---|
| 1 | Presse | USA |
doit être décomposée en deux tableaux :
|
|
L'inconvénient majeur de la 6NF réside dans la multiplication des tables nécessaires pour représenter les informations relatives à une seule entité. Si une table en 5NF possède une colonne de clé primaire et N attributs, la représentation de ces mêmes informations en 6NF nécessitera N tables ; les mises à jour de plusieurs champs d'un même enregistrement conceptuel impliqueront des mises à jour dans plusieurs tables ; et les insertions et suppressions nécessiteront également des opérations sur plusieurs tables. C'est pourquoi, dans les bases de données destinées au traitement transactionnel en ligne (OLTP), la 6NF est à proscrire.
Cependant, dans les entrepôts de données , qui ne permettent pas les mises à jour interactives et sont spécialisés dans l'interrogation rapide de grands volumes de données, certains SGBD utilisent une représentation interne en 6NF, appelée stockage en colonnes . Lorsque le nombre de valeurs uniques d'une colonne est bien inférieur au nombre de lignes de la table, le stockage en colonnes permet de réaliser d'importantes économies d'espace grâce à la compression des données. Ce type de stockage permet également l'exécution rapide de requêtes par plage (par exemple, afficher tous les enregistrements où une valeur donnée d'une colonne est comprise entre X et Y, ou inférieure à X).
Dans tous ces cas, le concepteur de base de données n'a pas à effectuer manuellement la normalisation 6NF en créant des tables distinctes. Certains SGBD spécialisés dans l'entreposage de données, comme Sybase IQ , utilisent par défaut un stockage en colonnes, mais le concepteur ne voit alors qu'une seule table à plusieurs colonnes. D'autres SGBD, comme Microsoft SQL Server 2012 et versions ultérieures, permettent de spécifier un « index columnstore » pour une table particulière.