Ludwig-Maximilians-Universität München Institut für Informatik Prof. Dr. Christian Böhm Sebastian Goebl DATUM Datenbanksysteme I WS 2015/16 Übungsblatt 12: Lösungsvorschlag Abgabe bis ABGABE BEMERKUNG Aufgabe 12-1 E/R Modell In einer relationalen Datenbank sollen Informationen über die nächsten Olympischen Spiele 2012 in London gespeichert werden. Die einzelnen Wettkämpfe besitzen eine Wettkampfnummer, den Namen der Sportart, einen Termin und eine Wettkampfstätte. An jedem Wettkampf nehmen beliebig viele Sportler teil, die durch eine Startnummer identifiziert werden. Jeder Wettkampf wird von genau einem Schiedsrichter geleitet, der eine eindeutige Schiedsrichternummer besitzt. Es sollen die Nationen mit eindeutigem Kürzel und dem vollen Namen abgespeichert werden. Jede Person besitzt einen Namen und gehört zu einer Nation. (a) Entwerfen Sie zu diesem Zweck ein E/R-Modell. Bezeichnung Kürzel Nation gehört_zu gehört_zu Start Nr Name Sportler Schiedsrichter Schiri Nr Name nimmt_teil leitet Wettkampf Zeit Sportart WK Nr Ort 1
(b) Setzen Sie das vollständige E/R-Diagramm in ein entsprechendes relationales Datenbankschema um. Identifizieren Sie für jede Relation einen Primärschlüssel und unterstreichen Sie diesen. Achten Sie auf eine geeignete Modellierung der Relationships. Sie müssen keine SQL-DDL-Befehle angeben. Relation Sportler Wettkampf Nation Schiedsrichter nimmt teil Attribute (Schlüsselattribute unterstrichen) Name, Start-Nr, Nationkürzel WK-Nr, Sportart, Ort, Zeit, Schiri-Nr Bezeichnung, Kürzel Name, Schiri-Nr, Nationkürzel Start-Nr, WK-Nr 2
Aufgabe 12-2 Relationale Algebra Gegeben seien folgende Relationen R und S. R A B C D 1 2 3 4 4 3 2 1 1 2 2 5 4 3 3 4 1 2 2 4 4 3 3 5 S C D E 3 4 1 2 5 2 2 4 3 Geben Sie die Ergebnisrelationen folgender Ausdrücke der relationalen Algebra als Tabellen an. Wenn nötig, ist Duplikat-Elimination durchzuführen. (a) R π C,D (S) A B 1 2 (b) R π D (S) A B C 1 2 2 4 3 3 3
Aufgabe 12-3 Relationale Algebra und Kalküle Gegeben sei das folgende Relationenschema. Dabei sind die Schlüsselattribute jeweils unterstrichen. Produkt (PNR, Name, Gewicht, Farbe) Filiale (FNR, Name, Ort) Angestellter (PersNr, Name, Gehalt, FNR) Verkauf (PNR, PersNr, Datum, VKPreis) Geben Sie für die folgende verbal formulierten Anfrage einen äquivalenten Ausdruck in Relationaler Algebra und wahlweise in relationalem Tupel- oder Bereichskalkül an. Sie können an passender Stelle auch den Join- Operator benutzen. Bestimmen Sie Name und Verkaufspreis aller Produkte, die der Angestellte Peter Müller am 04.02.2011 verkauft hat. Rel. Algebra: Tupelkalkül: π Produkt.Name,VKPreis (Produkt Produkt.PNR=Verkauf.PNR (σ Name= Peter Müller (Angestellter) (σ Datum= 04.02.2011 (Verkauf)))) Schema(t) = (Name: String, VKPreis: Number) {t ( v V erkauf, a Angestellter, p P rodukt)(t.name = p.name t.v KP reis = v.v KP reis v.datum = 04.02.2011 v.p NR = p.p NR v.p ersnr = a.p ersnr a.name = P etermüller } oder: Bereichskalkül: {pname, vkpreis pnr, persnr, gewicht, farbe, gehalt, fnr : Angestellter(persnr, P eterm üller, gehalt, f nr) V erkauf(pnr, persnr, 04.02.2011, vkpreis) P rodukt(pnr, pname, gewicht, f arbe)} 4
Aufgabe 12-4 SQL Gegeben sei das folgende Relationenschema zur vergangenen Fußball-Weltmeisterschaft in Südafrika. Mannschaft (Land, Trainer) Spieler (SpielerNr, Name, Mannschaft, Geburtsdatum, Position) Austragungsort (Stadion, Plätze) Schiedsrichter (SID, Name, Nationalität) Spiel (SpielID, Tag, MannschaftA, MannschaftB, Austragungsort, Zuschauer) Tor (Spieler, Mannschaft, Spiel, Minute) leitet (Spiel, Schiedsrichter) Formulieren Sie die folgenden Anfragen in SQL. (a) Bestimmen Sie für jeden Austragungsort die Anzahl der Spiele, die dort stattgefunden haben. Hinweis: Austragungsorte in denen kein Spiel stattgefunden hat, werden so nicht ermittelt. SELECT Austragungsort, count(spielid) FROM Spiel GROUP BY Austragungsort; oder SELECT a.stadion, count(s.spielid) FROM Spiel s, Austragungsort a WHERE s.austragungsort = a.stadion GROUP BY a.stadion; Richtig ist: SELECT Austragungsort, count(spielid) FROM Spiel GROUP BY Austragungsort UNION SELECT Stadion, 0 FROM Austragungsort WHERE Stadion NOT IN (SELECT Austragungsort FROM Spiel); oder SELECT a.stadion, count(s.spielid) FROM Spiel s RIGHT JOIN Austragungsort a ON s.austragungsort = A.Stadion GROUP BY a.stadion; 5
(b) Bestimmen Sie die Anzahl der Spiele, die Spanien im Laufe der WM gespielt hat, in denen mindestens ein Tor fiel. SELECT count(*) FROM (SELECT s.spielid FROM Spiel s, Tor t WHERE s.spielid = t.spiel AND (s.mannschafta = Spanien OR s.mannschaftb = Spanien ) GROUP BY s.spielid HAVING count(t.minute) >= 1); Die SELECT-Anfrage ist zusätzlich notwendig, da eine Aggregation auf ein gruppiertes Attribut in der inneren SELECT-Klausel nicht sinngemäß ist: SELECT count(s.spielid) FROM Spiel s, Tor t WHERE s.spielid = t.spiel AND (s.mannschafta = Spanien OR s.mannschaftb = Spanien ) GROUP BY s.spielid HAVING count(t.minute) >= 1; gibt für jedes Spiel mit spanischer Beteiligung lediglich die Anzahl der gefallenen Tore aus. In der WHERE-Klausel wegen den Operatorbindungen auf die Klammerung achten! Die HAVING-Klausel ist hier für einen Wert von 1 optional, da ein einmaliges Auftreten bereits durch den Join der Relationen Spiel und Tor gewährleistet ist. Alternative: SELECT COUNT(*) FROM Spiel WHERE (MannschaftA = GER OR MannschaftB = GER ) AND EXISTS (SELECT * FROM Tor WHERE Tor.Spiel = Spiel.SpielID); 6
Aufgabe 12-5 Funktionale Abhängigkeiten Gegeben sei das Relationenschema R 1 (A, B, C, D, E, F ), sowie die Menge der zugehörigen nicht-trivialen funktionalen Abhängigkeiten: {A, B D B, C E B F } (a) Bestimmen Sie die Menge der Schlüsselkandidaten von R 1. Geben Sie dazu alle Schlüsselkandidaten an und erläutern Sie warum es keine weiteren Schlüsselkandidaten gibt. Lösungsvorschlag: A, B, C ist Schlüsselkandidat, weil eindeutig (ABC ABCDEF ) und minimal (weil AB C, AC B und BC A fehlen). Keine weiteren SKs, weil sich ABC nicht anders ableiten lassen. Bewertung: 1 Punkt für Schlüsselkandidat, 1 Punkt für die Begründung, 1 Punkt warum kein weiterer SKs Gegeben sei nun das Relationenschema R 2 (A, B, C, D, E, F ), sowie die Menge F der zugehörigen nicht-trivialen funktionalen Abhängigkeiten: {A, B, C D D E B, C D, E, F E F } (b) Bestimmen Sie die kanonische Überdeckung F C zu F. Linksreduktion Lösungsvorschlag: BC D wegen BC DEF alternativ: weil D AttrHuelle(F, {B, C}) = {B, C, D, E, F } D E B, C D, E, F E F Bewertung: 1 Punkt Rechtsreduktion BC D D E B, C D wegen BC D E F alternativ: weil {E, F } AttrHuelle(F (B, C D, E, F ) (B, C D), {B, C}) = {B, C, D, E, F } E F Entfernung von rechtsleeren Abhängigkeiten Nichts zu tun Zusammenfassen von Abhängigkeiten mit gleichen linken Seiten: BC D D E E F 7