So...auf zur nächsten Runde...
Hallöle Ihr Datenbankspezialisten.
Habe bei der TU Ilmenau ein interessantes kleines Skript zum Thema
Datenbanken gefunden:
(
http://www.tu-ilmenau.de/fakia/fileadmi ... orKap6.pdf)
Bei meiner Suche zu einer Erklärung zu den Normalformen stiess ich darauf.
Hier nun meine Fragen, die ich wieder durch Grafiken unterstütze:
Ausganstabelle:
[ externes Bild ]
So...gehen wir mal von der 1NF aus.
Ich weiss....die Namen sind nicht wirklich in der 1NF, soll hier aber egal sein.
Die 2NF sieht dann so aus:
[ externes Bild ]
Als ERM sehe ich das so: [Kunde (1,*)]----<bucht>----[Flug(1,*)]
An dieser Stelle schiebe ich mal kurz die Regeln zur Überführung des ERMs in ein physisches Datenmodell ein:
Regel 1: Bei 1:1 wo beide Seiten obligatorisch (muss) sind, benötigt man 1 Tabelle.
Regel 2: Bei 1:1 wo eine Seite obligatorisch ist, benötigt man 2 Tabellen.
Regel 3: Bei 1:1 wo beide Seiten nichtobligatorisch (kann) sind, benötigt man 3 Tabellen.
Regel 4: Bei 1:n wo die n-Seite obligatorisch ist, benötigt man 2 Tabellen.
Regel 5: Bei 1:n wo die n-Seite nichtobligatorisch ist, benötigt man 3 Tabellen.
Regel 6: Bei n:m Beziehungen sind die Ausprägungen egal, es werden immer 3 Tabellen benötigt.
Da ich ja schrieb, dass ich das ERM so sehe:
[Kunde (1,*)]----<bucht>----[Flug(1,*)]
tritt hier Regel 6 in Kraft. Es werden also drei Tabellen benötigt.
Wenn die Beziehung so wäre:
[Kunde (0,1)]----<bucht>----[Flug(0,1)]
dann würde Regel 3 greifen.
Der noch nicht untersuchte Fall mit drei Tabellen wäre 1:n mit
nichtobligatorischer n-Seite. Da nur die n-Seite untersucht wird,
wären viele Fälle als ERM möglich:
- [Kunde (0,1)]----<bucht>----[Flug(0,1)]
- [Kunde (0,*)]----<bucht>----[Flug(0,1)]
- [Kunde (1,1)]----<bucht>----[Flug(0,1)]
- [Kunde (1,1)]----<bucht>----[Flug(0,1)]
- [Kunde (0,1)]----<bucht>----[Flug(0,*)]
- [Kunde (0,*)]----<bucht>----[Flug(0,*)]
- [Kunde (1,1)]----<bucht>----[Flug(0,*)]
- [Kunde (1,1)]----<bucht>----[Flug(0,*)]
Wenn ich das alles richtig verstanden habe, sollte das korrekt sein.
So, nun mal eine echte Frage.
Laut Regel 2 darf ich nur zwei Tabellen einsetzen, wenn eine Seite in der
1:1 Beziehung obligatorisch ist.
Wenn mein ERM also so aussehen würde:
[Kunde (1,*)]----<bucht>----[Flug(0,*)]
dann heisst das ja:
Ein Kunde (und zwar mindestens einer) kann entweder gar keinen Flug oder aber (theoretisch) unendlich viele Flüge buchen.
Ein Flug wird entweder von keinem Kunden gebucht oder aber es können auch (theoretisch) unendlich viele Kunden sein.
Macht in der Praxis vielleicht nicht viel Sinn, mit leerem Flugzeug Richtung Süden zu fliegen.
Wie aber würden meine Tabellen aussehen ?
Mein Vorschlag:
[ externes Bild ]
Die Regel besagt nämlich dass der Primärschlüssel der nichtobligatorischen
Seite zugleich der Fremdschlüssel in der Tabelle der obligatorischen
Seite ist. (In der Tabelle Kunden ist Flug der Fremdschlüssel)
Puh...soll erstmal bis hier reichen.
Wenn mir jemand diesen ganzen Gehirnschmalz bestätigen kann,
dass ich also richtig liege und das soweit korrekt verstanden habe,
dann schiebe ich noch etwas mit der 3NF nach.
Vielen Dank für Eure Mühe !
Souli