Relationaler Entwurf: Aufgaben (Lösungen)#
In diesem Tutorium beschäftigen wir uns damit, wie wir die in den vorherigen Wochen entwickelten (E)ER-Diagramme in Tabellen in schriftlicher Form überführen, ehe wir diese dann in der Folgewoche dann in einem tatsächlichen Datenbanksystem erstellen und mit Daten befüllen.
Hinweis: Aufgaben, die durch einen Asterisk (*) markiert sind, sind Bonusaufgaben. Diese Aufgaben können im Tutorium behandelt werden, dies ist jedoch von den Übungsleitern nicht geplant.
Aufgabe 1#
Wandeln Sie die folgenden ER-Diagramme in Relationen um.
Aufgabe 1.1#
Musterlösung
Musterlösung
Buch(ISBN, Datum, Alter)
hat(ISBN → Buch, ID → Autor)
Autor(ID, E-Mail, Name)
Aufgabe 1.2#
Musterlösung
Musterlösung
Professor(pID, Name, E-Mail)
hält(pID → Professor, mID → Modul, Raum)
verantworlich(mID → Modul, pID → Professor)
Modul(mID, Name)
Alternativ
Professor(pID, Name, E-Mail)
hält(pID → Professor, mID → Modul, Raum)
Modul(mID, Name, verantworlich_pID → Professor)
Hinweis
An der Stelle nicht über Kapazität diskutieren
Aufgabe 1.3#
Musterlösung
Musterlösung
Film(fID, Name, Jahr)
hat(vorgänger_fID → Film, nachfolger_fID → Film)
Aufgabe 1.4#
Musterlösung
Musterlösung
Firma(fID, Adresse, Telefon)
Hut(hID, Stil)
Material(mID, Farbe)
produziert(fID → Firma, hID → Hut, mID → Material)
Aufgabe 1.5#
Musterlösung
Musterlösung
A(KA)
B(KB1, KB2)
C(KC)
S(KS, KA → A, KB1 → B, KB2 → B)
R3(KA → A, KB1 → B, KB2 → B, KS → S, KC → C)
Aufgabe 2: Generalisierung/Spezialisierung#
Aufgabe 2.1#
Wandeln Sie folgende Generalisierung/Spezialisierung in Relationen um, jeweils im ER-, OO- und Nullwertstil und vergleichen Sie die Ergebnisse.
Musterlösung
Musterlösung
ER-Stil
Raum(Gebäude, Nummer, Kapazität)
Seminar(Gebäude → Raum, Nummer → Raum, Beamer, HDMI Anschlüsse)
Vorlesung(Gebäude → Raum, Nummer → Raum, Tafel, Beamer, E-Tafel)
Lernraum(Gebäude → Raum, Nummer → Raum, Whiteboard)
OO-Stil
Raum(Gebäude, Nummer, Kapazität)
RaumSeminar(Gebäude, Nummer, Kapazität, Beamer, HDMI Anschlüsse)
RaumVorlesung(Gebäude, Nummer, Kapazität, Tafel, Beamer, E-Tafel)
RaumLernraum(Gebäude, Nummer, Kapazität, Whiteboard)
RaumSeminarVorlesung(Gebäude, Nummer, Kapazität, Beamer_S, HDMI Anschlüsse, Tafel, Beamer_V, E-Tafel)
RaumSeminarLernraum(Gebäude, Nummer, Kapazität, Beamer, HDMI Anschlüsse, Whiteboard)
RaumVorlesungLernraum(Gebäude, Nummer, Kapazität, Tafel, Beamer, E-Tafel, Whiteboard)
RaumSeminarVorlesungLernraum(Gebäude, Nummer, Kapazität, Beamer_S, HDMI Anschlüsse, Tafel, Beamer_V, E-Tafel, Whiteboard)
Hinweis: Die Schlüssel der neu entstandenen Relationen teilen sich den Namespace nicht. Das heißt, dass z.B. Gebäude E-N, Raum 719 potenziell in Raum und RaumSeminar auftauchen kann, ohne dass eine Integritätsbedingung verletzt wird!
NULL-Stil
Raum(Gebäude, Nummer, Kapazität, is_Seminar, is_Vorlesung, is_Lernraum, Beamer_S, HDMI Anschlüsse, Tafel, Beamer_V, E-Tafel, Whiteboard)
Aufgabe 2.2#
Nun wird die Generalisierung / Spezialisierung um einen Entitytypen samt Relationshiptypen erweitert. Erweitere zuerst deine Lösung und erstelle dann ein ER-Diagramm (nicht EER) aus deinen Relationen.
Musterlösung
Musterlösung
Relationen für ER-Stil/Null-Stil
Veranstaltung(ID, Name)
findet_statt(ID → Veranstaltung, Gebäude → Raum, Nummer → Raum)
ER-Stil Diagramm
OO-Stil Relationen + Diagramm
Veranstaltung(ID, Name)
findet_statt1(ID → Veranstaltung, Gebäude → Raum, Nummer → Raum)
findet_statt2(ID → Veranstaltung, Gebäude → RaumSeminar, Nummer → RaumSeminar)
findet_statt3(ID → Veranstaltung, Gebäude → RaumVorlesung, Nummer → RaumVorlesung)
findet_statt4(ID → Veranstaltung, Gebäude → RaumLernraum, Nummer → RaumLernraum)
findet_statt5(ID → Veranstaltung, Gebäude → RaumSeminarVorlesung, Nummer → RaumSeminarVorlesung)
findet_statt6(ID → Veranstaltung, Gebäude → RaumSeminarLernraum, Nummer → RaumSeminarLernraum)
findet_statt7(ID → Veranstaltung, Gebäude → RaumVorlesungLernraum, Nummer → RaumVorlesungLernraum)
findet_statt8(ID → Veranstaltung, Gebäude → RaumSeminarVorlesungLernraum, Nummer → RaumSeminarVorlesungLernraum)
Hinweis: Die Schlüssel der neu entstandenen Relationen teilen sich den Namespace nicht. Das heißt, dass z.B. Gebäude E-N, Raum 719 potenziell in Raum und RaumSeminar auftauchen kann, ohne dass eine Integritätsbedingung verletzt wird!
Null-Stil Diagramm
Aufgabe 2.3#
Welche Relationen werden im OO-Stil benötigt wenn die Bedingungen der Generalisierung/Spezialisierung verändert werden ((p,d), (t,o), (t,d))?
Relation |
(p,o) |
(p,d) |
(t,o) |
(t,d) |
---|---|---|---|---|
Raum |
||||
RaumSeminar |
||||
RaumVorlesung |
||||
RaumLernraum |
||||
RaumSeminarVorlesung |
||||
RaumVorlesungLernraum |
||||
RaumSeminarLernraum |
||||
RaumSeminarVorlesungLernraum |
Musterlösung
Musterlösung
Relation |
(p,o) |
(p,d) |
(t,o) |
(t,d) |
---|---|---|---|---|
Raum |
x |
x |
||
RaumSeminar |
x |
x |
x |
x |
RaumVorlesung |
x |
x |
x |
x |
RaumLernraum |
x |
x |
x |
x |
RaumSeminarVorlesung |
x |
x |
||
RaumVorlesungLernraum |
x |
x |
||
RaumSeminarLernraum |
x |
x |
||
RaumSeminarVorlesungLernraum |
x |
x |
Aufgabe 3: Kapazitätserhaltung#
Aufgabe 3.1#
Gegeben seien zwei Relationen
Person1(Name, Geburtstag, E-Mail)
Person2(Name, Geburtstag, E-Mail)
Welche Relation hat eine höhere Kapazität und wieso?
Musterlösung
Musterlösung
3.1. Person2 weil mehr Name/Geburtstag Kombinationen möglich.
Aufgabe 3.2#
Gegeben ist ein ER-Modell und eine Umwandlung. Ist die gegebene Umwandlung des ER-Modells zu Relationen kapazitätserhaltend? Begründe.
Auto(Kennzeichen, Modell)
gehört(Kennzeichen->Auto, ID->Person)
Person(ID, E-Mail,Name)
Musterlösung
Musterlösung
3.2. Nein, die Umwandlung erhöht die Kapazität(n zu m) und Totalität wird nicht beachtet.
Aufgabe 3.3#
Gib eine kapazitätserhaltende Umwandlung zum folgenden Modell samt Relationen an. Begründe deine Lösung.
Musterlösung
Musterlösung
3.3.
Auto(Kennzeichen, ID->Person*, Modell)
Person(ID, E-Mail, Name)
* Das Attribut darf nicht Null sein
Aufgabe 4: Kinogruppe - Relationales Modell#
Überführen Sie das folgende (E)E/R-Modell von letzter Woche in ein relationales Modell.
Musterlösung
Musterlösung
Schauspieler(SId, Name)
Film(FId, Name, Genre, Altersfreigabe)
spielt_in(SId → Schauspieler, FId → Film)
setzt_fort(Vorgänger → Film, Nachfolger → Film)
läuft(FId → Film, KinoId → Kino, Saalnummer → Saal, Preis, Datum, Uhrzeit)
Kino(KinoId, Name)
Kasse(Kassennummer, KinoId → Kino, Pid → Kassierer)
Saal(Saalnummer, Kapazität, KinoId → Kino)
Mitarbeiter(PId, Gehalt, Zuständigkeit, KinoId → Kino, PId → Manager)
Manager(PId → Mitarbeiter, Büro, KinoId → Kino)
Kassierer(PId → Mitarbeiter , Arbeitsvertrag)