Vous êtes sur la page 1sur 16

Normalisation de bases de données

Normalisation
Les formes normales sont des niveaux de qualité d'un modèle relationnel.
Elles permettent de vérifier la robustesse de la conception du modèle en
évitant:
La redondance des données
Les problèmes de mise à jour
La cohérence.
Il existe 6 niveaux de de formes normales nous allons nous occuper des 3
premiers uniquement.
 1NF
 2NF
 3NF
 BCNF

Données
non-normalisation 1 NF 2 NF 3 NF BCNF

5 NF 4 NF
Pourquoi normalisation ?
-Réduire l’espace de stockage
-Eviter la redondance de données
-Eviter le coding (trigger,procédure stocké,…)
-Bien structurer des données
-Optimisation de performance:
.temps d’exécution(‘’thin table’’)
.Maximiser ‘’Clustered indexes’’ (trier,rercherche)
.Nombre d’index par table
1NF
 Une relation est dite normalisée ou en première forme normale si :
 aucun attribut qui la compose n'est lui-même une relation, c'est-à-dire si tout attribut
est atomique (non décomposable).
 Cette forme n'utilise que les structures de base d'une relation, elle ne résout pas le
problème de la redondance.
Exemple :
Cette table ne respecte pas 1NF il y a plusieurs mails dans la meme colonne

La solution est de créer un table email pour y stocker les emails


2NF
 Une relation est dite en deuxième forme normale si et seulement si :
 Elle est en première forme normale ;
 Chaque attribut est totalement dépendant de la clé primaire.

 Avec cette forme, les problèmes de redondance ne sont pas entièrement résolus.
 Mais ne pas respecter la 2FN entraîne des redondances. Cela gaspille de l'espace de stockage, et pose
aussi le problème de la mise à jour des données.
Exemple: 2NF
 Dans la table suivante la difficulté de la figure ne dépend que de
la figure et non de la clef primaire entière (skater, figure). 2NF
n’est pas respecté
Exemple: 2NF
 La solution est de décomposer la table en deux qui affichent les
deux dépendances:
 Nom  difficulté
 (Skater,Figure)note
3NF

 Une relation est en troisième forme normale si et seulement si :


 Elle est en 2NF;
 Et chaque attribut non-clé primaire dépend directement de la clé primaire.
 La 3NF est adéquate pour la majorité des designs de BD mais elle n'élimine pas toutes les
redondances et incohérences. Pour cela, Codd a pensé à BCNF qui est une forme plus stricte de 3NF.
Exemple: 3NF
 Dans la table suivante le sexe peut être déduit de l’attribut non
clef civilité. 3NF n’est pas respecté
Exemple: 3NF
 La solution est de créer une table civilité qui contient le sexe
d’une personne en fonction de sa civilité
Cas de dénormalisation 3NF

 Dans table suivante le total peut être calculé. Nous pourrions


donc supprimer cette colonne.
Cas de dénormalisation 3NF
 Mais dans certains cas, même s'il est possible de recalculer les
montants totaux hors taxes et TTC à partir des lignes de commandes
de l'expédition associée à une facture,
 Il peut être judicieux d'ajouter les colonnes total_ht et total_ttc dans
notre table facture. Cela permettrait de:
 Faire des recherches par montant total plus facilement
 Purger les tables expedition, ligne_commande et commande à intervalles
réguliers sans perdre l'information des montants totaux dans les factures.
Boyce-Codd Normal Form (BCNF)

 Une relation est en BCNF si :


 Elle est en 3NF
 Les seules DFE existantes sont celles dans lesquelles une clé détermine un attribut.
4NF

 Permet autant que possible de minimiser l'occurence d'attributs


indépendants à valeur mutiple.
 Une relation est de la 4NF si :
 elle satisfait la 3NF
 les données composant chaque attribut ne comportent aucune
répétition inutile -> dans une même colonne, il faut minimiser les
répétitions.
 Une base qui est 4NF est des plus optimales quoiqu'il soit possible de
généraliser cette dernière afin d'obtenir la 5NF.
4NF Exemple

 Dans la table suivante :


 Conférencier et Livre sont deux entités indépendantes
 Les conférenciers peuvent enseigner n’importe quelle matière
 Pour une matière donnée les étudiants peuvent utiliser plusieurs livres

 Il y a une dépendance multivaluée sur Matière


 La table cours ne respecte pas 4NF
4NF Exemple
 Si nous faisons un « SELECT c.LECTURER, c.BOOKS FROM
COURSE c WHERE SUBJECT = 'Mathematics’; »

 Nous obtenons
 Alors qu’il n’y a pas de dépendance entre conférencier et livre
 La solution pour supprimer la dépendance est de créer deux tables
Conférencier et Livre

Vous aimerez peut-être aussi