1NF ist die grundlegendste normale Form - jede Zelle in einer Tabelle darf nur eine Information enthalten, und es dürfen keine doppelten Zeilen vorhanden sein.
Bei 2NF und 3NF geht es darum, vom Primärschlüssel abhängig zu sein. Denken Sie daran, dass ein Primärschlüssel aus mehreren Spalten bestehen kann. Wie Chris in seiner Antwort sagte:
Die Daten hängen vom Schlüssel [1NF], dem gesamten Schlüssel [2NF] und nichts als dem Schlüssel [3NF] ab (also hilf mir, Codd ).
2NF
Angenommen, Sie haben eine Tabelle mit Kursen, die in einem bestimmten Semester belegt wurden, und Sie haben die folgenden Daten:
|-----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 |
Dies ist nicht in 2NF der Fall, da die vierte Spalte nicht auf den gesamten Schlüssel angewiesen ist - sondern nur auf einen Teil davon. Der Kursname hängt von der ID des Kurses ab, hat jedoch nichts mit dem Semester zu tun, in dem er belegt ist. Wie Sie sehen, haben wir doppelte Informationen - mehrere Zeilen geben an, dass IT101 programmiert und IT102 Datenbanken sind. Wir beheben dies, indem wir den Kursnamen in eine andere Tabelle verschieben, in der CourseID der GESAMTE Schlüssel ist.
Primary Key |
CourseID | Course Name |
---------------------------|
IT101 | Programming |
IT102 | Databases |
IT103 | Web Design |
Keine Redundanz!
3NF
Okay, nehmen wir an, wir fügen dem RDBMS auch den Namen des Lehrers des Kurses und einige Details dazu hinzu:
|-----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 |
Nun sollte es hoffentlich offensichtlich sein, dass TeacherName von TeacherID abhängig ist - dies ist also nicht in 3NF . Um dies zu beheben, machen wir das Gleiche wie in 2NF - nehmen Sie das Feld TeacherName aus dieser Tabelle und fügen Sie es in eine eigene ein, die TeacherID als Schlüssel hat.
Primary Key |
TeacherID | TeacherName |
---------------------------|
332 | Mr Jones |
495 | Mr Bentley |
242 | Mrs Smith |
Keine Redundanz !!
Eine wichtige Sache, an die Sie sich erinnern sollten, ist, dass wenn etwas nicht in 1NF ist, es auch nicht in 2NF oder 3NF ist. Jede zusätzliche Normalform erfordert also alles , was die unteren Normalformen hatten, sowie einige zusätzliche Bedingungen, die alle erfüllt sein müssen.