LOXODATA

Les formes normales

2024-06-17   1701 mots, 8 minutes de lecture   Gabriel Arnaud

Formes normales

Les formes normales sont un ensemble de normes permettant de structurer une base de données relationnelles avec cohérence. Elles visent à réduire la redondance et à améliorer l’intégrité des données. Les formes normales ont été initiées par Edgar Frank Codd, le concepteur du modèle relationnel.

On peut voir les formes normales comme un ensemble de couches dans lequel chaque forme normale est un niveau. Chaque niveau est alors construit sur son précédent en y ajoutant des exigences supplémentaires. Si votre modèle de base de données correspond à la troisième forme normale, alors il correspond obligatoirement aux première et deuxième formes normales. L’application de ces normes facilite également la maintenance et l'évolution des bases de données.

Avantages

La normalisation des bases de données est un processus essentiel dans la conception de systèmes de gestion de données. En éliminant les anomalies potentielles découlant d’une mauvaise modélisation de données, elle a plusieurs avantages :

  • assurer l’intégrité et la fiabilité des données ;
  • optimiser les performances de sa base de données ;
  • réduire les risques de problèmes de mise à jour ;
  • éviter les problèmes tels que les anomalies de lecture et les anomalies d'écriture avec une cohérence des données.

Première forme normale (1NF)

  • Valeur atomique : Une valeur indivisible.
  • Cellule : L’intersection d’une ligne et d’une colonne dans une table de base de données, contenant une valeur de données unique.
  • Attribut : Une colonne dans une table de base de données représentant une entité.

Définition : garantit que chaque cellule contient une seule valeur atomique.

On souhaite stocker dans une table, les différentes informations d’une marque avec ses produits.

Table Brand

Brand ID# Brand Name Products
1 Philips TV, Microwave, Speaker
2 Sony TV, Headphones
3 Dell Laptop, Monitor

La table Brand est identifiée par le Brand ID et est composée d’un attribut Products. Les valeurs de Products rassemblent l’ensemble des produits de la marque. Cette table n’est donc pas conforme à la première forme normale, car les cellules de Products ne contiennent pas une seule valeur atomique.

Avec cette conception, l’extraction de produits uniques implique d’extraire tous les produits de la marque. De plus, cette conception n’empêche pas la duplication d’un même produit pour une même marque.

Il serait préférable de décomposer les différents produits en différentes cellules. La table symboliserait alors les productions et aurait un identifiant composé de Brand ID et du produit :

Table Production

Maker ID# Maker Name Product#
1 Philips TV
1 Philips Microwave
1 Philips Speaker
2 Sony TV
2 Sony Headphones
3 Dell Laptop
3 Dell Monitor

Cette forme normale permet d'éviter la présence de valeurs multiples ainsi que de faciliter l’extraction de données avec des structures de données moins complexes dans une même cellule.

Deuxième forme normale (2NF)

Définition : garantit que chaque attribut non-clé dépend de l’ensemble de la clé primaire, éliminant ainsi les dépendances partielles au sein de la table, en plus de satisfaire à la première forme normale.

Table Product

Product ID# Product Brand Name Reference
1 TV Philips 35"RfC…
2 TV Philips 40"RfC…
3 Microwave Philips ABC-123
4 Speaker Philips XYZ-456
5 TV Sony SON-40"D
6 Headphones Sony GHI-101
7 Laptop Dell JKL-202
8 Monitor Dell MNO-303
9 Tablet Philips PQR-404
10 Camera Sony STU-505
11 Printer Dell VWX-606

La clé primaire de la table Product est composée de l’ID du produit. Le nom de la marque ne doit pas dépendre de l’identifiant du produit, mais de l’identifiant de la marque. On a donc ici un attribut Brand Name qui ne dépend pas de Product ID, clé primaire de la table.

Avec cette conception, nous ne pouvons pas obtenir l’ensemble de la marque depuis un produit, le nom de la marque ne permettant pas une identification certaine. Il serait préférable de remplacer le nom de la marque par son identifiant qui lui est unique comme ci-dessous :

Table Product

Product ID# Product Brand Id Reference
1 TV 1 35"RfC…
2 TV 1 40"RfC…
3 Microwave 1 ABC-123
4 Speaker 1 XYZ-456
5 TV 2 SON-40"D
6 Headphones 2 GHI-101
7 Laptop 3 JKL-202
8 Monitor 3 MNO-303
9 Tablet 1 PQR-404
10 Camera 2 STU-505
11 Printer 3 VWX-606

Table Brand

Brand Id# Brand Name
1 Philips
2 Sony
3 Dell

Cette forme normale permet d'éviter :

  • les problèmes de performance (écriture) ;
  • les problèmes de cohérence des données.

Troisième forme normale (3NF)

Définition : garantit que chaque attribut non-clé ne dépend pas d’un attribut ne participant pas à l’identification, en plus de satisfaire aux deux premières formes normales.

On souhaite stocker dans une table, les différentes informations d’une livraison. Une livraison est composée d’un produit en une certaine quantité.

Table Delivery

Delivery Id# Product Id Product Category Quantity
1 1 TV and song 90
2 3 Home_Appliance 60
3 6 TV and song 110
4 1 TV and song 95

La catégorie du produit dépend normalement du produit et non de Delivery Id, l’identifiant de la livraison. On a donc un attribut Product Category qui ne dépend pas de l’attribut clé Delivery Id. Avec cette conception, la catégorie du produit ne dépend pas du bon élément, les données peuvent ne pas être cohérentes. De plus, la catégorie du produit sera répétée pour différentes livraisons du même produit.

