Normalisierung von Datenbanken - janehlenb/Projektarbeit-ChatGPT-Python GitHub Wiki
Selbstverständlich! Hier ist eine vertiefte Erklärung der Normalisierung von Datenbanken und weitere Normalformen, die über die erste Normalform (1NF) hinausgehen.
Theorie
Die Normalisierung ist ein Prozess zur Organisation von Daten in einer Datenbank, um Redundanz zu reduzieren, Abhängigkeiten zu vermeiden und die Integrität der Daten zu gewährleisten. Sie erfolgt in verschiedenen Stufen, die als Normalformen bezeichnet werden.
Erste Normalform (1NF)
Die erste Normalform (1NF) stellt sicher, dass alle Daten in einer Tabelle atomar sind, das heißt, sie sind nicht weiter unterteilbar. Jedes Feld einer Tabelle enthält nur einen einzigen Wert. Mehrwertige Attribute werden in separate Tabellen ausgelagert und mit Beziehungen verknüpft. Dadurch werden Redundanzen und Inkonsistenzen reduziert.
Ein allgemeines Beispiel einer Tabelle in der ersten Normalform:
| KundenID | Name | Telefon | |
|---|---|---|---|
| 1 | John Doe | [email protected] | 123-456-7890 |
| 2 | Jane Doe | [email protected] | 987-654-3210 |
Zweite Normalform (2NF)
Die zweite Normalform (2NF) baut auf der ersten Normalform auf und behandelt Abhängigkeiten zwischen Spalten. Um in die zweite Normalform zu gelangen, müssen alle Nicht-Schlüsselattribute funktional abhängig vom gesamten Schlüssel sein, nicht nur von einem Teil davon.
Ein allgemeines Beispiel einer Tabelle in der zweiten Normalform:
| BestellungsID | ProduktID | Produktname | Kategorie |
|---|---|---|---|
| 1 | 1 | T-Shirt | Kleidung |
| 1 | 2 | Jeans | Kleidung |
| 2 | 1 | T-Shirt | Kleidung |
| 2 | 3 | Schuhe | Schuhe |
In diesem Beispiel ist "BestellungsID" der Primärschlüssel und "ProduktID" ist der Fremdschlüssel, der auf die Tabelle "Produkte" verweist. Die Spalten "Produktname" und "Kategorie" sind funktional abhängig vom Primärschlüssel und nicht voneinander abhängig.
Dritte Normalform (3NF)
Die dritte Normalform (3NF) baut auf der zweiten Normalform auf und behandelt Transitive Abhängigkeiten. Eine Transitive Abhängigkeit liegt vor, wenn eine Nicht-Schlüssel-Spalte von einer anderen Nicht-Schlüssel-Spalte abhängt, die selbst von einem Schlüssel abhängig ist.
Ein allgemeines Beispiel einer Tabelle in der dritten Normalform:
| BestellungsID | ProduktID | Produktname | Kategorie |
|---|---|---|---|
| 1 | 1 | T-Shirt | Kleidung |
| 2 | 1 | T-Shirt | Kleidung |
| 2 | 3 | Schuhe | Schuhe |
| ProduktID | Preis |
|---|
|
1 | 10.00 | | 3 | 50.00 |
In diesem Beispiel wurden die Spalten "Produktname" und "Kategorie" in eine separate Tabelle "Produkte" ausgelagert. Die Tabelle "Produkte" enthält nur eindeutige Produktinformationen, während die Tabelle "Bestellungen" nur die Informationen enthält, die für Bestellungen relevant sind. Die Tabelle "Produkte" wird über den Primärschlüssel "ProduktID" mit der Tabelle "Bestellungen" verknüpft.
Weitere Normalformen wie die Boyce-Codd-Normalform (BCNF) und die Vierte Normalform (4NF) behandeln fortgeschrittenere Aspekte der Normalisierung und sind für den allgemeinen Gebrauch weniger relevant. Es ist jedoch wichtig, die Grundlagen der 1NF, 2NF und 3NF zu verstehen, um gut strukturierte Datenbanken zu entwerfen.
Praxis
Um das erlernte Wissen zur Normalisierung von Datenbanken in der Praxis anzuwenden, hier eine leichte Aufgabe:
Leichte Aufgabe: Gegeben ist die folgende Tabelle in der ersten Normalform:
| PersonID | Vorname | Nachname | Adresse |
|---|---|---|---|
| 1 | John | Doe | 123 Main St. |
| 2 | Jane | Smith | 456 Elm St. |
| 3 | Bob | Johnson | 789 Oak St. |
Bringe die Tabelle in die zweite Normalform (2NF) und erstelle eine separate Tabelle für die Adressen.
Musterlösung:
| PersonID | Vorname | Nachname |
|---|---|---|
| 1 | John | Doe |
| 2 | Jane | Smith |
| 3 | Bob | Johnson |
| PersonID | Adresse |
|---|---|
| 1 | 123 Main St. |
| 2 | 456 Elm St. |
| 3 | 789 Oak St. |
Für eine schwierigere Aufgabe könntest du eine Tabelle in der dritten Normalform (3NF) entwerfen und die Beziehungen zwischen den Tabellen festlegen.
Ich hoffe, diese zusätzlichen Informationen helfen dir weiter! Bei weiteren Fragen stehe ich gerne zur Verfügung. Happy Coding!