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.
Je n'ai jamais eu une bonne mémoire pour la formulation exacte, mais dans ma classe de base de données, je pense que le professeur a toujours dit quelque chose comme:
la source
The data depends on the key [1NF], nothing but the key [3NF]
? S'il vous plaît ne nous confondez pas, car 1 réponse sentense ne clarifie pas la réponse, mais confond les visiteurs!Voici une réponse rapide, certes massacrée , mais en une phrase:
1NF: votre table est organisée comme un ensemble de données non ordonné et il n'y a pas de colonnes répétitives.
2NF: vous ne répétez pas les données dans une colonne de votre table à cause d'une autre colonne.
3NF: Chaque colonne de votre table ne concerne que la clé de votre table - vous n'auriez pas de colonne dans une table qui décrit une autre colonne de votre table qui n'est pas la clé.
Pour plus de détails, voir wikipedia ...
la source
1NF: une seule valeur par colonne
2NF: toutes les colonnes de clé non primaire du tableau doivent dépendre de la clé primaire entière.
3NF: toutes les colonnes de clé non primaire du tableau doivent dépendre DIRECTEMENT de la clé primaire entière.
J'ai écrit un article plus en détail ici
la source