Normalisierung - bm156661/node.js GitHub Wiki

Normalisierung

These: 20% der Daten in Unternehmen werden in Excel verwaltet.

Was ist der Vorteil einer relationalen Datenbank gegenüber Excel?

Bessere Datenstruktur: Tabellen sind verknüpft, Daten werden nicht doppelt gespeichert. Mehr Daten möglich: Schneller und stabiler bei Millionen von Datensätzen. Gleichzeitiger Zugriff: Mehrere Nutzer können sicher gleichzeitig arbeiten. Abfragen mit SQL: Komplexe Auswertungen und Filter sind einfacher. Fehlervermeidung: Datenbankregeln sorgen für mehr Genauigkeit und Konsistenz.

  • Mit Lese- und Schreibrechten kann der Zugriff in Datenbanken gesteuert werden.
  • Datenbanken können viel größere Datenmengen effizienter verwaltet werden. Excel ist begrenzt und wird ggf. langsamer.
  • Bei gleichzeitiger Bearbeitung sind in Excel ggf. Sperrungen der Datei möglich.
  • In Excel sind die Daten unter Umständen redundant. Datenbanken vermeiden Redundanz. Redundanz bedeutet, dass Daten mehrfach gespeichert werden und sich dadurch evtl. widersprechen.
  • In Datenbanken kann man verhindern, dass Daten (versehentlich) gelöscht werden, die an anderer Stelle noch benötigt werden.

Beispiel zur Redundanz in Excel:

| Vorname | Nachname | PLZ   | Ort
| Pit     | Kiff     | 46325 | Borken
| Till    | Muster   | 46325 | Borken

In der Beispieltabelle widersprechen sich die Postleitzahlen. Es ist unklar, welche Postleitzahl richtig ist. In Datenbanken werden Daten widerspruchsfrei gespeichert.

Wie speichern wir Daten in einer Datenbank so ab, dass die Fehler oben vermieden werden?

Beispiel: CD-Sammlung

image

Die Daten werden nun Schrittweise für die Datenbank aufbereitet.

  1. Die Daten werden in die erste Normalform (1NF) gebracht.
  2. Die Daten werden in die zweite Normalform (2NF) gebracht.
  3. Die Daten werden in die dritte Normalform (3NF) gebracht.

Es gilt: Eine Tabelle ist in 3NF, wenn sie die Forderungen der 3NF erfüllt und bereits in 2NF ist. Eine Tabelle ist in 2NF, wenn sie die Forderungen der 2NF erfüllt und bereits in 1NF ist.

Forderungen der 1NF nach Codd:

  • Keine mehrfach vorkommenden Spalten
  • Jede Spalte muss einen eindeutigen Namen tragen. Das geschieht durch einen Primärschlüssel (primary key)
  • Werte in Zellen müssen atomar sein, also nicht weiter teilbar
  • Keine Listen, Tabellen oder Aufzählungen in einer Zeile.

Wir bringen die CD-Sammlung in Schritt 1 nach 1NF

Problem #1: Die Liednamen werden hier aufgezählt. Problem #2: Zeile müssen eindeutig identifizierbar sein.

Lösung #1: Die Aufzählung wird aufgelöst, indem für jedes Lied eine weitere Zeile hinzugefügt wird. Lösung #2: Künstlername + CDTitel + Liedname werden zum zusammengesetzen primary key.

| **Künstlername** | Geburtsdatum | **CDTitel** | Label | LandKürzel | Land      | **Liedname**          | Spieldauer |
| Santana          | 20.07.1947   | Best of     | TCM   | Bra        | Brasilien | Black Magic Woman     | 56:32      |
| Santana          | 20.07.1947   | Best of     | TCM   | Bra        | Brasilien | Europa                | 56:32      |
| Santana          | 20.07.1947   | Best of     | TCM   | Bra        | Brasilien | Aqua Marine           | 56:32      |
usw.   

CS-Sammlung (**Künstlername**, Geburtsdatum, **CDTitel**, Label, LandKürzel, Land, **Liedname**, Spieldauer)

Forderungen der 2NF nach Codd:

  1. Tabelle muss bereits in 1NF sein.
  2. Alle Nichtschlüssel-Attribute müssen vollständig abhängig vom Primärschlüssel der Tabelle sein.

Wir bringen die CD-Sammlung in Schritt 2 nach 2NF

Für jedes Nichtschlüsselattribut wird die Frage gestellt: "Können sie mir den Wert nennen, wenn ich nur einen Teil des zusammengesetzten Primärschlüssels gebe?"

Konkret: "Können sie mir das Geburtsdatum nennen, wenn ich den Künstlername 'Santana' gebe?" Antwort: "Ja" -> Also hängt das Geburtsdatum nur vom Künstlernamen ab.

Wenn die Antwort "ja" ist, dann wird jetzt das Nichtschlüsselattribut in eine neue Tabelle verschoben. Der Künstlername wird zum Primärschlüssel der neuen Tabelle. Die Tabellen sehen jetzt so aus:

CS-Sammlung (Künstlername, CDTitel, LandKürzel, Land, Liedname, Spieldauer)

Künstler (Künstlername, Geburtsdatum)

KünstlerCD (Künstlername, CDTitel, Label, LandKürzel, Land)

Forderungen der 3NF nach Codd:

  1. Tabelle muss bereits in 2NF sein.
  2. Es darf keine Abhängigkeiten zwischen Nichtschlüsselattributen geben.

Für jedes Nichtschlüsselattribut ist die Frage zu stellen: "Können sie mir den Wert nennen, wenn ich den Wert eines anderen Nichtschlüsselattribut gebe?"

Konkret: "Können sie mir das Land nennen, wenn ich ihnen "DE" gebe?"

´´´ 3NF_CD-Sammlung (Künstlername, CDTitel, Liedname)

Künstler (Künstlername, Geburtsdatum)

KünstlerCD (Künstlername, CDTitel, Label, LandKürzel, Land, Spieldauer)

3NF_Land (Landkürzel, Land)

´´´ Die Tabelle CD-Sammlung hat keine NS-Attribute. Also ist die Tabelle automatisch in 3NF, sobald sie in NF ist. Die Tabelle Künstler hat nur ein NS-Attribut. Also ist die Tabelle automatisch in 3NF, sobald sie in 2NF ist. Das Land ist abhängig vom Landkürzel. Konkret: Wenn ich "DE" gebe, dann ist die Antwort eindeutig "Deutschland". Das abhängige Attribut wird nun ausgeschnitten und in eine neue Tabelle eingefügt. Dasjenige Attribut, von dem das abhängige abhängt, wird zum Schlüssel in der neuen Tabelle.