# SQL - Datenbank Normalisierung und ERD - Klausur



## Ham_burg (6. Mai 2012)

Hallo,

ich habe eine Frage an euch. Wir haben in unserer Schule eine Klausur in dem Fach Datenbanken geschrieben. Mehr als die hälfte der Klasse hat diese versemmelt. Wir sind der Meinung, dass Die Aufgabe so nicht zu lösen war. Ich schreibe euch mal die Aufgabenstellung auf. 
Vielleicht kann ja mal jemand etwas dazu schreiben, der sich damit auskennt. Die Lösung hängt als Bild im Anhang. Ich bin der Meinung, dass die Lösung nicht mal der 2. Normalform entspricht. Und damit ja auch gegen die geforderte 3.

Aufgabenstellung: 
Für einen Flughafen soll eine Datenbank modelliert werden. 
Eine Fluggesellschaft besitzt Flugzeuge und beschäftigt die Flug-Besatzung. Die Besatzungsmitglieder fligen die in der Fluggesellschaft befindlichen Flugzeuge. Jeder Flug besitzt eine eigene Flugnummer. Besatzungsmitglieder dürfen nur für eine Fluggesellschaft fliegen und dürfen nur einmalig an einem Flug teilnehmen.

Folgender Ausschnitt der Tabelle wird vom Flughafen geführt:

Besatzung, Gesellschaft | Typ              | Flugzeug-Alter  | Flugnummer
Habicht, Gans, Air XYZ    |Bong 747      | 4                      | 1001,1002
Habicht, Air XYZ              |AirBike A380 | 1                      | 1003
Raabe, AIRXpress          | Bong 747    | 2                       |1004,1005


Daraus sollten wir ein ERD erstellen welches der 3. Normalform entspricht.


----------



## Lime (6. Mai 2012)

Ich bin mir nicht sicher wo das Problem liegt, allerdings hätte ich - rein durch den Text - die Aufgabe genau so gelöst.
Aus dem Text entnehme ich folgende Komponenten:
- Fluggesellschaften
- Flugzeuge
- Flug-Besatzung
- Flüge

Wenn ich ehrlich bin, ist die Teilnahme-Tabelle überflüssig. Alles was dort vorkommt, steht bereits in der Flüge-Tabelle.
Aus reinem Hausverstand hätte ich die Verknüpfungen auch richtig gesetzt.


----------



## Ham_burg (6. Mai 2012)

Hi,
ich hab mich geirrt. Ich habe 3 Maschinen und davon sind 2 mit der gleichen Bezeichnung. Da diese Maschinen unterschiedliches Alter haben, muss ich die doch in eine extra Tabelle packen.

Ausserdem hat der Dozent, in der Tabelle Teilnahme einen zusammengesetzten Primärschlüssel gewählt. Und wenn ich das richtig verstanden habe, ist das doch auch nicht zulässig bei der Normalisierung, oder ?

Also entspricht die Lösung meiner Meinung nach nicht der 3. Normalform


----------



## Lime (6. Mai 2012)

Muss nicht sein. Du kannst das Baujahr entweder direkt in die Modelltabelle reinschmeißen (eher sinnvoll), aber auch eine extra Tabelle machen. Sinnlos mMn, weil du dann genauso wieder eine Zahl (ID) hast und das noch verknüpfen musst. Macht im Endeffekt glaub ich mehr Traffic als alles andere. 
Oder wie meinst du das mit Baujahr? Wenn eine Maschine im Dez 2011 angefangen wurde und Jan 2012 aufgehört wurde, dann ist sie 2011/2012? In dem Fall sollte eine extra Tabelle vielleicht doch her, was aber keine all zu großen Schwierigkeiten bereiten sollte.

Wie ich sehe steht da das Alter als einfache Zahl drin. Demnach kann man einfach ein Baujahr in der Flugzeugtabelle reinhauen, das reicht aus, denn ein Flugzeug wurde nicht in zwei Jahren gebaut (siehe Beispiel). Vielleicht, weil das Fertigstellungsdatum ausschlaggebend ist. Jedenfalls ist es unklug, das Alter - wie du bereits richtig gedacht hast - ohne Baujahr anzugeben, weil man es jährlich ändern müsste.


----------



## Ham_burg (6. Mai 2012)

Hi,
ich hab mich geirrt. Ich habe 3 Maschinen und davon sind 2 mit der gleichen Bezeichnung. Da diese Maschinen unterschiedliches Alter haben, muss ich die doch in eine extra Tabelle packen.

