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.
Ich hatte noch nie ein gutes Gedächtnis für genaue Formulierungen, aber in meiner Datenbankklasse sagte der Professor immer etwas wie:
quelle
The data depends on the key [1NF], nothing but the key [3NF]
? Bitte verwirren Sie uns nicht, da 1 Urteilsantwort die Antwort nicht klarstellt, sondern die Besucher verwirrt!Hier ist eine schnelle, zugegebenermaßen geschlachtete Antwort, aber in einem Satz:
1NF: Ihre Tabelle ist als ungeordnete Menge organisiert von Daten, und es gibt keine sich wiederholenden Spalten.
2NF: Sie wiederholen keine Daten in einer Spalte Ihrer Tabelle aufgrund einer anderen Spalte.
3NF: Jede Spalte in Ihrer Tabelle bezieht sich nur auf den Schlüssel Ihrer Tabelle - Sie hätten keine Spalte in einer Tabelle, die eine andere Spalte in Ihrer Tabelle beschreibt, die nicht der Schlüssel ist.
Weitere Einzelheiten finden Sie in Wikipedia ...
quelle
1NF: Nur ein Wert pro Spalte
2NF: Alle Nicht-Primärschlüsselspalten in der Tabelle sollten vom gesamten Primärschlüssel abhängen.
3NF: Alle Nicht-Primärschlüsselspalten in der Tabelle sollten DIREKT vom gesamten Primärschlüssel abhängen.
Ich habe einen Artikel im Detail geschrieben über hier
quelle