Dans une base de données relationnelle, une forme normale caractérise le fait que la structure de la base respecte certaines contraintes de modélisation. Le respect par une base de données d'une forme normale permet de garantir certaines propriétés.

La normalisation consiste à restructurer une base de données pour respecter certaines formes normales, afin d'éviter la redondance des données (des données apparaissent plusieurs fois) et d'assurer l'intégrité des données.

Objectif

Le but de la normalisation est de structurer les données afin d'éliminer la redondance et de garantir la cohérence des informations lors de leur manipulation ou utilisation. Son principal intérêt est de s'assurer qu'aucune anomalie de lecture, d’écriture ou d'insertion (regroupées sous le terme d'anomalies transactionnelles), ne vienne impacter l'efficacité opérationnelle, notamment la performance et la maintenabilité du système.

En pratique, ce processus permet de valider la robustesse d'une conception en vérifiant la pertinence des données au sein des entités et des . Cette décomposition facilite l'évolution du modèle sans compromettre l'intégrité des données existantes.

Panorama des formes normales Codd a introduit le concept de normalisation et qui est maintenant connu comme première forme normale en 1970. Puis Codd a défini la deuxième forme normale (2NF) puis la troisième (3NF) en 1971Codd, E. F. "Further Normalization of the Data Base Relational Model". (Presented at Courant Computer Science Symposia Series 6, "Data Base Systems", New York City, May 24–25, 1971.) IBM Research Report RJ909 (August 31, 1971). Republished in Randall J. Rustin (ed.), Data Base Systems: Courant Computer Science Symposia Series 6. Prentice-Hall, 1972.. Codd et Raymond F. Boyce ont défini la forme normale de Boyce-Codd notée FNBC (BCNF en anglais) en 1974. Les formes normales s’emboîtent les unes dans les autres : le respect d’une forme normale de niveau supérieur implique le respect des formes normales des niveaux inférieurs. En tout dans le modèle relationnel de type OLTP (OnLine Transaction Processing), il existe plusieurs formes normales : La première forme normale notée 1FN (1NF en anglais) ; La deuxième forme normale notée 2FN (2NF en anglais) ; La troisième forme normale notée 3FN (3NF en anglais) ; La forme normale clé élémentaire (EKNF pour Elementary key normal form en anglais) ; La forme normale de Boyce-Codd notée FNBC (BCNF en anglais) ; La quatrième forme normale notée 4FN (4NF en anglais) ; La cinquième forme normale notée 5FN (5NF en anglais) ; La forme normale domaine clef notée FNDC (DKNF en anglais) ; La sixième forme normale notée 6FN (6NF en anglais) rarement présentée. Les trois premières étant les plus connues et utilisées. D'ailleurs, généralement, on dit qu'une base de données est normalisée si elle respecte la 3FN. Contraintes Clé primaire (pas de tuples en doublon) Dépend Valeurs atomiques (une cellule ne peut pas avoir une table comme valeur) Chaque dépendance fonctionnelle non-triviale, soit ne commence pas avec un sous-ensemble strict de clés, ou alors termine avec un attribut premier Chaque dépendance fonctionnelle, soit commence avec une superclé, ou alors finit sur un attribut premier Chaque dépendance fonctionnelle non-triviale, soit commence avec une superclé, ou alors finit sur un attribut premier élémentaire Chaque dépendance fonctionnelle non-triviale commence avec une superclé Chaque dépendance multivaluée commence avec une superclé Chaque dépendance jointe non-triviale possède un composante superclé Chaque dépendance jointe n'a que des composantes superclés Chaque contrainte est conséquence des contraintes de domaine et de clés Toutes les dépendances jointes sont triviales La forme normale vient après la simple validité d’un modèle relationnel, c’est-à-dire que les valeurs des différents attributs soient bien en dépendance fonctionnelle avec l'identifiant (c'est-à-dire la clef primaire au niveau tabulaire), ils sont complètement déterminés par l'identifiant.

Avantages et inconvénients

En pratique, la première et la deuxième forme normale sont nécessaires pour avoir un modèle relationnel juste. L’usage est de modéliser au moins en forme normale. Les formes normales supplémentaires ont leurs avantages et leurs inconvénients.

Les principaux avantages d'une modélisation en forme normale sont : d'éviter la redondance de données; d’interdire les incohérences de données venant des redondances dont une partie seulement a été mise à jour, ce qui rendrait de fait les données inutilisables (différentes versions d’une même information, sans que l’on sache laquelle est valide) ; donc de diminuer la volumétrie globale; de limiter grandement le nombre et la durée des mises à jour qui sont des processus bloquants (écritures).

L’inconvénient essentiel d'une base en forme normale tient aux temps d’accès potentiellement plus longs si les requêtes portent sur des attributs (colonnes) de plusieurs entités (tables) associées, là où une base en forme normale pourrait être optimisée pour répondre à ce type de requête en ne lisant qu'une table.

Pour des petites bases de données, se limiter à la troisième forme normale est généralement une bonne solution d’un point de vue architecture de base de données, mais pour des bases de données plus importantes, il est nécessaire d’aller plus loin, voire — après normalisation et étalonnage — d’effectuer une dénormalisation intelligente dont un benchmark prouve globalement les gains.

La normalisation est importante essentiellement pour les bases OLTP par opposition aux bases OLAP. Et même au sein des bases OLTP il est possible qu’un arbitrage doive être effectué sur le niveau de normalisation selon que les tables de la base de données sont plus sollicitées en lecture ou plus en écriture. Si une table est notablement très intensivement écrite et peu lue, il sera préférable de normaliser le plus possible. À contrario, si une table très intensivement lue est peu écrite, il pourra être judicieux d’être moins strict sur le respect de la normalisation pour permettre d’améliorer les performances d’accès aux données. Mais même dans ces principes généraux, l’inverse peut s’avérer intéressant. C’est le cas par exemple des tables de "log" dans lesquelles généralement la structure est souvent dénormalisée afin d’effectuer l’insertion de ligne en une seule passe, alors qu’elles sont fortement écrites et généralement peu lues. Notons qu’il arrive fréquemment, au sein d’une base OLTP, que des tables soient en lecture seulement, comme ce peut être le cas d’une table servant de calendrier... Dans ce dernier cas, la dénormalisation pourrait être extrême.

Il convient d’être prudent lorsqu’on renonce à la forme normale. Il n’est pas garanti qu’une forme dénormalisée améliore les temps d’accès. En effet, la redondance peut entraîner une explosion des volumes de données qui peuvent écrouler les performances ou saturer les disques durs. Il est donc nécessaire de commencer par une normalisation, étalonner les métriques de temps de réponse sur des volumes réels puis dénormaliser, entreprendre une nouvelle campagne de mesure, comparer, et si le gain est globalement avéré, alors conserver la dénormalisation. Il est important de comprendre que les gains de dénormalisation entraînent systématiquement des pertes sur d’autres objets, ce pourquoi il ne faut pas se contenter de regarder l’arbre qui masque la forêt et donc effectuer des mesures sur l’ensemble des objets de la base et non se consacrer à mesurer uniquement les objets cibles de la dénormalisation.

La normalisation des modèles de données a été popularisée principalement par la méthode Merise.

Les différentes formes normales

Les formes normales sont construites selon le principe des dépendances fonctionnelles. On dit qu’un ensemble d’attributs détermine un autre ensemble d’attributs si : pour deux tuples distincts toute projection des deux tuples sur le premier ensemble d'attributs donnant les mêmes valeurs, induit obligatoirement que les valeurs projetées des tuples sur le deuxième ensemble d'attributs soient identiques. Soient deux tuples t1 et t2, soient deux ensembles d’attributs X, Y (à intersection vide) si la projection de t1 sur X est égale à la projection de t2 sur X alors la projection de t1 sur Y doit être égale à la projection de t2 sur Y. Dans ce cas X détermine Y ou Y dépend fonctionnellement de X (X → Y). On dit aussi que X est le déterminant et Y le déterminé et plus généralement on parle de partie gauche et de partie droite. La partie gauche (déterminant) compose l'identifiant de la relation, tandis que la partie droite compose les informations dépendantes de la connaissance des valeurs des attributs d’un identifiant.

Ceci se note généralement : partie gauche (ou déterminant) → partie droite (ou déterminé)

Dans les articles qui suivent, nous prendrons comme exemple théorique, une relation notée R ayant les attributs A1, A2, A3, A4, A5, A6 dont les trois premiers sont le déterminant et les trois derniers le déterminé. vignette|Relation R avec 6 attributs (A1 à A6). les trois premiers A1, A2, A3 formant le déterminant, et les trois derniers A4, A5, A6 le déterminé.

1FN – Première forme normale Une relation (ayant par définition un identifiant) est en première forme normale si tous les attributs possèdent tous une valeur sémantiquement atomique.

Une autre définition serait : un attribut est dit « atomique » si aucune subdivision de la donnée initiale n’apporte une information supplémentaire ou complémentaire.

Remarques : une valeur atomique n’est pas forcément scalaire. Par exemple une donnée géographique constituée par un ensemble de points formant un polygone définissant une zone géographique précise, n’est à l’évidence pas scalaire, mais parfaitement atomique, car la suppression d’un seul des points du polygone, ne donne plus la même forme géographique. Il y a donc perte du sens initial de l’information ; la notion d’atomicité s’apprécie par rapport à la possibilité de découper l’information en différents éléments ayant chacun un sens propre au regard de l’information initiale que l’on souhaite modéliser. Un exemple concret est donné par le numéro de sécurité sociale français qui est bien non atomique, car découpé en 4 parties distinctes : le sexe (un seul caractère), la date de naissance exprimée de façon partielle (année et mois, 4 caractères), la référence INSEE de la commune de naissance (5 caractères) et enfin, le rang de naissance dans cette commune et à cette date partielle (3 caractères).

Violent l’atomicité, les attributs : constitués par un ensemble de valeurs énumérées (liste, tableaux...) dont les différentes valeurs sont sémantiquement indépendantes ; n’ayant aucune valeur (le « NULL » n’existe pas en algèbre relationnelle) ;

Certains attributs apparaissent posséder plusieurs éléments, mais ne sont pas toujours pour autant, non atomique :