1NF è il più semplice dei moduli normali: ogni cella in una tabella deve contenere solo un pezzo di informazione e non possono esserci righe duplicate.
2NF e 3NF dipendono dalla dipendenza dalla chiave primaria. Ricordiamo che una chiave primaria può essere composta da più colonne. Come ha detto Chris nella sua risposta:
I dati dipendono dalla chiave [1NF], l'intera chiave [2NF] e nient'altro che la chiave [3NF] (quindi aiutatemi Codd ).
2NF
Supponi di avere una tabella contenente corsi seguiti in un certo semestre e di avere i seguenti dati:
|-----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 |
Questo non è in 2NF , perché la quarta colonna non si basa sull'intera chiave, ma solo su una parte di essa. Il nome del corso dipende dall'ID del corso, ma non ha nulla a che fare con il semestre in cui si svolge. Pertanto, come puoi vedere, abbiamo informazioni duplicate: diverse righe ci dicono che IT101 sta programmando e IT102 è Database. Quindi risolviamo ciò spostando il nome del corso in un'altra tabella, dove CourseID è la chiave INTERA.
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
Nessuna ridondanza!
3NF
Ok, quindi supponiamo di aggiungere anche il nome dell'insegnante del corso e alcuni dettagli su di essi nel RDBMS:
|-----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 |
Ora spero che dovrebbe essere ovvio che TeacherName dipende da TeacherID - quindi questo non è in 3NF . Per risolvere questo problema, facciamo lo stesso che in 2NF: prendiamo il campo TeacherName da questa tabella e mettiamolo in proprio, che ha TeacherID come chiave.
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
Nessuna ridondanza !!
Una cosa importante da ricordare è che se qualcosa non è in 1NF, non lo è nemmeno in 2NF o 3NF. Quindi ogni forma normale aggiuntiva richiede tutto ciò che aveva le forme normali inferiori, oltre ad alcune condizioni extra, che devono essere soddisfatte tutte .