{ "cells": [ { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "# Relationaler Entwurf: Aufgaben (Lösungen)\n", "\n", "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.\n", "\n", "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." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 1\n", "\n", "Wandeln Sie die folgenden ER-Diagramme in Relationen um." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.1" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "![](../resources/03_relationaler_entwurf/Tut02_2.png)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "+ Buch(ISBN, Datum, Alter)\n", "+ hat(ISBN → Buch, ID → Autor)\n", "+ Autor(ID, E-Mail, Name)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.2" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "![](../resources/03_relationaler_entwurf/Tut02_3.png)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "+ Professor(pID, Name, E-Mail)\n", "+ hält(pID → Professor, mID → Modul, Raum)\n", "+ verantworlich(mID → Modul, pID → Professor)\n", "+ Modul(mID, Name)\n", "\n", "\n", "#### Alternativ\n", "\n", "+ Professor(pID, Name, E-Mail)\n", "+ hält(pID → Professor, mID → Modul, Raum)\n", "+ Modul(mID, Name, verantworlich_pID → Professor)\n", "\n", "##### Hinweis\n", "\n", "* An der Stelle nicht über Kapazität diskutieren\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.3" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "![](../resources/03_relationaler_entwurf/Tut02_4.png)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "+ Film(fID, Name, Jahr)\n", "+ hat(vorgänger_fID → Film, nachfolger_fID → Film)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.4" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "![](../resources/03_relationaler_entwurf/Tut02_5.png)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "+ Firma(fID, Adresse, Telefon)\n", "+ Hut(hID, Stil)\n", "+ Material(mID, Farbe)\n", "+ produziert(fID → Firma, hID → Hut, mID → Material)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 1.5" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "![](../resources/03_relationaler_entwurf/schwacher_Entitiy_Typ.png)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "+ A(KA)\n", "+ B(KB1, KB2)\n", "+ C(KC)\n", "+ S(KS, KA → A, KB1 → B, KB2 → B)\n", "+ R3(KA → A, KB1 → B, KB2 → B, KS → S, KC → C)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## Aufgabe 2: Generalisierung/Spezialisierung" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 2.1\n", "\n", "Wandeln Sie folgende Generalisierung/Spezialisierung in Relationen um, jeweils im ER-, OO- und Nullwertstil und vergleichen Sie die Ergebnisse.\n", "\n", "![](../resources/03_relationaler_entwurf/genspez-raum-solo.svg)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "##### ER-Stil\n", "\n", "+ Raum(Gebäude, Nummer, Kapazität)\n", "+ Seminar(Gebäude → Raum, Nummer → Raum, Beamer, HDMI Anschlüsse)\n", "+ Vorlesung(Gebäude → Raum, Nummer → Raum, Tafel, Beamer, E-Tafel)\n", "+ Lernraum(Gebäude → Raum, Nummer → Raum, Whiteboard)\n", "\n", "\n", "##### OO-Stil\n", "\n", "+ Raum(Gebäude, Nummer, Kapazität)\n", "+ RaumSeminar(Gebäude, Nummer, Kapazität, Beamer, HDMI Anschlüsse)\n", "+ RaumVorlesung(Gebäude, Nummer, Kapazität, Tafel, Beamer, E-Tafel)\n", "+ RaumLernraum(Gebäude, Nummer, Kapazität, Whiteboard)\n", "+ RaumSeminarVorlesung(Gebäude, Nummer, Kapazität, Beamer_S, HDMI Anschlüsse, Tafel, Beamer_V, E-Tafel)\n", "+ RaumSeminarLernraum(Gebäude, Nummer, Kapazität, Beamer, HDMI Anschlüsse, Whiteboard)\n", "+ RaumVorlesungLernraum(Gebäude, Nummer, Kapazität, Tafel, Beamer, E-Tafel, Whiteboard)\n", "+ RaumSeminarVorlesungLernraum(Gebäude, Nummer, Kapazität, Beamer_S, HDMI Anschlüsse, Tafel, Beamer_V, E-Tafel, Whiteboard)\n", "\n", "**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! \n", "\n", "##### NULL-Stil\n", "\n", "+ Raum(Gebäude, Nummer, Kapazität, is_Seminar, is_Vorlesung, is_Lernraum, Beamer_S, HDMI Anschlüsse, Tafel, Beamer_V, E-Tafel, Whiteboard)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 2.2\n", "\n", "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.\n", "\n", "![](../resources/03_relationaler_entwurf/genspez-raum-vl.svg)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "#### Relationen für ER-Stil/Null-Stil\n", "\n", "+ Veranstaltung(ID, Name)\n", "+ findet_statt(ID → Veranstaltung, Gebäude → Raum, Nummer → Raum)\n", "\n", "#### ER-Stil Diagramm\n", "\n", "![](../resources/03_relationaler_entwurf/genspez-raum-vl-er-er.svg)\n", "\n", "#### OO-Stil Relationen + Diagramm\n", "\n", "+ Veranstaltung(ID, Name)\n", "+ findet_statt1(ID → Veranstaltung, Gebäude → Raum, Nummer → Raum)\n", "+ findet_statt2(ID → Veranstaltung, Gebäude → RaumSeminar, Nummer → RaumSeminar)\n", "+ findet_statt3(ID → Veranstaltung, Gebäude → RaumVorlesung, Nummer → RaumVorlesung)\n", "+ findet_statt4(ID → Veranstaltung, Gebäude → RaumLernraum, Nummer → RaumLernraum)\n", "+ findet_statt5(ID → Veranstaltung, Gebäude → RaumSeminarVorlesung, Nummer → RaumSeminarVorlesung)\n", "+ findet_statt6(ID → Veranstaltung, Gebäude → RaumSeminarLernraum, Nummer → RaumSeminarLernraum)\n", "+ findet_statt7(ID → Veranstaltung, Gebäude → RaumVorlesungLernraum, Nummer → RaumVorlesungLernraum)\n", "+ findet_statt8(ID → Veranstaltung, Gebäude → RaumSeminarVorlesungLernraum, Nummer → RaumSeminarVorlesungLernraum)\n", "\n", "**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! \n", "\n", "![](../resources/03_relationaler_entwurf/genspez-raum-vl-er-oo.svg)\n", "\n", "#### Null-Stil Diagramm\n", "\n", "![](../resources/03_relationaler_entwurf/genspez-raum-vl-er-null.svg)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 2.3\n", "\n", "Welche Relationen werden im OO-Stil benötigt wenn die Bedingungen der Generalisierung/Spezialisierung verändert werden ((p,d), (t,o), (t,d))?\n", "\n", "| Relation | (p,o) | (p,d) | (t,o) | (t,d)\n", "| ------------------------------|-------|-------|-------|-------\n", "| Raum | | | |\n", "| | | | |\n", "| RaumSeminar | | | |\n", "| RaumVorlesung | | | |\n", "| RaumLernraum | | | |\n", "| | | | |\n", "| RaumSeminarVorlesung | | | |\n", "| RaumVorlesungLernraum | | | |\n", "| RaumSeminarLernraum | | | |\n", "| | | | |\n", "| RaumSeminarVorlesungLernraum | | | |" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "| Relation | (p,o) | (p,d) | (t,o) | (t,d)\n", "| ------------------------------|-------|-------|-------|-------\n", "| Raum | x | x | |\n", "| | | | |\n", "| RaumSeminar | x | x | x | x\n", "| RaumVorlesung | x | x | x | x\n", "| RaumLernraum | x | x | x | x\n", "| | | | |\n", "| RaumSeminarVorlesung | x | | x |\n", "| RaumVorlesungLernraum | x | | x |\n", "| RaumSeminarLernraum | x | | x |\n", "| | | | |\n", "| RaumSeminarVorlesungLernraum | x | | x |\n", "\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 3: Kapazitätserhaltung" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 3.1\n", "\n", "Gegeben seien zwei Relationen\n", "- Person1(Name, Geburtstag, E-Mail)\n", "- Person2(Name, Geburtstag, E-Mail)\n", "\n", "       Welche Relation hat eine höhere Kapazität und wieso?" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "3.1. Person2 weil mehr Name/Geburtstag Kombinationen möglich.\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 3.2\n", "\n", "Gegeben ist ein ER-Modell und eine Umwandlung. Ist die gegebene Umwandlung des ER-Modells zu Relationen kapazitätserhaltend? Begründe.\n", "\n", "![](../resources/03_relationaler_entwurf/Tut03_kapazitaet.png)\n", "\n", "- Auto(Kennzeichen, Modell)\n", "- gehört(Kennzeichen->Auto, ID->Person)\n", "- Person(ID, E-Mail,Name)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "3.2. Nein, die Umwandlung erhöht die Kapazität(n zu m) und Totalität wird nicht beachtet.\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 3.3\n", "\n", "Gib eine kapazitätserhaltende Umwandlung zum folgenden Modell samt Relationen an. Begründe deine Lösung." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "#### Musterlösung\n", "\n", "3.3. \n", " - Auto(Kennzeichen, ID->Person\\*, Modell) \n", " - Person(ID, E-Mail, Name)\n", " + \\* Das Attribut darf nicht Null sein\n", "```\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Aufgabe 4: Kinogruppe - Relationales Modell\n", "\n", "Überführen Sie das folgende (E)E/R-Modell von letzter Woche in ein relationales Modell." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "![EE/R-Modell](../resources/01-02_modellierung/Diagramm_EER_Kino.svg)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "```{admonition} Musterlösung\n", ":class: dropdown, hint\n", "### Musterlösung\n", "\n", "* Schauspieler(SId, Name)\n", "* Film(FId, Name, Genre, Altersfreigabe)\n", "* spielt_in(SId → Schauspieler, FId → Film)\n", "* setzt_fort(Vorgänger → Film, Nachfolger → Film)\n", "* läuft(FId → Film, KinoId → Kino, Saalnummer → Saal, Preis, Datum, Uhrzeit)\n", "* Kino(KinoId, Name)\n", "* Kasse(Kassennummer, KinoId → Kino, Pid → Kassierer)\n", "* Saal(Saalnummer, Kapazität, KinoId → Kino)\n", "* Mitarbeiter(PId, Gehalt, Zuständigkeit, KinoId → Kino, PId → Manager)\n", "* Manager(PId → Mitarbeiter, Büro, KinoId → Kino)\n", "* Kassierer(PId → Mitarbeiter , Arbeitsvertrag)\n", "```\n" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 4 }