Ausserdem hat der Dozent, in der Tabelle Teilnahme einen zusammengesetzten Primärschlüssel gewählt. Und wenn ich das richtig verstanden habe, ist das doch auch nicht zulässig bei der Normalisierung, oder ?

Also entspricht die Lösung meiner Meinung nach nicht der 3. Normalform


----------



## Ham_burg (6. Mai 2012)

Gott bin ich bekloppt. Nun habe ich auch noch das falsche (2.) Posting editiert.... Argh... ich sollte schlafen gehen.


----------



## Lime (7. Mai 2012)

Wie gesagt, die Teilnahme-Tabelle ist irrelevant. Sie ist nämlich redundant vorhanden, siehe Flug-Tabelle. Dort sind bereits dieselben Felder enthalten. Zudem hat die Teilnahme-Tabelle keinen eigenen Primärschlüssel, was ich für ziemlich waghalsig halte. Wenn ich jetzt nicht so extrem faul wäre, bzw. in dieser Woche - unter anderem bis vor 60Minuten - mein Abi habe/hätte, dann würde ich dir ein Schema aufzeichnen. Allerdings sollte man da nach Gefühl vorgehen, ich selber kann es mir gut vorstellen - auch ohne schriftlichen Plan. Für mich scheint es eigentlich relativ simpel... Ich hab schon schwerere Strukturen geschaffen.


----------



## Zvoni (7. Mai 2012)

Jetzt mal unabhängig davon, ob es der 3. Normalform entspricht, hätte ich wie folgt aufgebaut:

Tabellen:
Fluggesellschaft (FG)
FGFT
Flugzeugtyp (FT)
Flugzeug (FZ)
Personal (FP)
Flug (FN)

mit folgenden Beziehungen:
FG zu FGFT in 1:n
FT zu FGFT in 1:n
ergibt zusammen eine m:n-Beziehung. Eine Gesellschaft kann mehrere Typen haben (Bsp. A320, A321, A330, Boing 747 usw.), ein Typ kann von mehreren Gesellschaften verwendet werden (Bsp. Lufthansa hat A380 genauso wie Qantas oder Emirates)

FGFT zu FZ in 1:n
ein Typ kann in einer Gesellschaft mehrfach vorkommen, Hier (in FZ) das Flugzeugalter rein oder auch Registriernummer (Bsp. Germanwings hat 23 Flugzeuge vom Typ A319). Hier wird das tatsächliche Flugzeug eindeutig definiert.

FG zu FP in 1:n
Ein Beschäftiger kann nur für eine Gesellschaft arbeiten

FN zu FP in 1:n
Ein Flug hat mehrere Besatzungsmitglieder, ein Besatzungsmitglied kann immer nur auf einem Flug eingesetzt werden, hier (in FN) Flugnummer rein

FZ zu FN in 1:n
Ein Flugzeug kann auf mehreren Flügen eingesetzt werden, (Bsp. A320 mit ID19 fliegt heute mit Flugnummer 0815 nach New York, nächste Woche mit Flugnummer 4711 nach Sydney)


Ich weiss jetzt nicht, ob ich was vergessen habe, oder gewaltigen Mist erzähle, aber so würde ich es machen.


----------



## Ham_burg (7. Mai 2012)

Hallo Zvoni,

ja das Problem ist, dass unser Dozent ja die Lösung so vorgemacht hat, wie Ich sie in dem Bild gepostet habe. Und diese Lösung nicht funktioniert. Weiterhin war ja die Vorgabe, ich soll ein ERD nach der 3. Normalform bauen. ;o)

Und das ist ja das Thema welches wichtig ist, ob ihr der Meinung seid, ob diese Aufgabe mit den vorhandenen Daten nach der 3. Normalform lösbar ist. 

LG


----------



## Ham_burg (7. Mai 2012)

Ich hoffe, das du dein ABI vernünftig gebaut hast ;o)

