Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen Übung zu Datenbanken Musterlösung zur 1. Probeklausur Dipl.-Inform. Sascha Kriewel 27.11.2008 Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen Notenspiegel und Punkte Noten Anzahl 1.0 - 1.3 0 1.7 - 2.3 6 2.7 - 3.3 12 3.7 - 4.0 14 5.0 9 Durchfallerquote: 22% Aufgabe Schnitt max. Punkte # max. 1a 12 15 1 1b 0,5 3 1 1c 1 2 7 2a 3 5 11 2b1 3 5 7 2b2 1 5 0 2b3 1 5 1 2b4 1,5 5 7 Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen ER-Diagramm mit Funktionalitäten n-stellige Beziehungen, Ternäre Beziehungen ER-Diagramm Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen ER-Diagramm mit Funktionalitäten n-stellige Beziehungen, Ternäre Beziehungen n-stellige Beziehungen Allgemein gilt für eine Beziehung R zwischen Entitäten E1···n : I Sei die Funktionalität bei Ek (1 ≤ k ≤ n) gleich 1 I Dann muss gelten, dass durch R die folgende partielle Funktion vorgegeben wird: R : E1 × · · · × Ek −1 × Ek +1 × · · · × En → Ek Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen ER-Diagramm mit Funktionalitäten n-stellige Beziehungen, Ternäre Beziehungen Ternäre Beziehungen Speziell für eine ternäre (dreistellige) Beziehung A × B × C also: I Für die Kardinalitätsangabe 1:1:1 muss gelten: I I I I Für die Kardinalitätsangabe N:1:1 muss gelten: I I I A×B →C B ×C →A A×C →B A×B →C A×C →B Für die Kardinalitätsangabe N:M:1 muss gelten: I A×B →C Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen ER-Diagramm mit Funktionalitäten n-stellige Beziehungen, Ternäre Beziehungen Beziehungstyp: tritt an I I I Zu Turnier und Spielklasse ex. mehrere Spieler, daher muss die Funktionalität für Spieler N sein. Zu Spieler und Spielklasse ex. mehrere Turniere, daher muss die Funktionalität für Turnier N sein. Ein Spieler tritt bei einem Turnier in genau einer Spielklasse an, also: Spieler × Turnier → Spielklasse Die Funktionalität für Spielklasse ist 1. Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen ER-Diagramm mit Funktionalitäten n-stellige Beziehungen, Ternäre Beziehungen Beziehungstyp: tritt an I I I Zu Turnier und Spielklasse ex. mehrere Spieler, daher muss die Funktionalität für Spieler N sein. Zu Spieler und Spielklasse ex. mehrere Turniere, daher muss die Funktionalität für Turnier N sein. Ein Spieler tritt bei einem Turnier in genau einer Spielklasse an, also: Spieler × Turnier → Spielklasse Die Funktionalität für Spielklasse ist 1. Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen ER-Diagramm mit Funktionalitäten n-stellige Beziehungen, Ternäre Beziehungen Beziehungstyp: tritt an I I I Zu Turnier und Spielklasse ex. mehrere Spieler, daher muss die Funktionalität für Spieler N sein. Zu Spieler und Spielklasse ex. mehrere Turniere, daher muss die Funktionalität für Turnier N sein. Ein Spieler tritt bei einem Turnier in genau einer Spielklasse an, also: Spieler × Turnier → Spielklasse Die Funktionalität für Spielklasse ist 1. Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen ER-Diagramm mit Funktionalitäten n-stellige Beziehungen, Ternäre Beziehungen Beziehungstyp: tritt an I I I Zu Turnier und Spielklasse ex. mehrere Spieler, daher muss die Funktionalität für Spieler N sein. Zu Spieler und Spielklasse ex. mehrere Turniere, daher muss die Funktionalität für Turnier N sein. Ein Spieler tritt bei einem Turnier in genau einer Spielklasse an, also: Spieler × Turnier → Spielklasse Die Funktionalität für Spielklasse ist 1. Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen Tabellendenition Anfragen Tabellendenition: Bestandteil CREATE TABLE bestandteil ( zutatid INTEGER REFERENCES zutat(id) ON DELETE CASCADE, rezeptid INTEGER REFERENCES rezept(id) ON DELETE CASCADE, menge NUMERIC(4,3) CHECK (menge BETWEEN 0.001 AND 1.000), PRIMARY KEY (zutatid, rezeptid) ) Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen Tabellendenition Anfragen Anfrage 1 SELECT name FROM zutat z WHERE z.id NOT IN (SELECT zutatid FROM bestandteil) OR z.preisproliter > 30.0 Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen Tabellendenition Anfragen Anfrage 2 SELECT art, avg(preis) FROM (SELECT rezeptid, art, sum(preisproliter * menge) AS preis FROM zutat z JOIN bestandteil b ON z.id=b.zutatid JOIN rezept r ON r.id=b.rezeptid GROUP BY rezeptid, art) AS t GROUP BY art Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen Tabellendenition Anfragen Anfrage 2 SELECT art, avg(preis) FROM (SELECT rezeptid, art, sum(preisproliter * menge) AS preis FROM zutat z JOIN bestandteil b ON z.id=b.zutatid JOIN rezept r ON r.id=b.rezeptid GROUP BY rezeptid, art) AS t GROUP BY art Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen Tabellendenition Anfragen Anfrage 3: SQL SELECT name FROM rezept r WHERE r.id NOT IN (SELECT rezeptid FROM zutat JOIN bestandteil ON id=zutatid WHERE alkoholgehalt > 0) AND r.id IN (SELECT rezeptid FROM zutat JOIN bestandteil ON id=zutatid GROUP BY rezeptid HAVING sum(preisproliter * menge) <= 2.0) Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken Klausurergebnis Aufgabe 1: Datenmodellierung Aufgabe 2: SQL und Anfragen Tabellendenition Anfragen Anfrage 4 SELECT r.name FROM rezept r, bestandteil bo, zutat zo, bestandteil bs, zutat zs WHERE r.id = bo.rezeptid AND bo.zutatid = zo.id AND zo.name = 'Orangensaft' AND r.id = bs.rezeptid AND bs.zutatid = zs.id AND zs.name = 'Sahne' Dipl.-Inform. Sascha Kriewel Übung zu Datenbanken