1NF est le plus simple des formulaires normaux - chaque cellule d'un tableau ne doit contenir qu'un seul élément d'information et il ne peut y avoir de lignes en double.
2NF et 3NF sont tous dépendant de la clé primaire. Rappelons qu'une clé primaire peut être composée de plusieurs colonnes. Comme Chris l'a dit dans sa réponse:
Les données dépendent de la clé [1NF], de la clé entière [2NF] et rien que de la clé [3NF] (alors aidez-moi Codd ).
2NF
Supposons que vous ayez un tableau contenant les cours suivis au cours d'un certain semestre et que vous disposez des données suivantes:
|-----Primary Key----| uh oh |
V
CourseID | SemesterID | #Places | Course Name |
------------------------------------------------|
IT101 | 2009-1 | 100 | Programming |
IT101 | 2009-2 | 100 | Programming |
IT102 | 2009-1 | 200 | Databases |
IT102 | 2010-1 | 150 | Databases |
IT103 | 2009-2 | 120 | Web Design |
Ce n'est pas dans 2NF , car la quatrième colonne ne dépend pas de la clé entière - mais seulement d'une partie de celle-ci. Le nom du cours dépend de l'ID du cours, mais n'a rien à voir avec le semestre auquel il est inscrit. Ainsi, comme vous pouvez le voir, nous avons des informations en double - plusieurs lignes nous indiquant que IT101 est la programmation et IT102 est les bases de données. Nous corrigeons donc cela en déplaçant le nom du cours dans une autre table, où CourseID est la clé ENTIÈRE.
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
Pas de redondance!
3NF
D'accord, disons que nous ajoutons également le nom de l'enseignant du cours et quelques détails à leur sujet dans le SGBDR:
|-----Primary Key----| uh oh |
V
Course | Semester | #Places | TeacherID | TeacherName |
---------------------------------------------------------------|
IT101 | 2009-1 | 100 | 332 | Mr Jones |
IT101 | 2009-2 | 100 | 332 | Mr Jones |
IT102 | 2009-1 | 200 | 495 | Mr Bentley |
IT102 | 2010-1 | 150 | 332 | Mr Jones |
IT103 | 2009-2 | 120 | 242 | Mrs Smith |
J'espère maintenant qu'il devrait être évident que TeacherName dépend de TeacherID - donc ce n'est pas dans 3NF . Pour résoudre ce problème, nous faisons à peu près la même chose que dans 2NF - retirez le champ TeacherName de ce tableau et mettez-le dans le sien, qui a TeacherID comme clé.
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
Pas de redondance !!
Une chose importante à retenir est que si quelque chose n'est pas dans 1NF, ce n'est pas dans 2NF ou 3NF non plus. Ainsi, chaque forme normale supplémentaire nécessite tout ce que possédaient les formes normales inférieures, plus quelques conditions supplémentaires, qui doivent toutes être remplies.