Formes normales

« the Truth, the whole Truth, and nothing but the Truth, so help me God »
Cette phrase à prononcer lorsqu'on témoigne devant un tribunal anglophone a été détournée en
« the key, the whole key, nothing but the key so help me Codd ».
Plus précisément : « Chaque attribut ne faisant pas partie de la clé doit fournir une information à propos de la clé, toute la clé, rien que la clé »

1NF - 1ère forme normale

Exemple : base permettant de gérer les notes des étudiants.

Table notes.
idelevematierenotes
1 Jean Martin Français 12, 14
2 Jean Martin Maths 18, 16
3 Jeanne Dupont Français 16, 15
Premier problème : la colonne notes contient des valeurs non atomiques.
Pose problème par exemple pour lister les étudiants ayant eu plus de 15 en français.
A modifier de cette manière :
idelevematierenote
1 Jean Martin Français 12
2 Jean Martin Français 14
3 Jean Martin Maths 18
4 Jean Martin Maths 16
5 Jeanne Dupont Français 16
6 Jeanne Dupont Français 15
Deuxième problème : les noms des étudiants et des matières sont dupliqués dans plusieurs cellules.
Si on veut par exemple modifier un nom, il faut le modifier à plusieurs endroits.
A modifier de cette manière :
Table notes
idid_etudiantid_matierenote
1 1 1 12
2 1 1 12
3 1 2 18
4 1 2 16
5 2 1 16
6 2 1 15
Table matieres
idnom
1 Français
2 Maths
Table eleves
idnomprenom
1 Martin Jean
2 Martin Jeanne

2NF - 2ème forme normale

1NF + pas de dépendance partielle.
Concerne des tables dont la clé primaire (ou identifiant) est une combinaison de plusieurs colonnes.
On distingue: La 2NF peut s'exprimer par : tout attribut ne faisant pas partie de l'identifiant doit dépendre de l'intégralité de l'identifiant.
Par exemple, pour modéliser cette situation : Comme on a un lien de plusieurs à plusieurs entre les étudiants et les cours, on a une table de liaison.
Donc si on a cette table :
id_etudiantid_courssalle
1 1 A
1 2 B
La clé est ici une combinaison de id_etudiant et id_cours.
Mais la salle ne dépend que du cours, donc d'une partie de l'identifiant.
Il faut alors introduire une table supplémentaire :
Table cours
id_courssalle
1 A
2 B
Table de liaison
id_etudiantid_cours
1 1
1 2

3NF - 3ème forme normale

2NF + pas de dépendance transitive par l'intermédiaire d'attributs non identifiants
Comme pour la 2NF, on distingue: La 3NF peut s'exprimer ainsi : Un attribut non identifiant ne dépend pas d’un ou plusieurs attributs ne participant pas à l'identifiant.
Ou encore : Tous les attributs non identifiants doivent dépendre directement de l'identifiant.

Exemple : Table qui liste des avions
id_avionconstructeurmodelecapaciteproprietaire
1 Airbus A380 180 Air France
2 Boeing B747 314 British Airways
Ici, l'identifiant est id_avion.
Sachant que la capacité d'un avion et son constructeur dépendent de son modèle, cette table ne respecte pas la 3NF à deux reprises : (cf "rien que la clé" : ici, constructeur et capacite fournissent des informations sur modele, qui ne fait pas partie de la clé).

Pour respecter la 3NF, il faudrait :
id_avionmodeleproprietaire
1 A380 Air France
2 B747 British Airways
modeleconstructeurcapacite
A380 Airbus 180
B747 Boeing 314

Rappel : une relation est dit transitive si A est en relation avec B et B est en relation avec C => A est en relation avec C.
Exemple : la relation "est inférieur à" est transitive : A < B et B < C => A < C

On parle de "dépendance transitive" par le biais de la relation "dépend de" :
capacite dépend de modele et modele dépend de id_avion.
Donc capacite dépend de id_avion par le biais de modele, c'est à dire par transitivité.