it-swarm.com.de

Was sind Datenbank-Normalformen und können Sie Beispiele nennen?

Beim relationalen Datenbankentwurf gibt es ein Konzept der Datenbanknormalisierung oder einfach der Normalisierung, bei dem Spalten (Attribute) und Tabellen (Beziehungen) organisiert werden, um die Datenredundanz zu verringern und die Datenintegrität zu verbessern. (wie geschrieben am Wikipedia ).

Da die meisten Artikel etwas technisch und daher schwieriger zu verstehen sind, möchte ich jemanden bitten, anhand von Beispielen eine verständlichere Erklärung zu schreiben, was 1NF, 2NF, 3NF und sogar 3,5NF (Boyce-Codd) bedeuten.

266
barfoon

1NF ist die grundlegendste Normalform - 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 ganzen Schlüssel [2NF] und nichts als dem Schlüssel [3NF] ab (also hilf mir Codd ).

2NF

Angenommen, Sie haben eine Tabelle mit Lehrveranstaltungen, 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 , da sich die vierte Spalte nicht auf den Schlüssel complete stützt - sondern nur auf einen Teil von es. Der Name des Kurses 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, die uns mitteilen, dass IT101 programmiert und IT102 Datenbanken sind. Wir beheben dies, indem wir den Kursnamen in eine andere Tabelle verschieben, wobei CourseID der GESAMTE Schlüssel ist.

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

Keine Redundanz!

3NF

Angenommen, wir fügen auch den Namen des Lehrers des Kurses und einige Details dazu in das RDBMS ein:

|-----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 fast dasselbe wie in 2NF - nehmen Sie das Feld TeacherName aus dieser Tabelle heraus und setzen Sie es in ein eigenes, das 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 man sich erinnern sollte, ist, dass wenn etwas nicht in 1NF ist, es auch nicht in 2NF oder 3NF ist. Für jede weitere Normalform sind alles die niedrigeren Normalformen sowie einige zusätzliche Bedingungen erforderlich, die alles erfüllt sein müssen.

423
Smashery

Ich hatte noch nie ein gutes Gedächtnis für genaue Formulierungen, aber in meiner Datenbankklasse sagte der Professor meiner Meinung nach immer etwas wie:

Die Daten hängen von der Taste [1NF], der gesamten Taste [2NF] und nur der Taste [3NF] ab.

116
Chris Shaffer

Hier ist eine schnelle, zugegebenermaßen abgeschlachtete Antwort, aber in einem Satz:

1NF: Ihre Tabelle ist als ungeordnetes set von Daten organisiert und es gibt keine sich wiederholenden Spalten.

2NF: Sie wiederholen aufgrund einer anderen Spalte keine Daten in einer Spalte Ihrer Tabelle.

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 Details finden Sie in Wikipedia ...

44
Dave Markle

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 ausführlicher über hier geschrieben

31
Arcturus