Ja, ich habe eigentlich auch keinen Stress mit ERD. Ich wollte einfach unabhängige Meinungen hören, ob diese Aufgabe nach den Vorgaben in der Aufgabe lösbar ist. Und zusätzlich ob ihr die Lösung die mein Dozi mir da gegeben hat, überhaupt korrekt ist. Er meinte wegen dem Primärschlüssel, dass er einen Zusammengesetzten Primärschlüssel nehmen würde. Ich habe mich mit Ihm "gestritten" und habe gesagt, wenn wir diese Tabelle überhaupt bauen müssen, dann würde ich einen Counter einfügen. DAS WAR ABER FALSCH meinte er ;o(





Lime hat gesagt.:


> Wie gesagt, die Teilnahme-Tabelle ist irrelevant. Sie ist nämlich redundant vorhanden, siehe Flug-Tabelle. Dort sind bereits dieselben Felder enthalten. Zudem hat die Teilnahme-Tabelle keinen eigenen Primärschlüssel, was ich für ziemlich waghalsig halte. Wenn ich jetzt nicht so extrem faul wäre, bzw. in dieser Woche - unter anderem bis vor 60Minuten - mein Abi habe/hätte, dann würde ich dir ein Schema aufzeichnen. Allerdings sollte man da nach Gefühl vorgehen, ich selber kann es mir gut vorstellen - auch ohne schriftlichen Plan. Für mich scheint es eigentlich relativ simpel... Ich hab schon schwerere Strukturen geschaffen.


----------



## Lime (7. Mai 2012)

Naja, theoretisch kann zwar kein Eintrag doppelt vorkommen (Flug <--> Flugpilot), aber es gehört einfach dazu, wenn man Daten für die Zukunft erhalten möchte. Irgendwann sind Einträge doppelt, bzw. man würde die Liste ja sicher ausbauen.

Also wenn die Einträge in der Flüge Tabelle z.B. wöchentliche Flüge sind, dann braucht man natürlich eine extra Verknüpfungstabelle. Wenn man aber in die Flüge-Tabelle jeden einzelnen Flug (also gleiche Flüge, die jede Woche stattfinden) erneut einfügt, braucht man keine. Steht so aber nicht in der Angabe - bzw. anders auch nicht...


----------



## Ham_burg (7. Mai 2012)

Siehst du, das ist das was ich meine, die Daten sind so unkonkret, dass meiner Meinung nach die Aufgaben nicht korrekt gelöst werden kann. Und wenn dem so ist da muss man meiner Meinung nach diese Aufgaben aus der Klausur herausgestrichen Serben und die Noten korrigiert werden. 



Lime hat gesagt.:


> Also wenn die Einträge in der Flüge Tabelle z.B. wöchentliche Flüge sind, dann braucht man natürlich eine extra Verknüpfungstabelle. Wenn man aber in die Flüge-Tabelle jeden einzelnen Flug (also gleiche Flüge, die jede Woche stattfinden) erneut einfügt, braucht man keine. Steht so aber nicht in der Angabe - bzw. anders auch nicht...


----------



## Zvoni (8. Mai 2012)

Kannst du mal ein ERD von meinem Vorschlag machen, und deinem Dozenten vorlegen und nach seiner Meinung fragen? Mir ist es egal, ob es irgendeiner Normalform entspricht. Mir gehts um die Praktikabilität meines Vorschlags


----------



## Ham_burg (8. Mai 2012)

Ja werde ich machen.... Ich informiere dich dann



Zvoni hat gesagt.:


> Kannst du mal ein ERD von meinem Vorschlag machen, und deinem Dozenten vorlegen......
> Mir gehts um die Praktikabilität meines Vorschlags


----------



## lukas.lauble (9. Januar 2018)

ich bin gerade dabei, an einer GFS für Informatik zu arbeiten. Finde das Thema Flughafen generell interessant, und möchte das auch gerne bearbeiten.

Ich muss eine Ausgangssituation (z.B Flughafen) beschreiben, für die ich später eine Datenbank erstelle mit Access.
Dann muss ich ein ERD erstellen, welches ich dann in das Relationenmodell überführe.
Dann muss ich normalisieren, und letztendlich eine Datenbank erstellen.


Die Tabellenvorschläge von Zvoni oben finde ich an sich gut:

Tabellen:
Fluggesellschaft (FG)
FGFT
Flugzeugtyp (FT)
Flugzeug (FZ)
Personal (FP)
Flug (FN)

Allerdings frage ich mich, was FGFT sein soll, und wofür ich diese Tabelle benötige.

Vielen Dank im Voraus.


----------



## sheel (10. Januar 2018)

Hi

FGFT ist (wie oben beschrieben) eine Abkürzung für Fluggesellschaft-Flugzeugtyp. Also eine Tabelle, die pro Zeile eine ID einer FG und eien ID eines FT hat, und somit FGs und FTs einander zuordnet.


----------

