Lösungen zu Aufgabe 1
1. Kind wird geboren von Mutter
Kind [id: int, rufname: varchar(80), familienname: varchar(80), mutter_id: int]
Mutter [id: int, rufname: varchar(80), familienname: varchar(80)]
Da die Tabellen Kind und Mutter - abgesehen vom Fremdschlüssel mutter_id dieselben Attribute rufname, familienname, geschlecht, … haben, wäre auch folgende Lösung vorstellbar:
CD enthält Song
CD [id: int, bezeichnung: varchar(80), interpret: varchar(100)]
Song [id: int, titel: varchar(80), länge_in_s: int, cd_id: int]
Bemerkung: Hier könnte man sich genausogut vorstellen, dass ein Song auf mehreren CDs vorkommt (Compilations…). In diesem Fall wäre es dann eine n:m-Relation und man bräuchte eine Beziehungstabelle.
Schülerin bucht Wahlkurs
Schülerin [id: int, rufname: varchar(80), familienname: varchar(80), geschlecht: varchar(1)]
Wahlkurs [id: int, bezeichnung: varchar(100), beschreibung: varchar(1000)]
bucht [schuelerin_id: int, wahlkurs_id: int]
Person spielt Instrument
Person [id: int, rufname: varchar(80), familienname: varchar(80), geschlecht: varchar(1)]
Instrument [id: int, bezeichnung: varchar(100)]
spielt [person_id, instrument_id]
Planet umkreist Sonne
Planet [id: int, bezeichnung: varchar(100), sonne_id: int]
Sonne [id: int, bezeichnung: varchar(100)]
Ein paar Bemerkungen dazu:
Jäger jagt Beute (Tierarten)
Da sowohl Jäger als auch Beute Tierarten sind, bietet es sich an, nur eine Tabelle Tierart zu erstellen mit folgender Relation:
Tierart [id: int, bezeichnung: varchar(100), ist_säugetier: boolean]
jagt [jäger_id, beute_id]]
Man könnte die beiden Attribute von jagt auch tierart_jäger_id und tierart_beute_id nennen, um zu verdeutlichen, dass es sich um Fremdschlüsselreferenzen zur Tabelle Tierart handelt.
Schüler/in geht in Klasse
Schülerin [id: int, rufname: varchar(80), familienname: varchar(80), klasse_id: int]
Klasse [id: int, bezeichnung: varchar(20), jahrgangsstufe: int ]
Lehrkraft unterrichtet Klasse
Lehrkraft [id: int, rufname: varchar(80), familienname: varchar(80)]
Klasse [id: int, bezeichnung: varchar(20), jahrgangsstufe: int ]
unterrichtet [lehrkraft_id, fach_id]
Metall [id: int, bezeichung: varchar(80)]
Legierung [id: int, bezeichnung: varchar(80)]
besteht_aus [legierung_id, metall_id]
Bemerkung: Man könnte sich natürlich auf den Standpunkt stellen, dass eine Legierung selbst wieder ein Metall ist und ähnlich verfahren wie bei der Jäger-Beute-Aufgabe weiter oben.
Molekül besteht aus Element
Molekül [id: int, bezeichnung: varchar(100)]
Element [id: int, bezeichnung: varchar(100), kürzel: varchar(4), masse: decimal(2, 8), protonenzahl: int]
besteht_aus [molekül_id, element_id]