Hilfe bei 2. Normalenform, NichtSchlüssel-Attribute bestimmen
-
Hallo,
wie der Titel schon sagt habe ich so meine Probleme beim überführen einer Datenbank in die zweite Normalenform. Ich habe im Internet schon fröhlich gesucht und folgendes immer wieder gefunden:
Eine Tabelle ist noch nicht in zweiter Normalform, wenn sie einen zusammengesetzten Primärschlüssel hat und ein Nichtschlüssel-Attribut nicht vom ganzen Primärschlüssel, sondern nur von einem Teilschlüssel abhängt. In diesem Fall wird das Nichtschlüssel-Attribut mit dem Primärschlüssel-Teil, von dem es funktional abhängig ist, in eine eigene Tabelle herausgezogen.
http://www.sql-und-xml.de/sql-tutorial/zweite-normalform-funktionale-abhaengigkeit.html
soweit so gut. Jetzt habe ich aber das Problem meine Nichtschlüsselattribute zu bestimmen:
Ein Schlüssel ist eine Menge von Attributen, mit dem eine Datenzeile eindeutig identifiziert werden kann. [...] Ein Schlüssel-Attribut ist schließlich ein Attribut, das zu mindestens einem Schlüssel gehört, ansonsten handelt es sich um ein Nicht-Schlüssel-Attribut.
Jetzt ist mein Problem, dass ich doch die Menge von Attributen an sich beliebig wählen kann, und somit so gut wie jedes Attribut zu einem Schlüsselattribut umbauen kann?!
z.b. Bibliothek:
Ich kann die Kundennummer als Primärschlüssel nehmen, aber doch auch die Menge von Name, Vorname und Geburtstag. Oder Name Vorname Autor Buchtitel.
Wo liegt da mein Denkfehler? Verzeiht die wahrscheinlich triviale Frage, bin noch absoluter Anfänger auf diesem Gebiet
VIelen Dank im Voraus!
-
Schau dir mal das Beispiel bei Wikipedia an: http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#Zweite_Normalform_.282NF.29
Dort ist das eigentlich ganz gut erklärt, d.h. "Albumtitel", "Interpret" und "Jahr der Gründung" hängen nur von der "CD_ID" ab, während nur der (Song)Titel von "Track" abhängt.
Daher muß man daraus zwei Tabellen machen, um die 2. NF zu erfüllen.Und bei deinem Beispiel ist es ja ähnlich, da "Name", "Vorname" und "Geburtstag" ja zum Kunden gehören, während "Autor" und "Buchtitel" zur konkreten Bestellung gehören (so habe ich jetzt mal dein Beispiel verstanden), d.h. in der Bestellung sollte nur ein Feld "Kundennummer" und in einer sogenannten Stammtabelle dann die Infos über den Kunden.
-
je mehr Schlüsselattribute du hast, desto schwerer wirst du die zweite Normalform erfüllen können, da ja jedes weitere Attribut von jedem Schlüsselattribut abhängen muss. Und den Schlüssel einfach zu erweitern ist nicht wirklich praktikabel.
Und du sagst ja selbst, warum Name und Vorname nichts im Schlüssel zu suchen haben: weil beide Felder nicht geeignet sind, einen Datensatz eindeutig zu bestimmen. Namen sind weder eindeutig, noch ändern sie sich nicht, eignen sich also nicht einen Kunden zu identifizieren und sind damit keine Schlüsselattribute.
Selbst eine Kombination aus nicht eindeutigen Attributen, die zusammen genommen eine Eindeutigkeit gewährleisten (Name, Vorname, Wohnort z.B.) sind dann ungeeignet, wenn sich einer der Attribute ändern kann.
Autor und Buchtitel eignet sich auch nicht, ein Buch eindeutig zu identifizieren. Der Autor kann eine neue Auflage herausbringen, den Verlag wechseln, eine Taschenbuchausgabe veröffentlichen, etc.
-
Herzlichen Dank euch beiden!
Ich denke mir hat die Information mit der Unveränderlichkeit gefehlt.
Viele Grüße
chmbw