Zweipunktnull
Commander
- Registriert
- Dez. 2004
- Beiträge
- 2.546
Hallo,
ich beschäftige mich gerade ein wenig mit Datenbanken und habe Verständnisschwierigkeiten, wenn es um die 3NF bzw. transitive Abhängigkeiten geht. Vielleicht kann mich hier jemand aufklären.
Zunächst mein Verständnis von der 3NF: Die DB ist in der 3NF, wenn sie a) in der 2NF ist und b) keine transitiven Abhängigkeiten besitzt.
Mein Verständnis von transitiver Abhängigkeit: Eine transitive Abhängigkeit bedeutet, dass Nicht-Schlüsselspalten zu anderen Nicht-Schlüsselspalten in Beziehung stehen. Bewirkt eine Änderung an einer Nicht-Schlüsselspalte eine Änderung an einer anderen Nicht-Schlüsselspalte, haben sie eine transitive Abhängigkeit.
Nun, mein Problem ist folgendes: Haben nicht nahezu alle Spalten untereinander Abhängigkeiten?
Folgende Beispiele sind mir begegnet:
Eine Tabelle mit den Spalten autor, titel, copyright, verlag_id und verlag_stadt und dem Primärschlüssel autor & titel ist nicht 3NF, da verlag_stadt transitiv abhängig von verlag_id ist, da sich verlag_stadt ändert, wenn sich verlag_id ändert. Soweit klar.
Im zweiten Beispiel gab es eine Tabelle mit den Spalten id (PK), nachname, vorname, telefon, email, geschlecht, geburtstag, plz, stadt und bundesland. Diese sollte in die 3NF gebracht werden. Die Lösung war dann folgende zwei Tabellen:
1. Tabelle: id (PK), nachname, vorname, telefon, email, geschlecht, geburtstag, plz
2. Tabelle: plz (PK), stadt, bundesland
Mit der Begründung, dass Stadt und BL transitiv abhängig von plz sind.
Hier setzt mein Verständnisproblem an: Sind nicht alle Spalten voneinander abhängig? Wieso ist dies jetzt eine 3NF-DB? Schauen wir uns mal Tab. 2 an. Stadt und Bundesland sind doch transitiv abhängig. Wenn ich das BL ändere, dann ändert sich auch die Stadt. Oder umgekehrt, wenn ich die Stadt ändere, dann ändert sich (höchstwahrscheinlich) auch das BL.
Oder auch in der 1. Tab: Wenn ich den nachnamen ändere, dann handelt es sich höchstwahrscheinlich um eine ganz andere Person, also werden sich auch telefon, email etc. ändern. Wenn ich den vornamen ändere, dann ist es gut möglich, dass sich das geschlecht ändert. Ich hoffe, mein Problem ist verständlich.
Warum verhindert die transitive Abhängigkeit von Stadt und BL von plz die erste Version daran, in der 3NF zu sein? Aber warum verhindert bspw. die Abhängigkeit von Stadt und BL voneinander oder die Abhängigkeit von nachname und telefon in der 2. Version die DB nicht daran, 3NF zu sein?
Ich schätze, ich habe ein grundlegendes Verständnisproblem, was transitive Abhängigkeiten angeht.
EDIT: Folgende Fragestellung ist mir eben noch eingefallen: Wie kann man jemals eine Tabelle zur Speicherung einer Adresse erstellen? Dort gibt es doch auch zig Abhängigkeiten unter Nicht-Schlüsselfeldern. So ist die Straße natürlich abhängig von der Stadt, da es in jeder Stadt andere Straßen gibt...
ich beschäftige mich gerade ein wenig mit Datenbanken und habe Verständnisschwierigkeiten, wenn es um die 3NF bzw. transitive Abhängigkeiten geht. Vielleicht kann mich hier jemand aufklären.
Zunächst mein Verständnis von der 3NF: Die DB ist in der 3NF, wenn sie a) in der 2NF ist und b) keine transitiven Abhängigkeiten besitzt.
Mein Verständnis von transitiver Abhängigkeit: Eine transitive Abhängigkeit bedeutet, dass Nicht-Schlüsselspalten zu anderen Nicht-Schlüsselspalten in Beziehung stehen. Bewirkt eine Änderung an einer Nicht-Schlüsselspalte eine Änderung an einer anderen Nicht-Schlüsselspalte, haben sie eine transitive Abhängigkeit.
Nun, mein Problem ist folgendes: Haben nicht nahezu alle Spalten untereinander Abhängigkeiten?
Folgende Beispiele sind mir begegnet:
Eine Tabelle mit den Spalten autor, titel, copyright, verlag_id und verlag_stadt und dem Primärschlüssel autor & titel ist nicht 3NF, da verlag_stadt transitiv abhängig von verlag_id ist, da sich verlag_stadt ändert, wenn sich verlag_id ändert. Soweit klar.
Im zweiten Beispiel gab es eine Tabelle mit den Spalten id (PK), nachname, vorname, telefon, email, geschlecht, geburtstag, plz, stadt und bundesland. Diese sollte in die 3NF gebracht werden. Die Lösung war dann folgende zwei Tabellen:
1. Tabelle: id (PK), nachname, vorname, telefon, email, geschlecht, geburtstag, plz
2. Tabelle: plz (PK), stadt, bundesland
Mit der Begründung, dass Stadt und BL transitiv abhängig von plz sind.
Hier setzt mein Verständnisproblem an: Sind nicht alle Spalten voneinander abhängig? Wieso ist dies jetzt eine 3NF-DB? Schauen wir uns mal Tab. 2 an. Stadt und Bundesland sind doch transitiv abhängig. Wenn ich das BL ändere, dann ändert sich auch die Stadt. Oder umgekehrt, wenn ich die Stadt ändere, dann ändert sich (höchstwahrscheinlich) auch das BL.
Oder auch in der 1. Tab: Wenn ich den nachnamen ändere, dann handelt es sich höchstwahrscheinlich um eine ganz andere Person, also werden sich auch telefon, email etc. ändern. Wenn ich den vornamen ändere, dann ist es gut möglich, dass sich das geschlecht ändert. Ich hoffe, mein Problem ist verständlich.
Warum verhindert die transitive Abhängigkeit von Stadt und BL von plz die erste Version daran, in der 3NF zu sein? Aber warum verhindert bspw. die Abhängigkeit von Stadt und BL voneinander oder die Abhängigkeit von nachname und telefon in der 2. Version die DB nicht daran, 3NF zu sein?
Ich schätze, ich habe ein grundlegendes Verständnisproblem, was transitive Abhängigkeiten angeht.
EDIT: Folgende Fragestellung ist mir eben noch eingefallen: Wie kann man jemals eine Tabelle zur Speicherung einer Adresse erstellen? Dort gibt es doch auch zig Abhängigkeiten unter Nicht-Schlüsselfeldern. So ist die Straße natürlich abhängig von der Stadt, da es in jeder Stadt andere Straßen gibt...
Zuletzt bearbeitet: