Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Grundlagen der Programmierung: Datenbanken

Dritte Normalform

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die dritte Normalform erfordert es, dass keine Spalte, welche nicht Teil des Primärschlüssels ist, abhängig von einer anderen Spalte ist, die ebenfalls über diese Eigenschaft verfügt.

Transkript

Wir werfen nun einen Blick auf die dritte Normalform. Diese lässt sich, so gut es geht, wie folgt beschreiben: Kein Nicht-Schlüsselfeld das heißt eine Spalte, die nicht Teil des Primärschlüssels ist, ist abhängig von einem anderen Nicht-Schlüsselfeld. In gewisser Weise ist dies zweiten Normalform ähnlich. Die zweite Normalform fragt: "Kann ich einen der Werte in dieser Zeile allein aus einem Teil des zusammengesetzten Schlüssels herausfinden?" Dagegen fragt die dritte Normalform: "Kann ich einen der Werte in dieser Zeile von irgendeinem der anderen Werte in dieser Zeile herausfinden. Und dies sollte nicht möglich sein. Sehen wir uns ein Beispiel an. Die Tabellen befinden sich sowohl in der ersten Normalform, es gibt keine Wiederholungswerte oder Wiederholungsgruppen, als auch in der zweiten Normalform. Das heißt, es gibt keinen Teil dieser Tabellen, der nur von einem Teil des Schlüssels abhängig ist. Um die dritte Normalform zu erreichen, muss ich mir die Nicht-Schlüsselfelder, also "Room", "Capacity" und "Availability" ansehen. Nehmen wir mal die erste Zeile. Wir haben den Kurs SQL 101, der am 1. März stattfindet. Offenbar sind noch vier Plätze verfügbar, und der Kurs findet im Raum 4a mit einer Gesamtkapazität von insgesamt 12 Plätzen statt. Auf dem ersten Blick ist nichts dagegen einzuwenden. Dieser Kurs könnte in einem anderen Raum jedes Mal mit einer anderen Anzahl von verfügbaren Plätzen geplant werden. Soweit ist alles in Ordnung. Das Problem liegt hier zwischen "Room" und "Capacity". Beide Spalten sind nicht Schlüsselfelder, diese Spalten sind damit nicht Teil des Primärschlüssels, doch wenn ich mir die Spalte für "Room" mal genauer ansehe, bemerke ich 4a hat eine Kapazität von 12 Plätzen, 7b hat 14 Plätze, und immer wenn wir in Raum 4a sind haben wir 12 Plätze, und immer wenn wir in 7b sind haben wir 14 Plätze. Diese Angabe brauche ich nicht zu wiederholen. Ich könnte die Kapazität von "Room" allein aus "Room" herausfinden. Ich habe ein Nicht-Schlüsselfeld, das auf einem anderen Nicht-Schlüsselfeld basiert. Diese Informationen brauchen wir deshalb eben nicht in derselben Tabelle zu speichern. Sicher haben Sie schon erraten, was wir hier tun müssen. Wir brauchen eine eigene Tabelle. Wir ziehen also Capacity aus der Tabelle "Event" heraus und behalten nur noch "Room", und das heißt, solange Room uns seine feste Kapazität angibt, erstellen mir dafür eine eigene Tabelle. 4A hat immer 12, und 7b hat immer 14 freie Plätze und so weiter. Nun haben wir die dritte Normalform erreicht. Kein Nicht-Schlüsselfeld ist von einem anderen nicht Schlüsselfeld abhängig. Wie Sie sehen, dreht sich alles um die Redundanz von Informationen. Genau das ist es, was wir mit der Normalisierung versuchen. Ein anderes Beispiel für die dritte Normalform. Angenommen wir haben eine Tabelle "OrderItem", mit der die verschiedenen Komponenten einer Rechnung, die sie an Kunden stellen, berechnet werden. Dafür besitzt sie eine "ProductID" mit einer Menge, das heißt hier "Quantity", einem Einzelpreis, das ist hier der "UnitPrice", und einer Gesamtsumme, das heißt hier "Total". Das Problem, wir haben "Quantity" 4 mit "UnitPrice" von 10 $, damit ist "Total" 40 $. Merken Sie was? Wir können sehen, dass die Spalte "Total" rein auf "Quantity" multipliziert mit "UnitPrice" basiert. Nun sind "Quantity" und "UnitPrice" beides Nicht-Schlüsselfelder, somit finden wir "Total" aus diesen anderen beiden Nicht-Schlüsselfeldern heraus. Dies brauchen wir gar nicht zu tun, wir müssen dies nicht in der Datenbank speichern. Wir brauchen in unserer Tabelle keine Informationen zu speichern, die sich später berechnen lassen. Eine der wichtigsten Gründe hierfür ist Konflikte zu vermeiden. Wenn ich in diesem Beispiel eine Zeile habe, die eine Quantity von 4 angibt und einen UnitPrice von 10, die Spalte "Total" aber den Wert 50 enthält, haben wir hier ein Problem. Ist nun die Spalte "Total" falsch oder ist die Spalte "Quantity" schuld ? Solche Daten sind einfach nicht mehr sinnvoll. Wir entfernen also einfach die Spalte "Total" aus dieser Tabelle. Die dritte Normalform hilft uns diese potenziellen Probleme zu erkennen. Nur eine kleine Randbemerkung. Wenn Sie es wie in derartigen Fällen als zweckmäßig erachten, eine Gesamtsummespalte in der Tabelle zu speichern, dann können Sie auch eine sogenannte berechnete Spalte definieren. Diese Option bieten viele Datenbanksysteme an. Dabei wird der Wert nicht tatsächlich in der Datenbank gespeichert, er ist nur eine komfortable, Nur-Lesen Fiktion und der Wert einer solchen Spalte wird automatisch, basierend auf den anderen Spalten in der Tabelle berechnet.

Grundlagen der Programmierung: Datenbanken

Fangen Sie ganz von vorne an und erfahren Sie alles über die Grundlagen zu Datenbanken und deren Einsatzzwecke, um danach eigene Lösungen und Anwendungen zu entwickeln.

3 Std. 6 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!