1NF - 1ère forme normale
- Unicité des lignes, donc chaque ligne doit avoir un identifiant unique (la clé).
- Ordre des lignes indifférent, en lecture comme en écriture.
-
Atomicité : chaque attribut (cellule) doit contenir des valeurs indivisibles.
Les valeurs doivent correspondre à un type donné. - Pas de duplication de l'information
Table
notes.
| id | eleve | matiere | notes |
|---|---|---|---|
| 1 | Jean Martin | Français | 12, 14 |
| 2 | Jean Martin | Maths | 18, 16 |
| 3 | Jeanne Dupont | Français | 16, 15 |
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 :
| id | eleve | matiere | note |
|---|---|---|---|
| 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 |
Si on veut par exemple modifier un nom, il faut le modifier à plusieurs endroits.
A modifier de cette manière :
Table
notes
| id | id_etudiant | id_matiere | note |
|---|---|---|---|
| 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
| id | nom |
|---|---|
| 1 | Français |
| 2 | Maths |
Table
eleves
| id | nom | prenom |
|---|---|---|
| 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:
- les attributs faisant partie de l'identifiant
- les attributs ne faisant pas partie de l'identifiant
Par exemple, pour modéliser cette situation :
- Un étudiant peut suivre 0 ou plusieurs cours
- Un cours se déroule toujours dans la même salle
Donc si on a cette table :
| id_etudiant | id_cours | salle |
|---|---|---|
| 1 | 1 | A |
| 1 | 2 | B |
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_cours | salle |
|---|---|
| 1 | A |
| 2 | B |
Table de liaison
| id_etudiant | id_cours |
|---|---|
| 1 | 1 |
| 1 | 2 |
3NF - 3ème forme normale
2NF + pas de dépendance transitive par l'intermédiaire d'attributs non identifiantsComme pour la 2NF, on distingue:
- les attributs faisant partie de l'identifiant
- les attributs ne faisant pas partie de l'identifiant
Ou encore : Tous les attributs non identifiants doivent dépendre directement de l'identifiant.
Exemple : Table qui liste des avions
| id_avion | constructeur | modele | capacite | proprietaire |
|---|---|---|---|---|
| 1 | Airbus | A380 | 180 | Air France |
| 2 | Boeing | B747 | 314 | British Airways |
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 :
constructeurdépend demodele, qui ne fait pas partie de l'identifiantcapacitedépend demodele, qui ne fait pas partie de l'identifiant
constructeur et capacite fournissent des informations sur modele, qui ne fait pas partie de la clé).
Pour respecter la 3NF, il faudrait :
| id_avion | modele | proprietaire |
|---|---|---|
| 1 | A380 | Air France |
| 2 | B747 | British Airways |
| modele | constructeur | capacite |
|---|---|---|
| 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é.