Normalisation (1NF, 2NF, 3NF)
La normalisation est un processus essentiel dans la conception des bases de données relationnelles. Son objectif principal est de structurer les données de manière à éviter la redondance et à minimiser les anomalies lors des opérations d'ajout, de mise à jour ou de suppression. Une base de données bien normalisée garantit une intégrité des données, une meilleure performance et une maintenance plus facile à long terme.
Pourquoi normaliser ?
Éviter les redondances : Une donnée ne doit être stockée qu'une seule fois dans une base de données. La duplication des données peut entraîner des incohérences, notamment si les informations sont modifiées dans un endroit et pas dans un autre.
Prévenir les anomalies : Les anomalies surviennent lorsqu'une base de données est mal structurée. Elles peuvent se manifester sous plusieurs formes, notamment des anomalies d'insertion, des anomalies de mise à jour et des anomalies de suppression.
Les formes normales
La normalisation est divisée en plusieurs étapes appelées formes normales (NF). Chaque forme normale représente un niveau de structuration des données.
Première forme normale (1NF) :
Une table est en 1NF si :
Toutes les colonnes ne contiennent que des valeurs atomiques (c'est-à-dire non divisibles).
Chaque entrée dans une colonne doit avoir une seule valeur (pas de listes ou d'ensembles de valeurs dans une cellule).
Exemple : Une table
commandes
contenant plusieurs produits dans une même colonne n'est pas en 1NF. Pour passer en 1NF, il faut que chaque ligne contienne une seule valeur pour chaque colonne.Non 1NF :
id_commande produits 1
"Produit A, Produit B"
En 1NF :
id_commande produit 1
Produit A
1
Produit B
Deuxième forme normale (2NF) :
Une table est en 2NF si :
Elle est déjà en 1NF.
Toutes les colonnes non clés dépendent entièrement de la clé primaire. Cela signifie qu'il ne doit pas y avoir de dépendance partielle. Une colonne ne doit pas dépendre seulement d'une partie de la clé primaire dans une table à clé composite.
Exemple : Si nous avons une table
commandes
qui stocke des informations sur les clients et les produits, certaines colonnes peuvent dépendre uniquement du client, et d'autres uniquement de la commande. Cela crée des dépendances partielles. Pour corriger cela, il faut diviser la table.Non 2NF :
id_commande id_client nom_client produit 1
101
Alice
Produit A
En 2NF :
Table
clients
:id_client nom_client 101
Alice
Table
commandes
:id_commande id_client produit 1
101
Produit A
Troisième forme normale (3NF) :
Une table est en 3NF si :
Elle est en 2NF.
Toutes les colonnes non clés dépendent directement de la clé primaire et non d'une autre colonne non clé (pas de dépendance transitive).
Exemple : Si une table
employes
contient la colonneville
et que la colonnecode_postal
dépend de laville
, il y a une dépendance transitive. Pour normaliser en 3NF, il faut retirer cette dépendance en créant une nouvelle table pour les informations sur les villes.Non 3NF :
id_employe nom ville code_postal 1
Jean
Paris
75000
En 3NF :
Table
employes
:id_employe nom id_ville 1
Jean
1
Table
villes
:id_ville ville code_postal 1
Paris
75000
Les avantages de la normalisation :
Réduction des redondances : La normalisation élimine les duplications inutiles de données, ce qui permet de réduire la taille de la base de données et de faciliter sa gestion.
Intégrité des données : En structurant les données selon les règles de normalisation, vous évitez les incohérences et assurez que chaque information est maintenue à jour.
Amélioration des performances : Une base de données bien normalisée permet des requêtes plus rapides et des temps de traitement plus courts, car les données sont organisées de manière optimale.
Limites de la normalisation :
Il existe des situations où la normalisation peut poser des problèmes, notamment :
Performances des jointures : Dans certaines applications à fort volume de données, l'utilisation de plusieurs tables nécessitant des jointures complexes peut ralentir les performances.
Désormalisation nécessaire : Dans certains cas, la dénormalisation (ou réduction du niveau de normalisation) peut être nécessaire pour optimiser des requêtes complexes. La désormalisation consiste à réintroduire certaines redondances pour améliorer la vitesse d'exécution des requêtes, en particulier dans les systèmes à haute performance.
Last updated