Il serait préférable de définir la catégorie dans la table Product.

Table Delivery

Delivery Id# Product Id Quantity
1 1 90
2 3 60
3 6 110

Table Product

Product ID# Product Brand Id Reference Category
1 TV 1 35"RfC… TV and song
3 Microwave 1 ABC-123 Home_Appliance
6 Headphones 2 GHI-101 TV and song

Cette forme normale assure une cohérence des données et évite la redondance des valeurs.

Forme normale de Boyce-Codd (BCNF)

Définition : garantit que seul un attribut clé permet de déterminer un attribut non-clé et non l’inverse. Une partie de l’identifiant ne dépend pas d’un attribut non identifiant.

Imaginons que notre livraison soit définie par le contenu de la livraison à une date. Il est donc impossible d’avoir deux livraisons du même contenu le même jour.

Table Delivery

Delivery Date# Product Category# Product Id Quantity
2023-12-22 TV and song 1 90
2023-12-22 Home_Appliance 3 60
2024-01-24 TV and song 6 110

L’attribut Product Category dépend de l’attribut Product Id.

On a donc un attribut clé Product Category, qui dépend d’un attribut non-clé Product Id. Avec cette conception, le contenu de la livraison n’est pas suffisamment précis. De plus, une anomalie peut avoir lieu avec deux livraisons d’un même produit, mais de catégories différentes.

Il serait préférable de définir la catégorie dans la table Product, et de définir Delivery par sa date et le produit livré.

Table Delivery

Delivery Date# Product Id# Quantity
2023-12-22 1 90
2023-12-22 3 60
2024-01-24 6 110

Table Product

Product ID# Product Category
1 TV TV and song
3 Microwave Home_Appliance
6 Headphones TV and song

Cette forme normale élimine les anomalies potentielles en assurant une cohérence des données. Elle ajoute aussi de la précision.

Quatrième forme normale (4NF)

Entité : Un objet ou concept représenté par une table et ayant des attributs spécifiques.

Définition : garantit qu’une identification multivaluée doit être cohérente. Une identification multivaluée ne peut être composée d'éléments non dépendants entre eux. Il ne doit pas être possible de créer une relation avec moins d’attributs que l’identification.

Imaginons qu’une marque fabrique différents produits et qu’une marque possède différents sites permettant de créer l’ensemble de ses produits.

Table Production

Brand Id# Product Id# Site#
1 1 Dijon
1 2 Nantes
2 2 Fontainebleau
2 4 Fontainebleau
3 5 Orléans
3 5 Toulouse

La table Production est identifiée par les attributs Brand Id, Product Id et Site. Le site de la marque et ses produits font partie d’un identifiant commun. Cependant, un site fabrique l’ensemble des produits d’une marque et l’ensemble de ses produits sont fabriqués dans chaque site.

Le produit et le site font partie d’une même identification multivaluée sans avoir de lien entre l’un et l’autre. Avec cette conception, une redondance de données peut avoir lieu, par exemple avec les cellules “Fontainebleau”. Il serait préférable de créer une table de relation entre l’entité Brand et l’entité Products et une deuxième table de relation entre l’entité Brand et l’entité Site.

Table Production

Brand Id# Product Id#
1 1
1 2
2 2
2 4
3 5

Table Site

Brand Id# Site#
1 Dijon
1 Nantes
2 Fontainebleau
3 Orléans
3 Toulouse

Cette forme normale permet d'éviter la redondance de données.

Cinquième Forme normale (5NF)

L’application de la 4NF s’applique lorsqu’une relation a une identification multivaluée non obligatoire. Définition : La cinquième forme normale interdit de décomposer une relation si elle implique une perte d’information.

Imaginons qu’une marque fabrique différents produits. Et qu’une marque possède différents sites, chaque site fabriquant certains produits de la marque.

Table Production

Brand Id# Product Id#
1 1
1 2
2 2
2 4
3 5

Table Site

Brand Id# Site#
1 Dijon
1 Nantes
2 Fontainebleau
3 Orléans
3 Toulouse

La table Production forme la dépendance entre l’entité Brand et l’entité Product. La table Site forme la dépendance entre Brand et Site.

Chaque site fabrique certains produits.

La table Site possède une dépendance avec Product Id. Avec cette conception, la relation entre l’entité Site et l’entité Product disparait.

Il serait préférable de créer une même table identifiée par la marque, le produit et le site.

Table Production

Brand Id# Product Id# Site#
1 1 Dijon
1 2 Nantes
2 2 Fontainebleau
2 4 Fontainebleau
3 5 Orléans
3 5 Toulouse

Cette forme normale permet d'éviter une perte de données.

Avantages et inconvénients de la normalisation

En règle générale, la normalisation est effectuée jusqu'à la troisième forme normale, les autres formes normales étant appliquées dans des cas particuliers.

La mise en place de la normalisation permet de réduire la redondance des données et d’assurer leur intégrité. La normalisation peut également améliorer les performances des requêtes en réduisant la taille des tables et en facilitant l’indexation.

Cependant l’application de ces règles peut impliquer d’ajouter des tables et des clés étrangères, et donc de devoir gérer des jointures sur des requêtes plus ou moins complexes. Il est important de trouver un équilibre sur le respect de ces règles, en fonction des besoins spécifiques de l’application et des performances requises.