Westfälische Wilhelms-Universität Münster Datenbanken Musterlösung Julia Wolters Sommersemester 2009 Dies sind die kompletten Musterlösungen der Übungen, die sich aus den Mitschriften der Übung und den gegebenen Musterlösungen im OpenUss ergeben 1 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 1 dateibasierte Datenhaltung Speicherung der Daten in einem csvFormat und damit in jedem Editor verwendbar. Durch Erlauben der Bearbeitung der Datensätze ist keine allgemeine Sicherheit gegeben. Datenbanksystem Keine offene Sichtbarkeit der Speicherung möglich. Hohe Datensicherheit vorhanden. Große Datenmengen können effizient a) verwaltet werden. inflexible und Fehleranfällige Datenhal- Einfache Bedienbarkeit. tung Datensätze können redundanz und in- Ermöglichung von redundanzfreier und konsistente Daten enthalten konsistenter Datenhaltung. Verbindung der Datenbank mit einer Verwaltungssoftware für Datenbanken. keine parallelen Transaktionen möglich mehrere parallele Transaktionen möglich Nachteile von dateibasierter Datenhaltung • partielle Inkonsistenz – Integrität von Programm geprüft – Redundanz – keine Transaktionen • Mehrfachbenutzung schwierig • Abfragesprache (z.B. SQL) fehlt, Keine Ad-hoc-Abfrage b) Der Einstieg in die Datenhaltung wird durch die dateibasierte Datenhaltung vereinfacht. Dadurch, dass keine bestimmten Programme benötigt werden, ist die Bearbeitung und Benutzung auf Standard–PC gegeben. Dateibasierte Datenhaltung nützlich für: • keine / einfacherere Anwendungen / kein komplexes DBMS • begrenzte Ressourcen (z.B. embedded systems) • kein Multiuserbetrieb notwendig 2 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 2 Geben Sie für die folgenden Begriffe jeweils eine möglichst kurze Deffnition und nach Möglichkeit zusätzlich ein Beispiel an: Datenbank Sammlung von (zusammenhängenden) Daten Beispiel: CD–Sammlung, die alle (relevanten) Informationen zu den gesammelten CDs enthält. Datenbanksystem Verbindung einer Datenbank mit einer Verwaltungssoftware Beispiel: MS Access, OO Base Datenmodell Darstellung und Erfassung der in der Datenbank enthaltenen Informationen. Beispiel: ER-Modell Datenunabhängigkeit Unterscheidung zwischen physische (Implementierung) und logische (Anwendung) Datenunabhängigkeit. Data Dictionary Datenwörterbuch. Zugriff auf die Datenbeschreibung der Datenbank, enthält alle relevanten Informationen DBA Datenbank-Administrator DDL Data Definition Language – Sprache zur Datenbankdefinition DML Data Manipulation Language – Sprache für Anfragen und Änderungsoptionen. Indexstruktur realisiert Zugriff auf Dateien und Zugriffsstrukturen. Redundanz Mehrfachvorhandensein von Informationen. Sicht Verteilung der Zugriffsrechte. Transaktion Zusammenfassung von Datenbank-Änderungen zu Funktionssicherheiten, die als Ganzes ausgeführt werden sollen und deren Effekt bei Erfolg permanent in der Datenbank gespeichert werden soll. Julia Wolters 3 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 3 Erläutern Sie am Beispiel einer Literaturdatenbank den Unterschied zwischen dem Schema und der Ausprägung einer Datenbank. ∼ ∼ ∼ ∼ ∼ ∼ ∼ ∼ ←− ∼ ←− ∼ ←− 4 Schema Ausprägung Ausprägung Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 4 Erläutern Sie die folgenden aus der Vorlesung bekannten Begriffe am Beispiel eines Arrays der Größe m × n in einer Ihnen vertrauten Programmiersprache: • Physikalische Ebene: | {z m·n } n • Konzeptionelle Ebene: m • logische Ebene: int[][] a = new int[m][n] • Sichtebene: int[] sicht = a[b] Julia Wolters 5 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 5 (a) Beschreiben Sie informell das konzeptionelle Schema einer Datenbank, die als Reservierungssystem für Flugreisen eingesetzt werden kann. Flug: FlugNr, Startzeit, ZielZeit, ZielOrt, ... Passagier: KundenNr, Name, Adresse Buchung: FlugNr, KundenNr (b) Identifizieren Sie nun unterschiedliche Benutzergruppen für diese Datenbank. Geben Sie für jede Benutzergruppe eine eigene Sicht an. Welche Aspekte gilt es dabei zu berücksichtigen? (c) Formulieren Sie abschließend umgangssprachliche Beispiele für Anfragen und Aktualisierungen bezüglich dieser Datenbank für die unterschiedlichen Benutzergruppen. 6 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 6 Erläutern Sie die folgenden Begriffe jeweils kurz(!) allgemein und an einem Beispiel: Beziehung Assoziation zwischen Entitäten Beziehungsmenge Menge aller Beziehungen eines Beziehungstyps Entität Basisobjekt mit einer in der realen Welt unabhängigen Existenz Objekt der Anwendungsdomäne, vor anderen Objekten unterscheidbar Entitätstyp definiert das Format von Objekten einer Entitätsmenge Entitätsmenge Sammlung aller Entitäten eies Entitätstypen in einer Datenbank Menge von Objekten mit gleichen Attibuten Superschlüssel Menge von Attributen, deren Werte jede Entität der zugehörigen Entitätsmenge eindeutig identifizieren Kandidatenschlüssel minimaler Superschlüssel Primärschlüssel ausgezeichneter Kandidatenschlüssel Relation (mathematisch) Teilmenge des Karthesischen Produkts Rolle Verdeutlichen die Semantik der Beziehungen Aufgabe eines Entitätstyps innerhalb ener Beziehung Konzeptioneller Entwurf Erstellung eines konzeptionellen Schemas für die Datenbank Globalansicht (ERM) Logischer Entwurf Transformation des konzeptionellen Schemas in das Implementierungsdatenmodell Konversion, Normalisierung in Ziel-DBMS Physischer Entwurf Festlegung der internen Speicherstrukturen, Zugriffspfade und Dateiorganistion Dateiformate, Indexstruktur, Denomalisierung Julia Wolters 7 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 7 Sie kennen aus der Vorlesung ternäre Beziehungstypen. Die ersten beiden Abbildungen stellen dar, wie ein ternärer Beziehungstyp durch die Einführung eines weiteren Entitätstyps aufgelöst werden kann. In der rechten Abbildung ist eine weitere Alternative zur Auflösung des ternären Beziehungstyps durch drei binäre Beziehungstypen dargestellt. Untersuchen Sie, ob diese zweite Alternative sinnvoll ist. Lehrer | Klasse — 4 — Fach Es gehen Informationen verloren - welcher Lehrer unterichtet welche Klasse in welchem Fach? A R R1 R2 R3 = = = = = {A1 , A2 } , B = {B1 , B2 } , C = {C1 , C2 } {(A1 , B1 , C1 ), (A1 , B2 , C2 ), (A2 , B1 , C2 ), (A2 , B2 , C1 )} {(A1 , B1 ), (A1 , B2 ), (A2 , B1 ), (A2 , B2 )} {(B1 , C1 ), (B1 , C2 ), (B2 , C1 ), (B2 , C2 )} {(A1 , C1 ), (A1 , C2 ), (A2 , C1 ), (A2 , C2 )} Ein Rückschluss von R1 , R2 und R3 nach R ist nicht möglich. 8 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 8 Wissenschaftliche Artikel werden unter anderem in speziellen Fachzeitschriften veröffentlicht. Betrachten Sie dazu das folgende vereinfachte Szenario: • Ein Wissenschaftler hat einen Namen, eine Dienstadresse und ein Forschungsgebiet. Er reicht Artikel alleine oder gemeinsam mit Kollegen solange zur Veröffentlichung bei unterschiedlichen Zeitschriften ein, bis der Artikel veröffentlicht wird oder der Wissenschaftler sein Vorhaben aufgibt. • Ein Artikel erscheint in höchstens einer Zeitschrift. Dabei wird ein Artikel nur veröfentlicht, wenn er zuvor von mehreren unterschiedlichen Wissenschaftlern begutachtet und für gut befunden wurde. Ein Artikel enthält gewöhnlich ein Literaturverzeichnis mit einer beliebigen Anzahl von Verweisen auf bereits früher veröffentlichte Artikel. • Eine Zeitschrift wird von einem oder mehreren Wissenschaftlern herausgegeben. Ausgaben der Zeitschrift erscheinen mehrmals jährlich und jede dieser Ausgaben ist genau einem Verlag zuzuordnen. Ein Verlag kann jedoch durchaus mehrere Zeitschriften veröffentlichen, andererseits können verschiedene Ausgaben einer Zeitschrift bei verschiedenen Verlagen erscheinen. (a) Arbeiten Sie alle Entitätstypen und zugehörige Attribute des obigen Beispiels heraus. Bestimmen Sie zudem weitere erforderliche Attribute sowie Beziehungstypen und geben Sie zu jedem Entitätstyp einen Primärschlüssel an. Diskriminator Entitäten: Primärschlüssel, :::::::::::::::: • • • • • Wissenschaftler (Name, Dienstadresse, Forschungsgebiet Zeitschrift (ISSN, Name) Artikel (Titel, Erstdatum) Verlag (Name, Adresse) Ausgabe (:::::::::: Nummer, Augabejahr) } schwache Entität ::::::::::::: Beziehungen: • • • • • • • • verfasst: Wissenschaftler - Artikel begutachter: Wissenschaftler - Artikel gibt-heraus: Wissenschaftler - Zeitschrift verweist-auf: Artikel - Artikel (Literaturverzeichnis) eingereicht-bei: Artikel - Zeitschrift erscheint-in: Artikel - Ausgabe von: Ausgabe - Zeitschrift erscheint-bei: Ausgabe - Verlag Julia Wolters 9 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung (b) Setzen Sie das Szenario in ein Entity–Relationship–Diagramm um. Dienstadresse Name (0, n) (0, n) verfasst verweist-auf (0, n) Forschungsgebiet (0, n) Wissenschaftler gibt-heraus (0, n) (1, n) istGut begutachtet Quelle (0, n) Referenz (1, n) (0, n) Artikel eingereicht-bei (0, n) Titel Erstellungsdatum (1, 1) AusgabenNr AusgabenJahr von (0, n) Zeitschrift ISSN Ausgabe Name (0, 1) (1, 1) erscheint-in SeitenzahlBeginn (0, n) SeitenzahlEnde 10 erscheint-bei (0, n) Verlag Name Adresse Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 9 Entwickeln Sie ein Entity–Relationship–Diagramm zur Modellierung eines kleinen Flughafens. Berücksichtigen Sie dabei zumindest folgende Informationen über die zu verwaltenden Daten des Flughafens: • Der Flughafen besitzt mehrere Flugzeuge, welche jeweils eine eindeutige Registrierungsnummer besitzen. Jedes Flugzeug ist assoziiert mit einem festen Stellplatz in einem Hangar, von welchem jeweils Nummer und Kapazität bekannt sind. Jedem Flugzeug ist außerdem eindeutig ein Flugzeugtyp zugeordnet. Zu jedem Typ werden spezifische Informationen wie Modellbezeichnung, Gewicht und Kapazität vermerkt. • Ein Flughafen speichert die Daten mehrerer Personen (die über Name und Adresse unterscheidbar sind und deren Geburtstage bekannt sind), u.a. die Daten von Piloten und Mitarbeitern. Letztere besitzen eine Personalnummer; zu einem Piloten sollte seine Lizenznummer gespeichert werden und es sollte ersichtlich sein, welche Flugzeugtypen er fliegen darf. • Jedes Flugzeug muss gelegentlich gewartet werden. Das Datum, die Art und Dauer einer Wartung, sowie das beteiligte Personal sollten vermerkt werden. • Jedes Flugzeug hat mindestens einen Besitzer. Ein Besitzer kann dabei sowohl ein Unternehmen als auch eine Privatperson sein. Julia Wolters 11 Übung SS 2009 ModBezeichnung Datenbanken Musterlösungen Kapazität Gewicht (0,n) Flugzeugtyp Mittwochs, 08 – 10 Uhr Musterlösung LizenzNr darfFliegen (1,n) Name Adresse GebDatum Pilot (0,n) o Person (0,n) ist vom Typ Datum Dauer PersonalNr (1,1) (0,n) Flugzeug wird gewartet (1,1) Wartung RegNr (1,n) (0,n) (1,1) (0,n) steht in wartet besitztP besitztU (0,n) Mitarbeiter (0,n) (0,n) Unternehmen PlatzNr Name (0,n) Nummer Ort Hangar Kapazität 12 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 10 Betrachten Sie nochmals ternäre Relationen und deren Auflösung aus Aufgabe 7. (a) Zeigen Sie, dass die gezeigte Auflösung der ternären Relation nicht äquivalent zur ursprünglichen Relation ist. ε = {e1 , e2 } A = {a1 , a2 } B = {b1 }, RA = {(e1 , a1 ), (e2 , a2 )}, RB = {(e1 , b1 )}, C = {c1 } RC = {(e1 , c1 )} (b) Geben Sie Constraints für die gezeigte Abbildung an, die gewährleisten, dass jede Instanz von A, B, C, E, RA , RB , RC eine Entsprechung in der ursprünglichen ternären Relation besitzt. (c) Modifizieren Sie die Abbildung, um vollständige Teilnahme in der ternären Relation darzustellen. ⇒ (d) Modifizieren Sie die Abbildung so, dass E zu einem schwachen Entitätstyp wird. Julia Wolters 13 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 11 Ein System zur Tischreservierung in Restaurants sei wie folgt modelliert: Fügen Sie in einem ersten Schritt die benötigten Attribute zum Diagramm hinzu. Gehen Sie nun von der Situation aus, dass ein Stammgast seinen Lieblingstisch an mehreren Tagen reserviert und geben Sie dafür explizit eine Beispielinstanz für die Beziehungsmenge reserviert an. Welches Problem tritt auf und wie kann man es durch eine andere Modellierung lösen? • temporäre Beziehung: • zusätzlice Entität: Reservierung Zusätzlicher Vorteil: Man kann nur eine Reservierung in einem Zeitraum haben 14 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 12 Betrachten Sie das Konzept der Aggregation im E–R–Modell. a) Beschreiben Sie das Konzept und typische Anwendungsgebiete der Aggregation im Allgemeinen. Behandeln von Beziehungen als abstrakte Entität ⇒ Beziehungen von Beziehungen“ ” b) Geben Sie zwei Beispiele an, in denen es sinnvoll ist, eine Aggregation bei der Erstellung eines E–R–Diagramms anzuwenden. c) Zeigen oder widerlegen Sie, dass sich jede Aggregation durch einen n–ären Beziehungstyp simulieren lässt. Falls die Aussage stimmt, gehen Sie auf möglicherweise entstehende Nachteile ein. z.B. kann beide Aggregation nicht jede Buchung kontrolliert werden, das geht bei dem ternären Beziehungen nicht. d) Zeigen oder widerlegen Sie, dass sich jeder n–äre Beziehungstyp durch eine Aggregation ersetzen lässt. Falls die Aussage stimmt, gehen Sie auf möglicherweise entstehende Nachteile ein. richtig, gezeigt durch Induktion Julia Wolters 15 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Nachteil: viel mehr Beziehungstypen 16 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 13 Nehmen Sie an, dass sich zwei Firmen zu einer zusammenschließen. Beide Firmen besitzen Datenbestände, die auf dem gleichen Entity-Relationship-Diagramm (Folie 56 aus Kapitel 2) beruhen. Welche Probleme können auftreten, wenn die bisher separat verwalteten Daten in einer gemeinsamen Datenbank vereint werden sollen? Welche Lösungsmöglichkeiten gibt es für diese Probleme? • haben beide DBMS die gleiche Strucktur • gleiche Personal-/ Abteilungs-/ Projekt Nr. → Nr neu vergeben • gemeinsame Projekte → Dublikate entfernen (welche Abteilung erhält Projekt?) • Angestellter in beiden Firmen • Kinder mit Mutter in Firma 1 und Vater in Firma 2 → Schema ändern • Zusammenlegung der Abteilungen (wer wird Abteilungsleiter?) Julia Wolters 17 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 14 Gehen Sie von einem einfachen Schema für eine Hoteldatenbank aus: Hotel Zimmer Buchung Gast (HotelNr, HotelName, Stadt) (ZimmerNr, HotelNr, Typ, Preis) (HotelNr, GastNr, AnreiseDatum, AbreiseDatum, ZimmerNr) (GastNr, GastName, GastAdresse) Was wird durch die folgenden Ausdrücke der Relationalen Algebra abgefragt? (a) ΠHotelN r (σP reis>50 (Zimmer)) Nr. aller Hotels mit Zimmerpreis > 50 ohne Dublikate (b) σHotel.HotelN r=Zimmer.HotenN r (Hotel × Zimmer) Alle Zimmer aller Hotels (mit jeweils der gleichen HotelNr.) → einfacher Join verwenden, Hoten 1 Zimmer (c) ΠHotenN ame (Hotel 1Hotel.HotelN r=Zimmer.HotelN r. (σP reis>50 (Zimmer))) Namen aller Hotels, die mindestens Zimmer haben mit Preis > 50 → normaler Join würde ausreichen (d) ΠZimmerN r (σHotelName= Interconti“ (Hotel) ” 1 Zimmer 1 (σAnreiseDatum=01.06.2009 (Buchung))) Nummer aller Zimmer in Hotels mit Namen Interconti“ für dieses eine Buchung mit ” Anreisedatum 01.06.09 gibt. Dublikate sind nicht erlaubt, werden bei gleicher ZimmerNr. in verschiedene Hotels nur eine Nr. ausgegeben. 18 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 15 Betrachten Sie die Umsetzung des E-R-Diagramms für den Veröffentlichungsprozess wissenschaftlicher Artikel (Aufgabe 8 auf Blatt 2) auf folgendes Schema: Wissenschaftler Artikel Ausgabe Zeitschrift Verlag verfasst begutachtet verweist-auf eingereicht-bei erscheint-in gibt-heraus (Name, Dienstadresse, Forschungsgebiet) (Titel, ErstDatum) (AusgabenNr, AusgabenJahr, ZeitschriftISSN, VerlagName) (ISSN, Name) (Name, Adresse) (Name, Dienstadresse, Titel, ErstDatum) (Name, Dienstadresse, Titel, ErstDatum, istGut) (QuellenTitel, QuellenErstDatum, ReferenzTitel, ReferenzErstDatum) (Titel, ErstDatum, ZeitschriftISSN) (Titel, ErstDatum, SeiteBeginn, SeiteEnde, AusgabenNr, AusgabenJahr, ZeitschriftISSN) (Name, Dienstadresse, ZeitschriftISSN) Geben Sie nun Ausdrücke der Relationalen Algebra an, die folgende Mengen als Ergebnisrelation besitzen. Allgemeines Vorgehen: 1) Welche Relationen? 2) Datensätze? hinschreiben, evtl. Join (bei unterschiedlichen Namen θ-Join) Selektionen 3) welche Attribute? Projektionen Wie kann man optimieren? 4 eindeutige Namen a) Alle Zeitschriften. Zeitschrift b) Die Namen aller Wissenschaftler, die bereits Artikel veröffntlicht haben. ΠN ame (erscheint − in 1 verf asst) c) Die Namen aller Wissenschaftler, die im Jahr 2000 gemeinsam mit Herrn Schmidt aus München (Spezialgebiet Datenbanken) mindestens einen Artikel veröffentlicht haben. Herr Schmidt Artikel Schmidt ←− σName= Schmidt“∧Dienstadresse= München“ (verf asst) ” ” ΠN ame (verf asst − ArtikelSchmidt) 1 (ΠT itel,Erstdatum ( (ArtikelSchmidt 1 σAusgabejahr=2000 (erscheint − in)) {z } | Alle Artikel die Herr Schmidt 2000 veröffentlicht hat Julia Wolters 19 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung d) Die Namen aller Verlage, die jemals die Datenbanken-Zeitung“ herausgegeben haben. ” ΠV erlagN ame (Ausgabe 1Zeitschrif tISSN =ISSN σName= Datenbank-Zeitung“ (Zeitschrif t) ” e) Verlagsname, Seitenzahlen und Autorenname, die zu einem im Jahr 1999 in der Datenbanken” Zeitung“ veröffentlichten Artikel Geschichte von Datenbankensystemen“ gehören. ” Name der Zeitung Datenbank-Zeitung“ Zeitschrift ” AusgabeJahr 1999 Ausgabe, erscheint-in Titel des Artikels verfasst (GeschichteArtikel ← σTitel= Geschichte von Datenbanksystemen“ (verf asst) ” 1 σAugabeJahr=1999 (erscheint − in) 1 ΠAusgabeN r,AusgabeJahr,Zeitschrif tISSN,verlagN ame ( Ausgabe 1Zeitschrif tISSN =ISSN σName= Datenbank-Zeitung“ (Zeitschrif t)) ” ΠV erlagN ame,SeiteBeginn,SeiteEnde,N ame (GeschichteArtikel) f) Die Namen aller Wissenschaftler, die diesen Artikel begutachtet haben. ΠN ame (Begutachtet 1 ΠT itel,erstdatum (GeschichteArtikel) g) Die ISSN und den Verlagsnamen aller Zeitschriften mit Artikeln, die auf diesen Artikel verweisen. verweise verweist-auf ISSN,VerlagName Ausgabe ΠV erlagN ame,Zeitschrif tISSN (ΠQuellenT itel,QuellenErstdatum (verweist − auf ) 1 Ref erenzT itel = T itel ∧ Ref erenzErstdatum = Erstdatum(GeschichteArtikel) 1 QuellenT itel = T itel ∧ QuellenErstdatum = Erstdatum 1 Ausgabe) 20 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 16 Gegeben seien V zwei Relationenschemata R und S, Relationen r(R) und s(S) sowie ein Prädikat θ = (r.A = s.A). Beschreiben Sie allgemein die Schemata und ErgebnisreA∈R∩S lationen für (a) r × s • besteht (in dieser Reihenfolge) aus allen Attributnamen aus r, sowie allen Attributnamen aus S • tritt ein Attributname in R als auch in S auf, so wird dieser in rA und sA umbenannt Ergebnisrelation: Kreuzprodukt aller Tupel aus r und s Schema: (b) r 1 s = ΠR∪S (σθ (r × s)) Schema: wie (a), alle doppelten Attributnamen werden entfernt Ergebnisrelation: die Teilmenge des Kreuzproduktes, die θ erfüllt (Untersuchung von Mehrfachnennung von Attributen wergen Π) (c) r 1θ s = σθ (r × s) Schema wie (a) Ergebnisrelation: wie bei r 1 s, nur ohne die Unterschlagung der Mehrfachnennung Gilt nur für Prädikate wie in der Aufgabenstellung! Julia Wolters 21 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 17 Gegeben seien zwei Relationen r(R) und s(S) mit |r| = n > 0 sowie |s| = m > 0 Elementen. Geben Sie für die folgenden Ausdrücke an, wieviele Elemente die Ergebnisrelation mindestens und höchstens enthalten kann. Die Schemata R und S seien dabei so de niert, dass alle Ausdrücke gültig sind. (a) πX (r) (b) r ∪ s (c) r ∩ s (d) r × s (e) r 1 s (f) σP (r × s) Mindestens 1 max(n,m) 0 n·m 0 0 (g) r ÷ s 0 höchstens n n+m min(n,m) n·m n·m n ·m jn k m r 1 s= σθ (r × s) wie (f) (h) r 1θ πS (s × (r × s)) 22 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 18 Gegeben seien zwei Relationenschemata R und S sowie Relationen r(R) und s(S). Unter welchen Voraussetzungen liefern die beiden Ausdrücke in den folgenden Aufgabenteilen jeweils identische Resultatrelationen? attrn(P ) = in der Formel P auftretende Attributnamen Y ⊕ Z = Schema, das aus dem kartesischen Produkt von Relationen zu Schemata Y bzw. Z entsteht. (a) X = Y ⊕ Z ∧ attrn(θ) ⊆ Y ⊕ Z (b) attrn(P ) ⊆ X (c) attrn(P ) ⊆ R ∩ (R ∩ S) = ∅ (d) attrn(P ) ⊆ S ∩ (R ∩ S) = ∅ (e) attrn(P ) ⊆ R ∩ S (f) gilt immer (g) X = Y ∧ domY = domZ ∧ attrn(P ) ⊆ Y (h) attrn(P ) ⊆ R ⊕ Y ∧ attrnθ ⊆ R ⊕ Y ∧ X = R ⊕ Y Julia Wolters 23 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 19 Seien im Folgenden r(R), s(S) und t(T) Relationen über den Schemata R, S und T. Dann heißen r n s := πR (r 1 s) Semijoin von r mit s“ und rns := r − πR (r 1 s) Antisemijoin ” ” von r mit s“ Zeigen oder widerlegen Sie nun die Allgemeingültigkeit folgender Aussagen. (a) r 1 s, s 1 r verursachen unterschiedliche Reihenfolge, die ΠR∪S aber wieder vereinfachticht (b) r − (rns) = r − (r − ΠR (r 1 s)) = ΠR (r 1 s) = r n s (c) r n s = ΠR (r 1 s) = ΠR∩R (r) 1 ΠR∩S (s) | {z } =r (d) (r n s) 1 s = r 1 ΠR∩S (s) o s = r o s | {z } =s (e) (r n s) 1 (s n (r n s)) = r 1 ΠR∩S (s) 1 ΠR∩S (ΠR (r × s)) = r 1 s 1 ΠR∩S (r 1 s) = r1s (f) nicht allgemein gültig Gegenbeispiel: R = (A,B), S = (B,C) r = {(1, 1)}, s = {(1, 2), (2, 3)} zz: ΠS (r × (s n r)) = ΠS (s × (r n s)) Links: s n r = s 1 ΠS (s 1 r) = s 1 s = s = {(1, 2)} r × (s n r) = {(1, 1), (1, 2)} ΠS (r × (s n r)) = {(1, 2)} Rechts: r n s = {(1, 1)} s × (r n s) = {(1, 2, 1, 1), (2, 3, 1, 1)} ΠS (s × (r n s)) = {(1, 2), (2, 3)} (g) nicht allgemein gültig Gegenbeispiel: R = S = {A}, T = {B} 24 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 s = {(1)}, t = {(3)}, r = {(2)} Rechts: Links: s×t (s × t) n r ΠS ((s × t) n r) s ∩ ΠS ((s × t) n r) r × t = {(2, 3)} sn(r × t) = {(1)} = s ΠS (sn(r × t)) = {(1)} (h) r ∩ (r − (rns)) = r − (rns) = r − (r − ΠR (r 1 s)) = r − (r − (r n s)) | {z } ⊂r Julia Wolters 25 = = = = {(1, 3)} {} {} {} Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 20 Seien R=(A,B,C) ein Schema und r(R) und s(R) Relationen. Geben Sie zu folgenden Ausdrücken der Relationalen Algebra jeweils äquivalente Ausdrücke des Tupelorientierten Relationalen Kalküls an: (a) πA (r) = {t | ∃q ∈ r(t[A] = q[A]} (b) σB=42 (r) = {t | t ∈ r ∧ t[B] = 42} (c) r ∪ s = {t | t ∈ r ∨ t ∈ s} (d) r ∩ s = {t | t ∈ r ∧ t ∈ s} (e) r − s = {t | t ∈ ∧¬(t ∈ s)} (f) πA,B (r) 1 πB,C (s) = {t | ∃m ∈ r(∃n ∈ S(t[A] = m[B] ∧ t[B] = m[B] ∧ m[B] = n[B] ∧ t[C] = n[C]))} (g) r ÷ πC (s) = {t | ∀u ∈ S(∃w ∈ r(t[A] = w[A] ∧ t[B] = w[B] ∧ w[C] = u[C]))} (h) πr.A (r 1r.B>s.B s) = {t | ∃m ∈ r(t[A] = n[A] ∧ m[B] > n[B]))} 26 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 21 Seien R=(A,B) und S=(A,C) Schemata sowie r(R) und s(S) Relationen. Geben Sie Ausdrücke der Relationalen Algebra an, die äquivalent zu den folgenden Ausdrücken des Tupelorientierten Relationalen Kalküls sind: (a) {t | ∃q ∈ r(t[A] = q[A] ∧ q[B] < 58)} ⇔ πA (σB<58 (r)) (b) {t | ∃q ∈ r, v ∈ s(t[A] = q[A] ∧ q[A] = v[A] ∧ t[B] = q[B] ∧ t[C] = v[C])g ⇔ r 1 S (c) {t | ∃q1 , q2 ∈ r, v ∈ s(t[A] = v[A] ∧ q1 [A] = t[A] ∧ q2 [A] = v[C] ∧ q1[B] > q2 [B])} ⇔ πs.A (σs.c=r2 .A∧s.A=r1 .A∧r1 .B>r2 .B (s × pr1 (r) × pr2 (r))) Julia Wolters 27 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 22 Untersuchen Sie, ob die folgenden Anfragen im Werteorientierten Relationalen Kalkül sicher sind. Begründen Sie jeweils Ihre Aussage. Geben Sie zudem die Domäne der jeweiligen Anfrage an. dom(P): Werte in Relation in P, expliziete Werte in P sicher: falls (1) (2) (3) alle Werte des Ergebnistupels liegen in dom(P) ∃xP1 (x)“: ∃ Wert aus dom(P1 ) der (P1 (x)) erfüllt ⇔ ∃x(P1 (x)) ” ∀xP1 (x)“: ∀ Werte aus dom(P1 ) ist (P1 (x)) erfüllt ⇔ ∀x(P1 (x)) erfüllt ist. ” (a) {hai| a = 0} dom(P ) = {0} (expliziter Wert a = 0) ⇒ a = 0 ∈ dom(P ) (kein ∃“ oder ∀“ daher muss nur (1) erfüllt sein. ⇒ Anfrage ” ” sicher (b) {ha, b, ci|(a = c) ∧ (b = c)} dom(P ) = {} (keine Relation, keine explizieten Werte) ⇒a∈ / dom(P ) (b und c auch nicht) ⇒ Anfrage nicht sicher (c) {hi, n, s, ci|hi, n, s, ci ∈ customer} dom(P ) = values(customer) ⇒ i, n, s, c ∈ dom(P ) ⇒ Anfrage sicher (d) hai|b(ha, bi ∈ account ∨ (b > 0))} dom(P ) = values(account) ∪ {0} ⇒ z.B. account = {} ⇒ a 6= dom(P ) ⇒ Anfrage unsicher (e) {hli|∀a(¬(hl, ai ∈ loan) ∧ (a > 500))} dom(P ) = values(loan) ∪ {500} = dom(P1 ) = (¬(hl, ai ∈ loan ∧ (a > 500)) ∀a(P1 ) immer falsch, wegen a = 500 ⇒ Resultat ist leer ⇒ Anfrage sicher (f) + (g) {hl, ni|∃a(hl, ai ∈ loan) ∨ ∃i, s, c(hi, n, s, ci ∈ customer)} {hl, ni|∃a(hl, ai ∈ loan) ∧ ∃i, s, c(hi, n, s, ci ∈ customer)} dom(P ) = values(loan) ∪ values(customer) 28 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 zu 1) Alle Komponenten von hl, ni ∈ dom(P ) zu 2) ∃a : hl, ni ∈ loan erfüllt ⇔ ∃ Tupel hl, ai ∈ loan, das hl, ai ∈ loan erfüllt. ∃i, s, chi, n, s, ci = customer erfüllt ⇔ ∃ Tupel λi, n, s, ci ∈ customer das hi, n, s, ci ∈ customer erfüllt Julia Wolters 29 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 24 Superschlüssel: bestimmt eindeutig Kandidatenschlüssel: minimaler Superschlüssel Es sei r(R) eine Relation über dem Schema R. Zeigen oder widerlegen Sie: (a) Sind K1 und K2 Kandidatenschlüssel für r, so auch K1 ∪ K2 . K1 = 6 K2 K1 ( K1 ∪ K2 K1 Superschlüssel ⇒ K1 ∩ K2 nicht minimal, also kein Kandidatenschlüssel (b) Sind K1 und K2 Kandidatenschlüssel für r, so auch K1 ∩ K2 . K1 6= K2 K1 ∩K2 ( K1 ⇒ K1 ∩K2 kein Superschlüssel, also erst recht kein Kandidatenschlüssel (c) Sind K1 und K2 Superschlüssel für r, so auch K1 ∩ K2 . zz. ∀r(R) ∀t1 , t2 ∈ r: ΠK1 ∪K2 (t1 ) = ΠK1 ∪K2 (t2 ) ⇒ t1 = t2 ΠK1 ∪K2 (t1 ) = ΠK1 ∪K2 (t2 ) ⇒ ΠK1 (t1 ) = ΠK2 (t2 ) ⇒ t1 = t2 (d) Sind K1 und K2 Superschlüssel für r, so auch K1 ∪ K2 . Gegenbeispiel: R = (A,B,C,D) K1 = (A), K2 = (B) Superschlüssel K1 ∩ K2 = {} ist kein Superschlüssel 30 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 25 Funktionale Abhängigkeit: α → β gilt auf R ⇔ ∀r(R) ∀t1 , t2 ∈ r : t1 [α] → t2 [α] ⇒ t1 [β] = t2 [β] Erläutern Sie, wie mit Hilfe von funktionalen Abhängigkeiten die folgenden Einschränkungen ausgedrückt werden können: Sei P K(r) der Primärschlüssel der Relation r a) Eine 1:1-Beziehung existiert zwischen den Entitätsmenge account und customer. PK(account) → PK(customer) PK(customer) → PK(account) b) Eine n:1-Beziehung existiert zwischen den Entitätsmenge account und customer. PK(customer) → PK(account) Julia Wolters 31 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 26 Betrachten Sie das folgende relationale Schema: FAMILIE(Kind, Kind-GebJahr, Mutter, Mutter-GebJahr, Vater, Vater-GebJahr, Hochzeitsjahr) In Relationen zu diesem Schema seien für die darin enthaltenen Daten die folgenden (vereinfachten) Annahmen gültig: • Jede Person ist eindeutig identi ziert durch ihren Namen, der als Attributwert vermerkt ist (in den Spalten Kind, Mutter oder Vater). • Werte in Kind-GebJahr, Mutter-GebJahr, Vater-GebJahr bezeichnen das Geburtsjahr der jeweiligen Person. • Ein Paar (bestehend generell aus Mutter und Vater) kann sich nur ein einziges Mal gegenseitig heiraten. • Eine Person kann mehrfach heiraten, aber wegen der vorgeschriebenen Trennungszeit nicht mehrere Male in ein und demselben Jahr. • Eine Person kann beliebig viele Kinder haben. Folgern Sie aus diesen Annahmen nun die wesentlichen funktionalen Abhängigkeiten die auf dem Schema FAMILIE gelten. Kind → Kind GebJahr Mutter → Mutter GebJahr Vater → Vater GebJahr Mutter, Vater → Hochzeitsjahr Mutter, Hochzeitsjahr → Vater Vater, Hochzeitsjahr → Mutter 32 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 27 Armstrong Axiome A1: Reflexivität: β ⊆ α ⇒ α → β A2: Erweiterung: α → β ⇒ αγ → αγ A3: Transititvität: α → β ∧ β → γ ⇒ α → γ Kommutativ: α → βγ ⇔ αγβ Beweisen Sie unter Benutzung der ArmstrongAxiome oder widerlegen Sie die Gültigkeit folgender Regeln für funktionale Abhängigkeiten für ein beliebiges Relationenschema R mit α, β, γ, δ ⊆ R: a) Vereinigungsregel: (α → β ∧ α → γ) =⇒ (α → βγ) ) α z}|{ α → β A2 αα → βα A3 ⇒ ⇒ α → βγ α → γ αβ → γβ b) Schnittregel: (αβ → δ ∧ βγ → δ) =⇒ (β → δ) falsch, Gegenbeispiel: A B C D 2 1 2 3 α = (A), β = (B), γ = (C), δ = (D) 3 1 3 4 c) Dekompositionsregel: (α → βγ) =⇒ (α → β ∧ α → γ) α → βγ ∧ β ⊆ βγ A1 βγ → β A3 α → β ⇒ ⇒ γ ⊆ βγ βγ → γ α→γ d) Differenzregel: (α → β ∧ γ → δ) =⇒ ((α − γ) → (β − δ)) falsch, Gegenbeispiel: A B C D α = (AB), β = (CD), γ = (B), δ = (D) 2 1 1 1 α − γ = (A) 6= β − δ = (C) 2 2 2 2 e) Pseudosymmetrieregel: (α →∵ ∧γ → β) =⇒ (α → γ) falsch, Gegenbeispiel: A B C 1 2 1 α = (A), β = (B), γ = (C) 1 2 2 f) Pseudotransitivitätsregel: (α → β ∧ γβ → γ) =⇒ (αγ → δ) α → β A2 αγ → βγ A3 ⇒ ⇒ αγ → δ γβ → C γβ → δ Julia Wolters 33 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 28 Das Schema R = (A,B,C,D,E) werde zerlegt in (A,B,C) und (A,D,E). Zeigen Sie, dass dies eine verlustlose Zerlegung darstellt, falls die folgenden funktionalen Abhängigkeiten auf R gelten: A → BC CD → E B → D E → A Zerlegung: R = R1 ∪ R2 Verlustlos: r = ΠR1 (r) ./ ΠR2 (r) (Hinreichendes Kriterium (HK)) R1 ∩ R2 → R1 ∨ R1 ∩ R2 → R2 ∈ F + Abhängigkeitserhaltend: (F1 ∪ R2 )+ = F + R R1 R1 ∪ R2 A+ = = = = (A, B, C, D, E) (A, B, C) R2 = (A, D, E) (A) R ⊆ R1 ⇒ verlustlose Zerlegung 34 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 29 Gegeben seien ein Schema R=(A,B,C,D,E) und eine Menge funktionaler Abhängigkeiten F = {A → BC, A → D, CD → E, B → D, E → A}. R = (A, B, C, D, E) F = {A → BC, A → D, CD → E, B → D, E → A} a) Bestimmen Sie (BD)+ und F + . BD+ = {B, D} Superschlüssel bestimmen“: ” A+ = R, CD+ = R, B + = {B, D}, E + = R, C + = {C}, D+ = {D}, BC + = R Wo K + = R ist K Kandidatenschlüssel F + = {α → β, αA → γ, αCD → γ, αE → γ, αBC → γ, αB → D | β ⊆ α ⊆ R, ∅ = 6 γ ⊆ R} b) Sind folgende Zerlegungen von R abhängigkeitserhaltend und verlustlos? (i) (A,B,C), (A,D,E) R1 = (A, B, C), R2 = (A, D, E) R1 ∩ R2 = (A), A+ = R ⊆ R1 ⇒ verlustlos B → D ∈ F + aber (B → D) ∈ / (F1 ∪ F2 )+ (ii) (A,B,C), (C,D,E)) R1 = (A, B, C), R2 = (C, D, E) R1 ∩ R2 = (C) C + = {C} (HK ist erfüllt) A 0 1 B 0 1 | {z R1 C 0 0 D 0 1 E 0 1 6= } | ΠR1 (r) ./ ΠR2 (r) A B C D E 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 0 1 1 {z R2 } ⇒ keine Verlustlosigkeit wie (i): B → D in F + aber (F1 ∪ F2 )+ Julia Wolters 35 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung (iii) (A,B,C,E), (B,D) R1 = (A, B, C, E), R2 = (B, D) R1 ∩ R2 = (B) B + {B, D} ⊇ R2 ⇒ verlustlos CD → E ∈ F + aber nicht in (F1 ∪ F2 )+ ⇒ nicht abhängigkeitserhalten (iv) (A,B,C), (A,C,E) R1 = (A, B, C), R2 = (A, C, E) R1 ∪ R2 6= R ⇒ keine Zerlegung 36 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 30 Definitionen: Was ist BCNF: ∀α → β ∈ F + gilt (1) α → β trivial, dh. β ⊆ α (2) α ist Superschlüssel, dh. α+ = R Was ist 3NF: ∀α → β ∈ F + gilt (3) (1), (2) oder Jedes Attribut in β − α ist in Kandidatenschlüssel entalten. Gegeben seien wie in Aufgabe 29 ein Schema R=(A,B,C,D,E) und eine Menge funktionaler Abhängigkeiten F = {A → BC, A → D, CD → E, B → D, E → A}. F + = {α → β, αA → γ, αE → γ, αCD → γ, αBC → γ, αB → βD | β ⊆ α ⊆ R, ∅ = 6 γ ⊆ R} a) Geben Sie eine verlustlose BCNF–Zerlegung für R bezüglich F an. Ist diese abhängigkeitserhaltend? Algorithmus result = {R} done = false berechne F + while not done if Ri in result nicht BCNF then α → β die BCNF-Bedingung verletzt result = (result - Ri ) ∪ ( Ri → β ) ∪ { α, β }}; else done = true; result = {R}, done = false, denn B → D nicht trivial und B kein Superschlüssel → Ri = R betrachte B → D result = {(result − R) ∪ Ri − β ∪ {α, β}} {z } | {z } | {z } | {A,B,C,E} ∅ {B,D} = {A, B, C, E} ∪ {B, D} → R1 → in BCNF = {A, B, C, E} R2 → in BCNF B Superschlüssel = {B, D} → done := true Wir haben Zerlegungen gefunden, dies ist verlustlos, aber nicht abhängigkeitserhaltent (29.b.iii))! Julia Wolters 37 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung b) Geben Sie ein Beispiel für ein relationales Schema R0 und eine Menge funktionaler Abhängigkeiten F 0 an, sodass mindestens zwei verschiedene BCNF–Zerlegungen von R bezüglich F existieren. R0 = (A, B, C, D), F 0 = {A → B, C → B, B → C} B ist kein Superschlüssel → Zerlegung notwendig Z1 = {(A, B), (C, D), (B, D)} Z2 = {(A, B), (C, D), (A, D)} c) Bestimmen Sie Fc . F ist F ohne überflüssige Attribute“ ” c α→β∈F A ∈ α überflüssig in α ⇔ β ⊆ (α − {A})+ aus F B ∈ β überflüssig in β ⇔ B ∈ α+ aus F 0 = {F − {α → β} ∪ {α → (β − B)}} B → D, E → A } CD → E}, F = { A → BC, A → D, | {z {z } | | C D →E C + =C+E D+ =D+E z }| { A→ B C D + + / B ∈A / =ACDE C ∈A+=ABD D∈A =ABCDED Da D∈A+ ist D überflüssig. F = {A → BC, CD → E, B → D, E → A} d) Geben Sie eine verlustlose 3NF–Zerlegung für R bezüglich F an. Ist diese abhängigkeitserhaltend? R bereits in 3NF B → D erfüllt (3), denn D in Kandidatenschlüssel CD enthalten. Algorithmus für 3NF-Zerlegung: Für jede funktionale Abhängigkeit in Fc ein Schema, eins davon muss Kandidatenschlüssel enthalten. FC = {A → CV, CD → E, B → D, E → A} ⇒ {{A, B, C}, {C, D, E}, {B, D}, {A, E}} ist 3-NF Zerlegung, dies ist verlustlos und abhängigkeitserhaltend 38 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 31 Im Jahr 1962 wurden in der Bundesrepublik Deutschland vierstellige Postleitzahlen eingeführt, die am 01.07.1993 durch fünfstellige Postleitzahlen ersetzt wurden. Informieren Sie sich gegebenenfalls über die Einzelheiten und bearbeiten Sie die folgenden Aufgaben unter Vernachlässigung der Besonderheiten für Postfach- und Großkunden. Gehen Sie zur weiteren Vereinfachung davon aus, dass eine Postleitzahl höchstens einem Ort zugeordnet ist. a) Definieren Sie jeweils entsprechende Schemata, die alle erforderlichen Attribute für den praktischen Einsatz von vier- und fünfstelligen Postleitzahlen besitzen. Ralt = (Ort, P LZ) Rneu = (Ort, Stadtteil, Straße, HausN r, P LZ) b) Bestimmen Sie den Abschluss der funktionalen Abhängigkeiten über diesen Schemata. + Falt = {α → β, Ortα → γ, P LZα → γ | β ⊆ α ⊆ Ralt , ∅ = 6 γ ⊆ Ralt } + Fneu = {α → β, (Ort, Stadtteil, Straße, HausN r)α → γ, P LZα → Ortβ | β ⊆ α ⊆ Rneu , ∅ = 6 γ ⊆ Rneu } c) Bestimmen Sie eine kanonische Überdeckung der funktionalen Abhängigkeiten dieser Schemata. Faltc = {Ort → P LZ, P LZ → Ort} Fneuc = {(Ort, Stadtteil, Straße, HausN r) → P LZ, P LZ → 0rt} d) Bestimmen Sie mit Begründung den Typ der besten Normalform, in der sich Ihre Schemata be nden. + in BCNF Ralt ist bzgl. Falt α → β, trivial Ortα → γ, Ortα ist Superschlüssel P LZα → γ, P LZα ist Superschlüssel + Rneu ist bzgl. Fneu in 3NF. α → β, trivial (Ort, Stadtteil, Straße, HausN r)α ist Superschlüssel P LZα → Ortβ P LZα ist kein Superschlüssel, α ist nicht trivial ⇒ nicht in BCNF Ort ist in Kandidatenschlüssel (Ort, Stadtteil, Straße, HausN r) ⇒ in 3NF Julia Wolters 39 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung e) Zerlegen Sie Ihre Schemata gegebenenfalls, um möglichst gute abhängigkeitserhaltende Zerlegungen zu erhalten. Ra lt ist bereits in bester“ Normalform ” Behauptung: Es gibt keine abhängigkeitserhaltende Zerlegung von Rneu bzgl. Fneu , die besser“ als 3NF sind. ” / Fi ∀i Beweis: (Ort, Stadtteil, Straße, HausN r) → P LZ ∈ ⇒ (Ort, Stadtteil, Straße, HausN r) ∈ / (F1 ∪ . . . ∪ Fn )+ + keine nicht triviale Abhängigkeit α → β mit P LZ ∈ Außerdem existiert in Fneu β ∧ P LZ ∈ /α ⇒A∈ / (F1 ∪ . . . ∪ Fn )+ aber A ∈ F + Jede Zerlegung ist also nicht abhängigkeitsherhaltend. 40 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 32 Gegeben sei das Schema einer einfachen Büchereidatenbank: Bücher (BuchNr, ISBN, Titel, Autor) Ausleihen (AusleihNr, LeserNr, LeserName, LeserGebDatum, BuchNr) Beachten Sie dabei, dass von einem Buch durchaus mehrere Exemplare vorhanden sein können. (a) Erläutern Sie die Nachteile dieses Schemas. Nachteile: • Redundanz – ISBN, Titel, Autor bei mehreren Exemplaren eines Buchs – LeserName, LeserGebDatum bei jeder Ausleihe • Verbessern Sie das Schema, indem Sie eine BCNF-Zerlegung berechnen. Stellen Sie dazu die funktionalen Abhängigkeiten auf und wenden Sie dann den BCNFAlgorithmus ohne Berechnung von F + auf ein Schema an, das alle Attribute von Bücher und Ausleihen enthält. Leser kann ohne Ausleihe nicht existieren (b) Algorithmus ohne F + für BCNF result = {R} done in BCNF? while (not done) do done := true for each Ri in result do if(∃α ⊆ Ri mit α+ 6= α und Ri − α 6= ∅) then β := (α+ − α) ∩ Ri result = {( result -Ri ) ∪ {Ri − β} ∪ {αβ}} done := false F = { LeserNR ISBN BuchNR AusleihNr ⇒ ⇒ ⇒ ⇒ LeserName, LeserGebDatum; Titel, Autor; ISBN; LeserNr, BuchNr } result = Rn − {BuchNr, ISBN, Titel, AusleihNr, ...} ,→ done = false; z.B. BuchNr. → ISBN done = true; Ri = R α = BuchNr (α+ = { BuchNr, ISBN, Titel, Autor }) Julia Wolters 41 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung β = {α+ − α} ∩ Ri = { ISBN, Titel, Autor } result = {AusleihN r, LeserN r, LeserN ame, LeserGebDatum, BuchN r} ∪{BuchN r, ISBN, T itel, Autor} done = false ,→ Betrachte R1 := { AusleihNr, LeserNr, LeserName, LeserGebDatum, BuchNr } α = LeserNr (α+ = { LeserNr, LeserName, LeserGebDatum }) β = { LeserName, LeserGebDatum } result := {BuchN r, ISBN, T itel, Autor} ∪ {AusleihN r, LeserN r, BuchN r} | {z } | {z } R2 R3 ∪{LeserN r, LeserN ame, LeserGebDatum} | {z } R4 ,→ Betrachte R2 = {BuchN r, ISBN, T itel, Autor} α = ISBN (α+ = { ISBN, Titel, Autor }) β = { Titel, Autor } result := R3 ∪ R4 ∪ {BuchN r, ISBN } ∪ {ISBN, T itel, Autor} {z } | R5 Zerlegung ist R3 ∪ R4 ∪ R5 42 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 33 zu zeigen: M4 ( MBC ( M3 ( M1 Beweis: M4 ( MBC M4 ⊆ MBC : R in 4NF: A: R nicht in BCNF ⇒ ∃α → β nicht trivial, α kein Replikationsregel Superschlüssel für R =⇒ ∃α →→ β nicht trivial, α kein Superschlüssel für R ⇒ R nicht in 4NF M4 6= MBC : R = (A, B, C, D), D)(A →→ BC), R in BCNF, da alle funktionalen Abhängigkeiten trivial, R nicht in 4NF, weil A →→ BC nicht trivial und A →→ BC kein Superschlüssel MBC ( M3 MBC ⊆ M3 : R in BCNF ⇒ ∀α → β ∈ F + α → β trivial, α Superschlüssel ⇒ ∀α → β ∈ F + α → β trivial oder α Superschlüssel oder ∀A ∈ β − α, A ∈ K, K Kandidatenschlüssel ⇒ in 3NF MBC 6= M3 : R = (A, B, C, D), F = (AD → CD, C → B), F + = {α → β, ABα → β, Cα → Bβ|β ⊆ α ⊆ R, ∅ = 6 γ ⊆ R} α → β trivial ABα → γ ⇒ ABα Superschlüssel Cα → Bβ ⇒ nicht in BCNF, nicht trivial, Cα kein Superschlüssel ⇒ in 3NF, weil Bβ − Cα = B und B in AB Kandidatenschlüssel enthalten. M3 ( M1 M3 ⊆ M1 : klar, da nach Definition alle Relationen, die wir betrachten, in 1NF sind. M3 6= M1 : R = (A, B, C, D), F = {A → D, B → D, C → AB}, R in 1NF klar, B → D ∈ F + , nicht trivial, B kein Superschlüssel und D − B = D ( C Kandidatenschlüssel ⇒ R nicht in 3NF Julia Wolters 43 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 34 zz Es gibt Joinabhängigkeiten, die nicht äquivalent zu einer mehrwertigen Abhängigkeit sind. R = (A, B, C) ∗ ((A, B), (B, C), (A, C)) A B C 1 3 6 2 3 5 1 4 5 1 3 5 Dies gilt, wenn r = Π(R1 (r)) 1 Π(R2 (r)) 1 Π(R3 (r)) A B B C 1 3 3 6 ΠR1 (r) 1 ΠR2 (r): 2 3 3 5 4 5 1 4 A 1 2 1 1 B C A 3 6 1 3 5 1 2 4 5 1 3 5 A B C 1 3 5 = 2 3 5 1 4 6 1 3 C 6 5 5 5 R in 3 nicht leeren Teilmengen, Y, Z, W, partioniert, Y →→ Z gilt ⇔ ∀r(R) hy1 , z1 , w1 i ∈ r ∧ hy1 , z2 , w2 i ∈ r ⇒ hy1 , z1 , w2 i ∈ r ∧ hy1 , z2 , w1 i ∈ r A →→ B : h1, 3, 5i ∈ r ∧ h1, 4, 5i ∈ r 3, 5i ∈ r ∧ h1, 4, 6i ∈ R ⇒ gilt nicht auf R ⇒h1, Es gibt eine Normalform, die besser“ ist als 4NF ” Projekt-Join-Normalform (PJNF, 5NF) R ist PJNF bzgl. einer Menge funktionaler mehrwertige und Joinabhängigkeiten ⇔ ∀ ∗ (R1 , . . . , Rn ) mit Ri ⊆ R, R = R1 ∪ . . . Rn gilt (1) ∗(R1 , . . . , Rn ) trivial oder (2) jedes Ri ist Superschlüssel für R MP JN F ( M4N F lässt sich nicht weiterverkleinern, ohne dass Informationen verloren gehen. 44 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 35 (a) Nachteile des Schema KIGA • Hohe Redundanz (pro Kind z.B. Speicherung von Spiel, Tag, Zeit, Raum) ⇒ unübersichtlich, hoher Sortier- und Speicheraufwand und vor allem Aktualistätsaufwand • Ein Kind ohne Gruppe kann nicht repräsentiert werden (b) F + = {α → β, (N ame, V orname, GebDatum)α → (Gruppe, Raum)β, Kindα → Raumβ, Kindα → Gruppeβ, (T ag, Zeit)α → (Spiel, Gruppe, Raum)β, (T ag, Zeit)α → (Spiel, Raum)β, (T ag, Zeit)α → (Spiel, Gruppe)β, (Kind, T ag, Zeit) → γ}. Gruppe →→ Spiel, Tag, Zeit Gruppe →→ Name, Vorname, GebDatum, Raum Gruppe, Raum →→ Spiel, Tag, Zeit Gruppe, Raum →→ Name, Vorname, GebDatum KIGA ist nicht in 3NF. Gruppe → Raum nicht trivial, Gruppe kein Superschlüssel, Raum – Gruppe = Raum in keinem Kandidatenschlüssek enthalten ⇒ KIGA ist 1NF (c) Wende 4NF-Algorithmus an: 1. result = {KIGA} betrachte Gruppe →→ Spiel, Tag, Zeit Julia Wolters 45 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung 2. result = {(Gruppe, Raum, Kind), (Spiel, Tag, Zeit, Gruppe)} betrachte Gruppe →→ Name, Vorname, GebDatum 3. result = {(Gruppe, Kind),(Gruppe, Raum), (Spiel, Tag, Zeit, Gruppe)} ER-Diagramm: 1 −− urspruengliches KIGA−Schema 2 CREATE TABLE kiga ( 3 Name CHAR ( 1 5 ) , 4 Vorname CHAR ( 1 5 ) , 5 GebDatum CHAR ( 1 0 ) , 6 Gruppe INTEGER NOT NULL , 7 Raum INTEGER NOT NULL , 8 Tag CHAR ( 1 2 ) , 9 Zeit CHAR ( 6 ) , 10 Spiel CHAR ( 1 2 ) NOT NULL , 11 PRIMARY KEY ( Name , Vorname , GebDatum , Tag , Zeit ) ) ; 12 13 14 15 16 17 −− neues KIGA−Schema , resultierend aus Zerlegung oder ER−Entwurf und Beispieldaten 18 19 CREATE TABLE Kind ( 20 Name CHAR ( 1 5 ) , 21 Vorname CHAR ( 1 5 ) , 46 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 Datenbanken Musterlösungen GebDatum CHAR ( 1 0 ) , Gruppe INTEGER , PRIMARY KEY ( Name , Vorname , GebDatum ) , FOREIGN KEY ( Gruppe ) REFERENCES GruppenEnt ON DELETE SET NULL ON UPDATE CASCADE ) ; CREATE TABLE GruppenEnt ( Gruppe INTEGER , Raum INTEGER , PRIMARY KEY ( Gruppe ) , UNIQUE ( Raum ) ) ; CREATE TABLE GruppenSpielTermin ( Gruppe INTEGER NOT NULL , Spiel CHAR ( 1 2 ) NOT NULL , Tag CHAR ( 1 2 ) , Zeit CHAR ( 6 ) , PRIMARY KEY ( Tag , Zeit ) FOREIGN KEY ( Gruppe ) REFERENCES GruppenEnt ON DELETE CASCADE ON UPDATE CASCADE ) ; Julia Wolters 47 Übung SS 2009 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 36 1 −− Aufgabe 36 2 3 −− a ) 4 SELECT ∗ FROM ACCOUNT ; 5 6 −− b ) 7 SELECT customer_name , customer_street , customer_city 8 FROM customer NATURAL JOIN 9 ( SELECT DISTINCT customer_name FROM depositor NATURAL JOIN account NATURAL JOIN branch 10 WHERE branch_city = ’Brooklyn ’ ) AS temp1 11 UNION 12 SELECT customer_name , customer_street , customer_city 13 FROM customer NATURAL JOIN 14 ( SELECT DISTINCT customer_name FROM borrower NATURAL JOIN loan NATURAL JOIN branch 15 WHERE branch_city = ’Brooklyn ’ ) AS temp2 ; 16 17 18 −− c ) 19 SELECT branch_name , AVG ( balance ) FROM account 20 GROUP BY branch_name 21 HAVING AVG ( balance ) >= ALL ( SELECT AVG ( balance ) 22 FROM account GROUP BY branch_name ) ; 23 24 −− d ) 25 −− Kredite 26 CREATE VIEW borrowingView AS 27 SELECT count ( customer_name ) , loan_number FROM borrower GROUP BY loan_number ; 28 29 CREATE VIEW loaningView AS 30 SELECT customer_name , loan_number , ( amount / count ) AS newamount FROM borrower 31 NATURAL JOIN borrowingView NATURAL JOIN loan ; 32 33 CREATE VIEW loaningCityView AS 34 SELECT customer_city , SUM ( newamount ) AS sum_of_newamount 35 FROM loaningView NATURAL JOIN customer GROUP BY ( customer_city ) ; 36 37 38 −− Kontoguthaben 39 CREATE VIEW deposingView AS SELECT count ( customer_name ) , account_number 40 FROM depositor GROUP BY account_number ; 41 42 CREATE VIEW accountingView AS 48 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 43 SELECT customer_name , account_number , ( balance / count ) AS newbalance 44 FROM depositor NATURAL JOIN deposingView NATURAL JOIN account ; 45 46 CREATE VIEW accountingCityView AS 47 SELECT customer_city , SUM ( newBalance ) AS sum_of_newbalance 48 FROM accountingView NATURAL JOIN customer GROUP BY ( customer_city ) ; 49 50 51 −− Resultat 52 CREATE VIEW resultingView AS 53 ( SELECT ∗ FROM loaningCityView NATURAL FULL OUTER JOIN accountingCityView ) ; Julia Wolters 49 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 37 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 −− Lösungen zur Vorlesung Datenbanken −− Lösungsvorschlag zu Aufgabe 37 −−a ) SELECT ∗ FROM s ; −−b ) SELECT DISTINCT A FROM r ; −−c ) SELECT ∗ FROM r WHERE B = 4 2 ; −−d ) SELECT ∗ FROM r , s ; −−e ) SELECT DISTINCT A , F FROM r , s where C = D ; −−f ) ( SELECT ∗ FROM r1 ) UNION ( SELECT ∗ FROM r2 ) ; −−g ) ( SELECT ∗ FROM r1 ) INTERSECT ( SELECT ∗ FROM r2 ) ; −−h ) ( SELECT ∗ FROM r1 ) EXCEPT ( SELECT ∗ FROM r2 ) ; −−i ) 30 −− 31 32 33 −−j ) 34 35 36 −−k ) 37 38 39 −−l ) 40 41 −− 42 SELECT A , r3 . B , r3 . C FROM ( r1 NATURAL JOIN ( SELECT DISTINCT B , C FROM r2 ) AS r3 ) ; oder SELECT ∗ FROM ( r1 NATURAL JOIN ( SELECT DISTINCT B , C FROM r2 ) AS r3 ) ; SELECT ∗ FROM r JOIN s ON A = D ; SELECT ∗ FROM r JOIN s ON B = E WHERE A < D ; SELECT DISTINCT ∗ FROM ( SELECT D FROM s ) AS s1 , ( SELECT E , F FROM s ) AS s2 ; oder SELECT ∗ from ( SELECT DISTINCT D FROM s ) AS s1 , ( SELECT DISTINCT E , F FROM s ) AS s2 ; 50 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 43 −− 44 Datenbanken Musterlösungen oder SELECT DISTINCT s1 . D , s2 . E , s2 . F FROM s AS s1 , s AS s2 ; 1 −− Übungen zur Vorlesung Datenbanken 2 −− Beispielrelationen zur Aufgabenstellung von Aufgabe 37 3 4 drop table r ; 5 drop table s ; 6 7 drop table r1 ; 8 drop table r2 ; 9 10 11 create table r ( 12 A integer , 13 B integer , 14 C integer ) ; 15 16 create table s ( 17 D integer , 18 E integer , 19 F integer ) ; 20 create table r1 ( 21 A integer , 22 B integer , 23 C integer ) ; 24 create table r2 ( 25 A integer , 26 B integer , 27 C integer ) ; 28 29 30 31 insert into r values ( 4 2 , 4 2 , 4 2 ) ; 32 insert into r values ( 1 , 2 , 4 ) ; 33 insert into r values ( 2 , 2 , NULL ) ; 34 insert into r values ( 4 , 3 , 2 ) ; 35 insert into r values ( 2 , 5 , 9 ) ; 36 insert into r values ( 7 , 5 , 7 ) ; 37 38 insert into s values ( 4 , 5 , 6 ) ; 39 insert into s values ( 4 , 5 , 8 ) ; 40 insert into s values ( 5 , 5 , 8 ) ; 41 42 insert into r1 values ( 2 , 3 , 4 ) ; 43 insert into r1 values ( 7 , 6 , 7 ) ; 44 insert into r1 values ( 5 , 6 , 7 ) ; 45 Julia Wolters 51 Übung SS 2009 Übung SS 2009 46 47 48 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung insert into r2 values ( 2 , 3 , 4 ) ; insert into r2 values ( 6 , 3 , 4 ) ; insert into r2 values ( 5 , 6 , 7 ) ; 52 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 38 Zeigen oder widerlegen Sie ausgehend von den in der Vorlesung präsentierten Definitionen, dass in SQL folgende Äquivalenzen gelten: (a) <> all ⇔ not in T <> all m ⇔ ⇔ ⇔ ⇔ ⇔ ⇔ T 6= all m ∀t ∈ m(T 6= t) ¬∃t ∈ m¬(T 6= t) ¬(∃t ∈ m(T = t) ¬T in m T not in m (b) <> some ⇔ not in Gegenbeispiel: T = {5}, m = {0, 2, 5} T <> some m wahr T 6= 0, T 6= 2, 0, 2 ∈ m T not in m falsch T = 5 ∈ m not in ⇒<> some ⇔ (c) = some ⇔ in T = some m ⇔ ∃t ∈ m T = t ⇔ T in m Julia Wolters 53 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 39 Zeigen oder widerlegen Sie, dass die folgenden SQL-Anweisungen für eine Relation r über dem Schema R = (A, B) jeweils äquivalent sind. Was gilt für eine Relation r über dem Schema R = (A)? r A B 1 3 null 4 1 3 r A 1 % 2,3 wäre hier gleich null 2 • select count(∗) from r =3 • select count(A) from r =2 • select count(DISTINCT A) from r =1 54 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 40 Richten Sie sich mit den Skripten Airport.sql bzw. AirportForMySQL.sql eine FlughafenDatenbank mit PostgreSQL oder MySQL ein und formulieren sie folgende Anfragen in der jeweiligen SQL-Syntax: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 drop drop drop drop drop drop drop drop drop drop drop drop table table table table table table table table table table table table besitztVonUnternehmen cascade ; besitztVonPerson cascade ; darfFliegen cascade ; wartet cascade ; wartung cascade ; unternehmen cascade ; mitarbeiter cascade ; pilot cascade ; person cascade ; flugzeug cascade ; hangar cascade ; flugzeugtyp cascade ; create table flugzeugtyp ( modellbez varchar ( 3 0 ) kapazitaet smallint , gewicht int ) ; create table hangar ( hangarNr smallint kapazitaet smallint ) ; primary key , primary key , create table flugzeug ( regNr char (10) primary key , modellBez varchar ( 3 0 ) references flugzeugtyp , hangarNr smallint references hangar , platzNr int , unique ( hangarNr , platzNr ) ) ; create table person ( name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , gebDatum date , primary key ( name , adresse ) ) ; create table pilot ( name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , lizenzNr char (11) , primary key ( name , adresse ) , foreign key ( name , adresse ) references person ) ; Julia Wolters 55 Übung SS 2009 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung create table mitarbeiter ( name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , personalNr i n t , primary key ( name , adresse ) , foreign key ( name , adresse ) references person ) ; create table unternehmen ( name varchar ( 2 4 ) primary key ) ; create table wartung ( datum date , dauer interval hour to minute , regNr char (10) references flugzeug , primary key ( regNr , datum ) ) ; create table wartet ( regNr char (10) , datum date , name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , primary key ( regNr , datum , name , adresse ) , foreign key ( regNr , datum ) references wartung , foreign key ( name , adresse ) references mitarbeiter ) ; create table darfFliegen ( modellBez varchar ( 3 0 ) references flugzeugtyp , name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , primary key ( modellBez , name , adresse ) , foreign key ( name , adresse ) references pilot ) ; create table besitztVonPerson ( regNr char (10) references flugzeug , name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , primary key ( regNr , name , adresse ) , foreign key ( name , adresse ) references person ) ; create table besitztVonUnternehmen ( regNr char (10) references flugzeug , name varchar ( 2 4 ) , primary key ( regNr , name ) , foreign key ( name ) references unternehmen ) ; 56 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 Datenbanken Musterlösungen insert insert insert insert into into into into hangar hangar hangar hangar insert insert insert insert insert insert into into into into into into flugzeugtyp flugzeugtyp flugzeugtyp flugzeugtyp flugzeugtyp flugzeugtyp insert insert insert insert insert insert insert insert into into into into into into into into flugzeug flugzeug flugzeug flugzeug flugzeug flugzeug flugzeug flugzeug insert into person 1955 -12 -13 ’ ) ; insert into person 1967 -03 -20 ’ ) ; insert into person 1971 -04 -11 ’ ) ; insert into person 1923 -06 -17 ’ ) ; insert into person 1973 -12 -22 ’ ) ; insert into person 1944 -01 -11 ’ ) ; insert into person 1948 -11 -01 ’ ) ; insert into person 1950 -12 -31 ’ ) ; insert into pilot -23652 ’ ) ; insert into pilot -10200 ’ ) ; insert into pilot -20052 ’ ) ; insert into pilot Julia Wolters values values values values (1 , (2 , (3 , (4 , values values values values values values values values values values values values values values Übung SS 2009 5) ; 6) ; 10) ; 8) ; ( ’Cessna -22 - C16 ’ , 3 , 5 0 0 ) ; ( ’188 Cessna Agwagon ’ , 8 , 1 7 2 0 ) ; ( ’Convair CV 990 ’ , 4 , 8 0 0 ) ; ( ’Convair F2Y Sea Dart ’ , 2 , 4 2 0 ) ; ( ’Saab Tunnan ’ , 4 , 1 2 0 0 ) ; ( ’Saab J 21R’ , 9 , 1 7 0 ) ; ( ’CA -22 -3100 ’ , ( ’CA -34 -2346 ’ , ( ’CA -10 -4431 ’ , ( ’CA -21 -0234 ’ , ( ’CO -09 -9563 ’ , ( ’SA -01 -1823 ’ , ( ’SA -45 -0034 ’ , ( ’SA -21 -0234 ’ , ’Cessna -22 - C16 ’ , 1 , 5 ) ; ’Cessna -22 - C16 ’ , 3 , 1 0 ) ; ’188 Cessna Agwagon ’ , 4 , 1 ) ; ’188 Cessna Agwagon ’ , 4 , 4 ) ; ’Convair F2Y Sea Dart ’ , 3 , 9 ) ; ’Saab Tunnan ’ , 1 , 1 ) ; ’Saab Tunnan ’ , 2 , 1 ) ; ’Saab J 21R’ , 2 , 3 ) ; values ( ’Luther Vandros ’ , ’Parkway 7, Witchtown ’ , ’ values ( ’Grant Green ’ , ’Main Street 231 , Dallas ’ , ’ values ( ’Herbie Hancock ’ , ’4th Street 43, Dallas ’ , ’ values ( ’John Lee Hooker ’ , ’Brodway 121 , Yorktown ’ , ’ values ( ’Johnny Ray ’ , ’Uptown 332 , New York ’ , ’ values ( ’Miles Davis ’ , ’34 th Avenue 376 , New York ’ , ’ values ( ’Keith Jarret ’ , ’23 th Avenue 12, New York ’ , ’ values ( ’Joe Cool ’ , ’South Road 3, Santa Barbara ’ , ’ values ( ’Luther Vandros ’ , ’Parkway 7, Witchtown ’ , ’PP -CA values ( ’Joe Cool ’ , ’South Road 3, Santa Barbara ’ , ’PL -CC values ( ’Johnny Ray ’ , ’Uptown 332 , New York ’ , ’PP -CA values ( ’Miles Davis ’ , ’34 th Avenue 376 , New York ’ , ’PP - 57 Übung SS 2009 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung SC -30000 ’ ) ; insert into pilot values ( ’Keith Jarret ’ , ’23 th Avenue 12, New York ’ , ’PP SC -31020 ’ ) ; insert into mitarbeiter values ( ’Luther Vandros ’ , ’Parkway 7, Witchtown ’ , 34451) ; insert into mitarbeiter values ( ’Grant Green ’ , ’Main Street 231 , Dallas ’ , 54234) ; insert into mitarbeiter values ( ’Herbie Hancock ’ , ’4th Street 43, Dallas ’ , 43321) ; insert into unternehmen values ( ’Dixie ’ ) ; insert into unternehmen values ( ’Carlsberg ’ ) ; insert insert insert insert insert insert into into into into into into Wartung Wartung Wartung Wartung Wartung Wartung values values values values values values ( ’2005 -11 -15 ’ , ’2 ( ’2005 -11 -16 ’ , ’2 ( ’2005 -11 -23 ’ , ’2 ( ’2005 -11 -19 ’ , ’6 ( ’2005 -11 -20 ’ , ’3 ( ’2003 -11 -21 ’ , ’4 insert into wartet values ( ’CA -22 -3100 ’ , Street 231 , Dallas ’ ) ; insert into wartet values ( ’CA -22 -3100 ’ , th Street 43, Dallas ’ ) ; insert into wartet values ( ’CA -22 -3100 ’ , Street 231 , Dallas ’ ) ; insert into wartet values ( ’CA -22 -3100 ’ , th Street 43, Dallas ’ ) ; hour 10 minute ’ , ’CA -22 -3100 ’ ) ; hour 20 minute ’ , ’CA -22 -3100 ’ ) ; hour 10 minute ’ , ’CA -22 -3100 ’ ) ; hour 00 minute ’ , ’SA -21 -0234 ’ ) ; hour ’ , ’SA -01 -1823 ’ ) ; hour ’ , ’SA -01 -1823 ’ ) ; ’2005 -11 -15 ’ , ’Grant Green ’ , ’Main ’2005 -11 -16 ’ , ’Herbie Hancock ’ , ’4 ’2005 -11 -16 ’ , ’Grant Green ’ , ’Main ’2005 -11 -23 ’ , ’Herbie Hancock ’ , ’4 insert into wartet values ( ’SA -01 -1823 ’ , ’2005 -11 -20 ’ , ’Herbie Hancock ’ , ’4 th Street 43, Dallas ’ ) ; insert into wartet values ( ’SA -01 -1823 ’ , ’2003 -11 -21 ’ , ’Herbie Hancock ’ , ’4 th Street 43, Dallas ’ ) ; insert into wartet values ( ’SA -21 -0234 ’ , ’2005 -11 -19 ’ , ’Grant Green ’ , ’Main Street 231 , Dallas ’ ) ; insert into darfFliegen values 7, Witchtown ’ ) ; insert into darfFliegen values Parkway 7, Witchtown ’ ) ; insert into darfFliegen values Parkway 7, Witchtown ’ ) ; insert into darfFliegen values 7, Witchtown ’ ) ; insert into darfFliegen values Witchtown ’ ) ; insert into darfFliegen values ( ’Cessna -22 - C16 ’ , ’Luther Vandros ’ , ’Parkway ( ’188 Cessna Agwagon ’ , ’Luther Vandros ’ , ’ ( ’Convair CV 990 ’ , ’Luther Vandros ’ , ’ ( ’Saab Tunnan ’ , ’Luther Vandros ’ , ’Parkway ( ’Saab J 21R’ , ’Luther Vandros ’ , ’Parkway 7, ( ’Convair CV 990 ’ , ’Joe Cool ’ , ’South Road 58 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 1 2 3 4 5 6 7 8 9 10 11 12 Datenbanken Musterlösungen 3, Santa Barbara ’ ) ; insert into darfFliegen values Santa Barbara ’ ) ; insert into darfFliegen values Santa Barbara ’ ) ; insert into darfFliegen values Santa Barbara ’ ) ; insert into darfFliegen values 332 , New York ’ ) ; insert into darfFliegen values th Avenue 376 , New York ’ ) ; insert into darfFliegen values Avenue 376 , New York ’ ) ; insert into darfFliegen values Avenue 12, New York ’ ) ; insert into darfFliegen values Avenue 12, New York ’ ) ; insert into darfFliegen values Avenue 12, New York ’ ) ; insert into besitztVonPerson Parkway 7, Witchtown ’ ) ; insert into besitztVonPerson Brodway 121 , Yorktown ’ ) ; insert into besitztVonPerson Brodway 121 , Yorktown ’ ) ; insert into besitztVonPerson Avenue 12, New York ’ ) ; insert into besitztVonPerson Avenue 12, New York ’ ) ; insert into besitztVonPerson Avenue 12, New York ’ ) ; Übung SS 2009 ( ’Cessna -22 - C16 ’ , ’Joe Cool ’ , ’South Road 3, ( ’Saab Tunnan ’ , ’Joe Cool ’ , ’South Road 3, ( ’Saab J 21R’ , ’Joe Cool ’ , ’South Road 3, ( ’Convair CV 990 ’ , ’Johnny Ray ’ , ’Uptown ( ’Convair F2Y Sea Dart ’ , ’Miles Davis ’ , ’34 ( ’Convair CV 990 ’ , ’Miles Davis ’ , ’34 th ( ’Cessna -22 - C16 ’ , ’Keith Jarret ’ , ’23 th ( ’188 Cessna Agwagon ’ , ’Keith Jarret ’ , ’23 th ( ’Convair CV 990 ’ , ’Keith Jarret ’ , ’23 th values ( ’CA -22 -3100 ’ , ’Luther Vandros ’ , ’ values ( ’CA -21 -0234 ’ , ’John Lee Hooker ’ , ’ values ( ’SA -45 -0034 ’ , ’John Lee Hooker ’ , ’ values ( ’SA -01 -1823 ’ , ’Keith Jarret ’ , ’23 th values ( ’SA -21 -0234 ’ , ’Keith Jarret ’ , ’23 th values ( ’CO -09 -9563 ’ , ’Keith Jarret ’ , ’23 th insert into besitztVonUnternehmen values ( ’CA -34 -2346 ’ , ’Dixie ’ ) ; insert into besitztVonUnternehmen values ( ’CA -10 -4431 ’ , ’Carlsberg ’ ) ; drop drop drop drop drop drop drop drop drop drop drop drop table table table table table table table table table table table table besitztVonUnternehmen cascade ; besitztVonPerson cascade ; darfFliegen cascade ; wartet cascade ; wartung cascade ; unternehmen cascade ; mitarbeiter cascade ; pilot cascade ; person cascade ; flugzeug cascade ; hangar cascade ; flugzeugtyp cascade ; Julia Wolters 59 Übung SS 2009 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 create table flugzeugtyp ( modellbez varchar ( 3 0 ) kapazitaet smallint , gewicht int ) ; create table hangar ( hangarNr smallint kapazitaet smallint ) ; Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung primary key , primary key , create table flugzeug ( regNr char (10) primary key , modellBez varchar ( 3 0 ) references flugzeugtyp , hangarNr smallint references hangar , platzNr int , unique ( hangarNr , platzNr ) ) ; create table person ( name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , gebDatum date , primary key ( name , adresse ) ) ; create table pilot ( name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , lizenzNr char (11) , primary key ( name , adresse ) , foreign key ( name , adresse ) references person ) ; create table mitarbeiter ( name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , personalNr i n t , primary key ( name , adresse ) , foreign key ( name , adresse ) references person ) ; create table unternehmen ( name varchar ( 2 4 ) primary key ) ; create table wartung ( datum date , dauer time , regNr char (10) references flugzeug , primary key ( regNr , datum ) ) ; create table wartet ( 60 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 Datenbanken Musterlösungen Übung SS 2009 regNr char (10) , datum date , name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , primary key ( regNr , datum , name , adresse ) , foreign key ( regNr , datum ) references wartung , foreign key ( name , adresse ) references mitarbeiter ) ; create table darfFliegen ( modellBez varchar ( 3 0 ) references flugzeugtyp , name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , primary key ( modellBez , name , adresse ) , foreign key ( name , adresse ) references pilot ) ; create table besitztVonPerson ( regNr char (10) references flugzeug , name varchar ( 2 4 ) , adresse varchar ( 5 0 ) , primary key ( regNr , name , adresse ) , foreign key ( name , adresse ) references person ) ; create table besitztVonUnternehmen ( regNr char (10) references flugzeug , name varchar ( 2 4 ) , primary key ( regNr , name ) , foreign key ( name ) references unternehmen ) ; insert insert insert insert into into into into hangar hangar hangar hangar insert insert insert insert insert insert into into into into into into flugzeugtyp flugzeugtyp flugzeugtyp flugzeugtyp flugzeugtyp flugzeugtyp insert insert insert insert into into into into flugzeug flugzeug flugzeug flugzeug Julia Wolters values values values values (1 , (2 , (3 , (4 , values values values values values values values values values values 5) ; 6) ; 10) ; 8) ; ( ’Cessna -22 - C16 ’ , 3 , 5 0 0 ) ; ( ’188 Cessna Agwagon ’ , 8 , 1 7 2 0 ) ; ( ’Convair CV 990 ’ , 4 , 8 0 0 ) ; ( ’Convair F2Y Sea Dart ’ , 2 , 4 2 0 ) ; ( ’Saab Tunnan ’ , 4 , 1 2 0 0 ) ; ( ’Saab J 21R’ , 9 , 1 7 0 ) ; ( ’CA -22 -3100 ’ , ( ’CA -34 -2346 ’ , ( ’CA -10 -4431 ’ , ( ’CA -21 -0234 ’ , 61 ’Cessna -22 - C16 ’ , 1 , 5 ) ; ’Cessna -22 - C16 ’ , 3 , 1 0 ) ; ’188 Cessna Agwagon ’ , 4 , 1 ) ; ’188 Cessna Agwagon ’ , 4 , 4 ) ; Übung SS 2009 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 insert insert insert insert into into into into Datenbanken Musterlösungen flugzeug flugzeug flugzeug flugzeug ( ’CO -09 -9563 ’ , ( ’SA -01 -1823 ’ , ( ’SA -45 -0034 ’ , ( ’SA -21 -0234 ’ , ’Convair F2Y Sea Dart ’ , 3 , 9 ) ; ’Saab Tunnan ’ , 1 , 1 ) ; ’Saab Tunnan ’ , 2 , 1 ) ; ’Saab J 21R’ , 2 , 3 ) ; values ( ’Luther Vandros ’ , ’Parkway 7, Witchtown ’ , ’ insert into person 12 -13 -1955 ’ ) ; insert into person 03 -20 -1967 ’ ) ; insert into person 04 -11 -1971 ’ ) ; insert into person 06 -17 -1923 ’ ) ; insert into person 12 -22 -1973 ’ ) ; insert into person 01 -11 -1944 ’ ) ; insert into person 11 -01 -1948 ’ ) ; insert into person 12 -31 -1950 ’ ) ; insert into pilot -23652 ’ ) ; insert into pilot -10200 ’ ) ; insert into pilot -20042 ’ ) ; insert into pilot SC -30000 ’ ) ; insert into pilot SC -31020 ’ ) ; values values values values Mittwochs, 08 – 10 Uhr Musterlösung values ( ’Grant Green ’ , ’Main Street 231 , Dallas ’ , ’ values ( ’Herbie Hancock ’ , ’4th Street 43, Dallas ’ , ’ values ( ’John Lee Hooker ’ , ’Brodway 121 , Yorktown ’ , ’ values ( ’Johnny Ray ’ , ’Uptown 332 , New York ’ , ’ values ( ’Miles Davis ’ , ’34 th Avenue 376 , New York ’ , ’ values ( ’Keith Jarret ’ , ’23 th Avenue 12, New York ’ , ’ values ( ’Joe Cool ’ , ’South Road 3, Santa Barbara ’ , ’ values ( ’Luther Vandros ’ , ’Parkway 7, Witchtown ’ , ’PP -CA values ( ’Joe Cool ’ , ’South Road 3, Santa Barbara ’ , ’PL -CC values ( ’Johnny Ray ’ , ’Uptown 332 , New York ’ , ’PP -CA values ( ’Miles Davis ’ , ’34 th Avenue 376 , New York ’ , ’PP values ( ’Keith Jarret ’ , ’23 th Avenue 12, New York ’ , ’PP - insert into mitarbeiter values ( ’Luther Vandros ’ , ’Parkway 7, Witchtown ’ , 34451) ; insert into mitarbeiter values ( ’Grant Green ’ , ’Main Street 231 , Dallas ’ , 54234) ; insert into mitarbeiter values ( ’Herbie Hancock ’ , ’4th Street 43, Dallas ’ , 43321) ; insert into unternehmen values ( ’Dixie ’ ) ; insert into unternehmen values ( ’Carlsberg ’ ) ; insert insert insert insert into into into into wartung wartung wartung wartung values values values values ( ’04 -11 -15 ’ , ’2:10:00 ’ , ’CA -22 -3100 ’ ) ; ( ’04 -11 -16 ’ , ’2:20:00 ’ , ’CA -22 -3100 ’ ) ; ( ’04 -11 -23 ’ , ’2:10:00 ’ , ’CA -22 -3100 ’ ) ; ( ’04 -11 -19 ’ , ’6:00:00 ’ , ’SA -21 -0234 ’ ) ; 62 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 Datenbanken Musterlösungen Übung SS 2009 insert into wartung values ( ’04 -11 -20 ’ , ’3:00:00 ’ , ’SA -01 -1823 ’ ) ; insert into wartung values ( ’03 -11 -21 ’ , ’4:00:00 ’ , ’SA -01 -1823 ’ ) ; insert into wartet values Street 231 , Dallas ’ ) ; insert into wartet values Street 43, Dallas ’ ) ; insert into wartet values Street 231 , Dallas ’ ) ; insert into wartet values Street 43, Dallas ’ ) ; ( ’CA -22 -3100 ’ , ’04 -11 -15 ’ , ’Grant Green ’ , ’Main ( ’CA -22 -3100 ’ , ’04 -11 -16 ’ , ’Herbie Hancock ’ , ’4th ( ’CA -22 -3100 ’ , ’04 -11 -16 ’ , ’Grant Green ’ , ’Main ( ’CA -22 -3100 ’ , ’04 -11 -23 ’ , ’Herbie Hancock ’ , ’4th insert into wartet values ( ’SA -01 -1823 ’ , ’04 -11 -20 ’ , ’Herbie Hancock ’ , ’4th Street 43, Dallas ’ ) ; insert into wartet values ( ’SA -01 -1823 ’ , ’04 -11 -21 ’ , ’Herbie Hancock ’ , ’4th Street 43, Dallas ’ ) ; insert into wartet values ( ’SA -21 -0234 ’ , ’04 -11 -19 ’ , ’Grant Green ’ , ’Main Street 231 , Dallas ’ ) ; insert into darfFliegen values 7, Witchtown ’ ) ; insert into darfFliegen values Parkway 7, Witchtown ’ ) ; insert into darfFliegen values Parkway 7, Witchtown ’ ) ; insert into darfFliegen values 7, Witchtown ’ ) ; insert into darfFliegen values Witchtown ’ ) ; insert into darfFliegen values 3, Santa Barbara ’ ) ; insert into darfFliegen values Santa Barbara ’ ) ; insert into darfFliegen values Santa Barbara ’ ) ; insert into darfFliegen values Santa Barbara ’ ) ; insert into darfFliegen values 332 , New York ’ ) ; insert into darfFliegen values th Avenue 376 , New York ’ ) ; insert into darfFliegen values Avenue 376 , New York ’ ) ; insert into darfFliegen values Avenue 12, New York ’ ) ; insert into darfFliegen values Avenue 12, New York ’ ) ; Julia Wolters ( ’Cessna -22 - C16 ’ , ’Luther Vandros ’ , ’Parkway ( ’188 Cessna Agwagon ’ , ’Luther Vandros ’ , ’ ( ’Convair CV 990 ’ , ’Luther Vandros ’ , ’ ( ’Saab Tunnan ’ , ’Luther Vandros ’ , ’Parkway ( ’Saab J 21R’ , ’Luther Vandros ’ , ’Parkway 7, ( ’Convair CV 990 ’ , ’Joe Cool ’ , ’South Road ( ’Cessna -22 - C16 ’ , ’Joe Cool ’ , ’South Road 3, ( ’Saab Tunnan ’ , ’Joe Cool ’ , ’South Road 3, ( ’Saab J 21R’ , ’Joe Cool ’ , ’South Road 3, ( ’Convair CV 990 ’ , ’Johnny Ray ’ , ’Uptown ( ’Convair F2Y Sea Dart ’ , ’Miles Davis ’ , ’34 ( ’Convair CV 990 ’ , ’Miles Davis ’ , ’34 th ( ’Cessna -22 - C16 ’ , ’Keith Jarret ’ , ’23 th ( ’188 Cessna Agwagon ’ , ’Keith Jarret ’ , ’23 th 63 Übung SS 2009 167 168 169 170 171 172 173 174 175 176 177 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung insert into darfFliegen values ( ’Convair CV 990 ’ , ’Keith Jarret ’ , ’23 th Avenue 12, New York ’ ) ; insert into besitztVonPerson Parkway 7, Witchtown ’ ) ; insert into besitztVonPerson Brodway 121 , Yorktown ’ ) ; insert into besitztVonPerson Brodway 121 , Yorktown ’ ) ; insert into besitztVonPerson Avenue 12, New York ’ ) ; insert into besitztVonPerson Avenue 12, New York ’ ) ; insert into besitztVonPerson Avenue 12, New York ’ ) ; values ( ’CA -22 -3100 ’ , ’Luther Vandros ’ , ’ values ( ’CA -21 -0234 ’ , ’John Lee Hooker ’ , ’ values ( ’SA -45 -0034 ’ , ’John Lee Hooker ’ , ’ values ( ’SA -01 -1823 ’ , ’Keith Jarret ’ , ’23 th values ( ’SA -21 -0234 ’ , ’Keith Jarret ’ , ’23 th values ( ’CO -09 -9563 ’ , ’Keith Jarret ’ , ’23 th insert into besitztVonUnternehmen values ( ’CA -34 -2346 ’ , ’Dixie ’ ) ; insert into besitztVonUnternehmen values ( ’CA -10 -4431 ’ , ’Carlsberg ’ ) ; 1. Geben Sie die Registrierungsnummern und die Typen aller Flugzeuge zurück. 2. Bestimmen Sie alle Piloten, die Flugzeugtypen fliegen dürfen, deren Modellbezeichnung den Teilausdruck Cessna“ enthält. ” 3. Ermitteln Sie die Namen aller Piloten, deren Lizenznummern mit einer Doppelnull endet. 4. Bestimmen Sie alle Flugzeuge, deren Registrierungsnummer mit CA“ beginnt oder ” mindestens siebenstellig ist. 5. Geben Sie die Registriernummern aller Flugzeuge zurück, die zwischen dem 16.11.2006 und dem 23.11.2006 mehrfach gewartet wurden. 1 2 3 4 5 6 7 8 −− Übungen zur Vorlesung Datenbanken −− Lösungsvorschlag zu Aufgabe 40 −− a ) SELECT regNr , flugzeugtyp FROM flugzeug NATURAL JOIN flugzeugtyp ; −− b ) SELECT DISTINCT pilot . ∗ FROM pilot NATURAL JOIN darfFliegen WHERE modellBez LIKE ’% Cessna %’ ; 9 10 −− c ) 11 SELECT name FROM pilot WHERE lizenzNr LIKE ’%00 ’ ; 12 64 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 13 −− d ) 14 SELECT ∗ FROM flugzeug WHERE regnr LIKE ’CA%’ OR char_length ( regnr ) >= 7 ; 15 −− alternativ : 16 SELECT ∗ FROM flugzeug WHERE regnr LIKE ’CA%’ OR regnr LIKE ’_______ %’ ; 17 18 −− e ) 19 SELECT regNr FROM wartung 20 WHERE datum BETWEEN ’2005 -11 -16 ’ and ’2005 -11 -23 ’ 21 GROUP BY regNr HAVING COUNT ( DATUM ) > 1 ; Julia Wolters 65 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung 1 −− Aufgabe 41 2 3 CREATE TABLE auftraege ( 4 anfang TIMESTAMP NOT NULL , 5 ende TIMESTAMP , 6 kunde VARCHAR , 7 beschreibung VARCHAR , 8 PRIMARY KEY ( anfang , kunde , beschreibung ) 9 ); 10 11 INSERT INTO auftraege VALUES ( ’2006 -12 -06 09:00 ’ , ’2006 -12 -06 12:00 ’ , ’ Mueller ’ , ’Nikolausen ’ ) ; 12 INSERT INTO auftraege VALUES ( ’2006 -12 -02 15:00 ’ , ’2006 -12 -02 15:32 ’ , ’Meier ’ , ’Foo ’ ) ; 13 INSERT INTO auftraege VALUES ( ’2006 -12 -08 12:38 ’ , ’2006 -12 -08 22:05 ’ , ’Meier ’ , ’Bar ’ ) ; 14 INSERT INTO auftraege VALUES ( ’2006 -12 -04 12:38 ’ , ’2006 -12 -05 11:11 ’ , ’Meier ’ , ’Foobar2 ’ ) ; 15 INSERT INTO auftraege VALUES ( ’2006 -04 -28 23:30 ’ , ’2006 -05 -02 10:00 ’ , ’Meier ’ , ’Foobar3 ’ ) ; 16 INSERT INTO auftraege VALUES ( ’2006 -04 -20 12:00 ’ , ’2006 -12 -01 12:00 ’ , ’ Muster AG ’ , ’Testen ’ ) ; 17 18 −− a ) Arbeitszeit pro Auftrag ausrechnen 19 DROP VIEW auftraege_dauer ; 20 CREATE VIEW auftraege_dauer AS 21 SELECT ∗ , ( ende − anfang ) AS dauer FROM auftraege ; 22 23 SELECT ∗ FROM auftraege_dauer ; 24 25 SELECT EXTRACT ( MINUTE FROM dauer ) as minuten , EXTRACT ( HOUR FROM dauer ) as stunden , 26 ( CASE 27 WHEN EXTRACT ( MINUTE FROM dauer ) = 0 THEN 0 28 WHEN EXTRACT ( MINUTE FROM dauer ) < 15 THEN 15 29 WHEN EXTRACT ( MINUTE FROM dauer ) < 30 THEN 30 30 WHEN EXTRACT ( MINUTE FROM dauer ) < 45 THEN 45 31 ELSE 60 32 END ) AS minuten15 FROM auftraege_dauer ; 33 34 SELECT kunde , beschreibung , dauer , dauer + ( ( 35 ( CASE 36 WHEN EXTRACT ( MINUTE FROM dauer ) = 0 THEN 0 37 WHEN EXTRACT ( MINUTE FROM dauer ) < 15 THEN 15 38 WHEN EXTRACT ( MINUTE FROM dauer ) < 30 THEN 30 39 WHEN EXTRACT ( MINUTE FROM dauer ) < 45 THEN 45 40 ELSE 60 66 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 41 END ) − EXTRACT ( MINUTE FROM dauer ) ) ∗ interval ’1 minute ’ ) AS dauer15 42 FROM auftraege_dauer ; 43 44 −− b ) Auftragsdauer für jeden Auftraggeber aufaddieren 45 46 SELECT kunde , sum ( dauer ) FROM auftraege_dauer GROUP BY kunde ; 47 48 −− c ) Kunden mit Aufträgen zwischen 0 1 . 0 5 . 2 0 0 6 und 3 0 . 1 1 . 2 0 0 6 49 50 SELECT DISTINCT kunde from auftraege 51 WHERE ende >= DATE ’2006 -05 -01 ’ AND anfang <= DATE ’2006 -11 -30 ’ ; 52 53 −− oder 54 55 SELECT DISTINCT kunde from auftraege 56 WHERE ( anfang , ende ) OVERLAPS ( DATE ’2006 -05 -01 ’ , DATE ’2006 -11 -30 ’ ) ; 57 58 −− d ) Aufträge zwischen 2 0 : 0 0 und 0 6 : 0 0 Uhr oder an Wochenenden 59 60 SELECT ∗ FROM auftraege_dauer WHERE 61 −− Zwischen 20 und 6 Uhr ? 62 ( extract ( hour from anfang ) between 20 and 2 4 ) or 63 ( extract ( hour from anfang ) between 0 and 6 ) or 64 ( extract ( hour from ende ) between 20 and 2 4 ) or 65 ( extract ( hour from ende ) between 0 and 6 ) or 66 ( extract ( dow from anfang ) < extract ( dow from ende ) ) or 67 ( dauer > INTERVAL ’1 day ’ ) 68 −− Anfang am Wochenende ? 69 or extract ( dow from anfang ) = 0 or extract ( dow from anfang ) = 6 70 −− Ende am Wochenende ? 71 or extract ( dow from ende ) = 0 or extract ( dow from ende ) = 6 72 −− Anfang und Ende in der Woche , aber in unterschiedlichen Wochen − eigentlich unnötig 73 or ( extract ( dow from anfang ) between 1 and 5 74 and extract ( dow from ende ) between 1 and 5 75 and ( extract ( week from anfang ) < extract ( week from ende ) 76 or extract ( year from anfang ) < extract ( year from ende ) ) ) ; 77 78 −− e ) Aufträge an denen gerade gearbeitet wird 79 80 SELECT ∗ FROM auftraege WHERE anfang < now ( ) AND ( now ( ) < ende OR ende IS NULL ) ; 81 82 −− f ) Durchschnittliche Wochenarbeitszeit für abgeschlossene Aufträge 83 84 SELECT min ( anfang ) , max ( ende ) , max ( ende ) − min ( anfang ) AS zeitraum , 85 extract ( days from ( max ( ende ) − min ( anfang ) ) ) as gesamttage , 86 sum ( dauer ) AS gesamtdauer , Julia Wolters 67 Übung SS 2009 87 88 89 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung ( sum ( dauer ) / extract ( days from ( max ( ende ) − min ( anfang ) ) ) ) ∗ 7 AS wochendauer FROM auftraege_dauer WHERE ende < now ( ) AND ende IS NOT NULL ; 68 Julia Wolters Aufgabe 42 Beispieldatenbank (zu E-R-Diagramm Folie II-56): angestellter: ■ ■ Ssn 1 7 ■ Vorname Nachname “Hans” “Langeschon” “Klaus” “Schmidt” Gehalt 1500 2000 angehöriger: Name “Barbara“ ■ Grad 1 Gdatum “2.2.1966” arbeitet-für: AngestellterSsn 1 7 AngestellterSsn 7 AbteilungNummer 10 5 1 Aufgabe 42 ■ Verletzungstypen mit Beispielen: Insert • • • • 1. Domain constraints – a. – b. INSERT INTO angestellter VALUES(34567, ‘Andrea’, ‘Hausmann’, - 3000); INSERT INTO arbeitet-für VALUES(1, ‘keineZahl‘); 2. Referentielle Integritätsbedingungen – a. – b. INSERT INTO angehöriger VALUES(’Peter’, 1, ’31.01.1976’, 34567); INSERT INTO arbeitet-für VALUES(34567, 10); 3. Schlüsselbedingungen – a. – b. INSERT INTO angestellter VALUES(null, ’Andrea’, ‘Hausmann’, 2500); INSERT INTO angestellter VALUES(1, ’Andrea’, ‘Hausmann’, 3000); 4. semantische Assertions – INSERT INTO angestellter VALUES(45362, ‘Barbara’, ‘Langeschon’, 1500); („Verwandte von Angestellten dürfen nicht eingestellt werden.“) 2 Aufgabe 42 ■ Verletzungstypen mit Beispielen: Delete • 2. Referentielle Integritätsbedingungen – DELETE FROM angestellter WHERE Ssn = 1; • 4. semantische Assertions – DELETE FROM angehöriger WHERE AngestellterSsn = 7; („Angehörige ersten Grades dürfen nicht entfernt werden.“) 3 Aufgabe 42 ■ Verletzungstypen mit Beispielen: Update • 1. Domain constraints – UPDATE angestellter SET Gehalt = -3000 WHERE Ssn = 1; • 2. Referentielle Integritätsbedingungen – UPDATE angestellter SET Ssn = 12 WHERE Ssn = 1; • 3. Schlüsselbedingungen – UPDATE angestellter SET P-Nr = null WHERE Ssn = 1; • 4. semantische Assertions – UPDATE angestellter SET Gehalt = 1000 WHERE Ssn = 1; ("Zu drastische Kürzung" oder "zu geringes Gehalt") 4 Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 43 Betrachten und erläutern Sie folgende SQL-Anweisung: create table hierarchie ( angestellter varchar(20) not null, vorgesetzter varchar(20) not null, primary key (angestellter), foreign key (vorgesetzter) references hierarchie on delete cascade); (a) Erklären Sie allgemein die Wirkung des Löschens eines Datensatzes aus der erzeugten Tabelle der zu Grunde liegenden Relationalen Datenbank. (b) Verdeutlichen Sie Ihre Aussage aus dem vorherigen Aufgabenteil, indem Sie ausführlich die Wirkung des Löschens des Datensatzes (Müller, Meier)“ aus folgender Tabelle ” darstellen. angestellter vorgesetzter Schulz Schulz Meier Schulz Müller Meier Schmidt Schulz Tupelnikus Müller Relationica Tupelnikus Tadagoliker Müller (a) Beim Löschen eines Tupels werden alle referenzierenden (nicht referenzierten) Tupel auch gelöscht. (b) (1) (2) (3) (2) angestellter vorgesetzter Schulz Schulz Meier Schulz Meier Müller Schmidt Schulz ( ( ( ( Tupelnikus Müller ( ( ( (( ((( Relationica Tupelnikus (((( ( ( ( ( Tadagoliker Müller (((( ( Julia Wolters 73 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 44 (Präsenzübung) Auf der Homepage zur Vorlesung steht das Gerüst eines Java-Programms PersonenJDBC zur Verwendung von JDBC bereit. Mit Hilfe dieses Programms ist es bisher nur möglich, Instanzen der bereitgestellen Klasse Person anzulegen. Erweitern Sie das Programm nun wie folgt: (a) Stellen Sie eine Verbindung zu einer Datenbank im bereitgestellten PostgreSQL- oder MySQLDatenbanksystem her. Hinweise zum Aufruf des Programms finden Sie in der Datei readme.txt. (b) Erzeugen Sie in dieser Datenbank eine Tabelle Personendaten“, die der Speicherung ” von Personendaten dient. Sorgen Sie dafür, dass diese Tabelle genau dann erzeugt wird, wenn sie noch nicht in der Datenbank existiert. (c) Speichern sie alle vorhandenen Objektdaten in dieser Tabelle und geben Sie ihren Inhalt auf den Bildschirm aus. Löschen Sie anschließend alle Objekte und erzeugen Sie diese dann erneut mit Hilfe der gespeicherten Datensätze. Geben Sie nun die neu erzeugten Objekte aus. (d) Führen Sie drei SQL-Anfragen auf der Datenbank durch und geben Sie das Resultat jeweils aus. (e) Löschen Sie alle Jacksons“ aus der Datenbank und fügen Sie zusätzlich die Person ” namens Jackson, Five“, von der keine weiteren Daten bekannt sind hinzu. Diese ” beiden Operationen sollen zusammen als eine Transaktion deklariert und ausgeführt werden. (f) Schließen Sie die Verbindung zur Datenbank. 1 2 3 4 5 6 7 8 9 10 11 12 import java . sql . ∗ ; import java . util . GregorianCalendar ; import java . util . StringTokenizer ; /∗ ∗ ∗ D i e s e K l a s s e s t e l l t d i e Verbindung zu e i n e r SQL−Datenbank ü b e r JDBC h e r und f ü h r t ∗ O pe ra t io ne n a u f e i n e r e v e n t u e l l noch zu e r z e u g e n d e n T a b e l l e ” p e r s o n e n d a t e n ” durch . Die Daten ∗ d e r T a b e l l e entstammen einem Array { @ l i n k PersonenJDBC . p e r s o n s } von { @ l i n k Person}−Obj ekte n , ∗ d i e j e w e i l s d i e Daten b e z ü g l i c h e i n e r Person e n t h a l t e n . ∗ ∗ @author Henrik Blunck ∗ @author Jörg Mensmann 74 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 Datenbanken Musterlösungen Übung SS 2009 ∗ @version 1.1 ∗/ p u b l i c c l a s s PersonenJDBC { p u b l i c s t a t i c f i n a l String PSQL_DRIVER = "org. postgresql . Driver " ; p u b l i c s t a t i c f i n a l String MYSQL_DRIVER = "com. mysql .jdbc. Driver " ; private private private private Connection db ; String dbName ; String userName ; String password ; // Der Datenbestand , d e r i n d i e Datenbank i n t e g r i e r t werden s o l l p r i v a t e Person [ ] persons = { new Person ( " Jackson " , " Michael " , 1 7 3 2 3 4 5 , new GregorianCalendar ( 1 9 6 6 , 1 1 , 9 ) , Person . MALE ) , new Person ( " Bolton " , " Michael " , 5 3 2 2 3 4 5 , new GregorianCalendar ( 1 9 6 5 , 1 , 1 7 ) , Person . MALE ) , new Person ( " Gabriel " , "Peter " , 4 6 3 2 3 4 5 , new GregorianCalendar ( 1 9 5 9 , 4 , 5 ) , Person . MALE ) , new Person ( " Jackson " , " Jennifer " , 2 3 2 3 3 4 5 , new GregorianCalendar ( 1 9 8 0 , 7 , 2 3 ) , Person . FEMALE ) , new Person ( " Hooker " , "John Lee" , 1 3 4 2 3 4 5 , new GregorianCalendar ( 1 9 1 6 , 3 , 7 ) , Person . MALE ) , new Person ( " Turner " , "Tina" , 2 5 3 2 3 4 5 , new GregorianCalendar ( 1 9 5 8 , 1 , 1 7 ) , Person . FEMALE ) , new Person ( "Rush" , " Jennifer " , 6 1 3 2 3 4 5 , new GregorianCalendar ( 1 9 6 1 , 3 , 2 1 ) , Person . FEMALE ) }; p u b l i c PersonenJDBC ( ) { } /∗ ∗ ∗ A b a r b e i t u n g d e r i n d e r A u f g a b e n s t e l l u n g angegebenen Anforderungen ∗/ p u b l i c v o i d doRequiredOperations ( ) { // S t r i n g −V a r i a b l e , das j e w e i l s d i e SQL−S t a t e m e n t s a l s Z e i c h e n k e t t e h ä l t String sqlString ; // Das R e s u l t S e t , das j e w e i l s d i e E r g e b n i s s e e i n z e l n e r Anfragen h ä l t ResultSet rs ; b o o l e a n tableExists = t r u e ; // Test , ob T a b e l l e mit Namen ” p e r s o n e n d a t e n ” b e r e i t s e x i s t i e r t try { // db . getMetaData ( ) l i e f e r t DatabaseMetaData−O b j e k t . g e t T a b l e s (..) liefert Julia Wolters 75 Übung SS 2009 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung // R e s u l t S e t , d a s s a l l e T a b e l l e n e n t h ä l t , d i e d i e mit den durch d i e Parametern // g e g e b e n e n K r i t e r i e n über einstim men . n e x t ( ) g i b t f a l s e zurück , f a l l s kein // n ä c h s t e s Element im R e s u l t S e t e x i s t i e r t e . rs = db . getMetaData ( ) . getTables ( "" , "" , " personendaten " , n u l l ) ; rs . beforeFirst ( ) ; tableExists = rs . next ( ) ; } c a t c h ( SQLException e ) { reactOnSQLException ( e ) ; } // F a l l s T a b e l l e n n i c h t e x i s t i e r t e , e r z e u g e und f ü l l e s i e i f ( ! tableExists ) { // T a b e l l e n s c h e m a e r z e u g e n try { System . out . println ( " Erzeuge Tabellen ..." ) ; constructPersonDatabase ( ) ; } c a t c h ( SQLException sqlException ) { reactOnSQLException ( sqlException ) ; } } // T a b e l l e f ü l l e n mit den Daten aus dem Person−Array p e r s o n s try { fillPersonDatabase ( ) ; } c a t c h ( SQLException sqlException ) { reactOnSQLException ( sqlException ) ; } // A u s l e s e n d e s gesamten D a t e n b e s t a n d e s d e r T a b e l l e ” p e r s o n e n d a t e n ” und Ausgabe try { sqlString = " SELECT * FROM personendaten " ; rs = executeQuery ( sqlString ) ; System . out . println ( " Datenbank nach dem Einlesen des Datenbestandes :" ) ; printResultSet ( rs , 5 ) ; } c a t c h ( SQLException sqlException ) { reactOnSQLException ( sqlException ) ; } // Löschen d e s Person−Arrays und Neuanlegen mit den den Daten aus d e r Personen−Datenbank try { persons = n u l l ; persons = extractPersonsFromDatabase ( ) ; } c a t c h ( SQLException sqlException ) { 76 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 Datenbanken Musterlösungen Übung SS 2009 reactOnSQLException ( sqlException ) ; } // Ausgabe d e r O b j e k t e i n p e r s o n s [ ] System . out . println ( " Ausgabe der Objekte in persons []:" ) ; f o r ( i n t i = 0 ; i < persons . length ; i++) { persons [ i ] . printPerson ( ) ; } // Anfrage an d i e Datenbank und Anzeigen i n d e r Konsole : Die Anfrage g i b t Vor− und // Nachnamen a l l e r Personen , deren Nachname mit ”J” b e g i n n t , g e o r d n e t nach // a u f s t e i g e n d e n Nachnamen z u r ü c k . try { sqlString = " SELECT lastname , firstname FROM personendaten WHERE " + " lastname LIKE ’J%’ " ; rs = executeQuery ( sqlString ) ; System . out . println ( " Datenbestand selektiert mit:’ " + sqlString + "’" ) ; printResultSet ( rs , 2 ) ; } c a t c h ( SQLException sqlException ) { reactOnSQLException ( sqlException ) ; } // Anfrage an d i e Datenbank und Anzeigen i n d e r Konsole : Die Anfrage g i b t Vor− und // Nachnamen und G e b u r t s d a t e n a l l e r Personen , d i e v o r 1960 g e b o r e n s i n d , g e o r d n e t nach // a u f s t e i g e n d e n G e b u r t s t a g e n z u r ü c k . try { sqlString = " SELECT lastname , firstname , dayofbirth FROM" + " personendaten WHERE dayofbirth < ’1960 1 1’ order " + " by dayofbirth " ; rs = executeQuery ( sqlString ) ; System . out . println ( " Datenbestand selektiert mit:’ " + sqlString + "’" ) ; printResultSet ( rs , 3 ) ; } c a t c h ( SQLException sqlException ) { reactOnSQLException ( sqlException ) ; } // Anfrage an d i e Datenbank und Anzeigen i n d e r Konsole : Die Anfrage g i b t Vor− und // Nachnamen und G e b u r t s d a t e n a l l e r w e i b l i c h e n Personen , d i e z w i s c h e n 1960 und 1970 Julia Wolters 77 Übung SS 2009 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 Mittwochs, 08 – 10 Uhr Musterlösung // g e b o r e n s i n d , g e o r d n e t nach a u f s t e i g e n d e n G e b u r t s t a g e n z u r ü c k . try { sqlString = " SELECT lastname , firstname , dayofbirth FROM" + " personendaten WHERE dayofbirth >= ’1960 1 1’ " + "and dayofbirth < ’1970 1 1’ and gender = ’female ’" + " order by dayofbirth " ; rs = executeQuery ( sqlString ) ; System . out . println ( " Datenbestand selektiert mit:’ " + sqlString + "’" ) ; printResultSet ( rs , 3 ) ; } c a t c h ( SQLException sqlException ) { reactOnSQLException ( sqlException ) ; } // E i n f ü g e n d e s genannten neuen E i n t r a g e s try { db . setAutoCommit ( f a l s e ) ; sqlString = " DELETE FROM personendaten WHERE lastname = ’ Jackson ’" ; executeUpdate ( sqlString ) ; sqlString = " INSERT INTO personendaten values (’ Jackson ’, ’Five ’, 5, NULL , NULL)" ; executeUpdate ( sqlString ) ; db . commit ( ) ; db . setAutoCommit ( t r u e ) ; } c a t c h ( SQLException sqlException ) { reactOnSQLException ( sqlException ) ; } 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 Datenbanken Musterlösungen // S c h l i e s s e n d e r Verbindung try { db . close ( ) ; } c a t c h ( SQLException sqlException ) { reactOnSQLException ( sqlException ) ; } } /∗ ∗ ∗ L e g t d i e T a b e l l e ” p e r s o n d e n d a t e n ” i n d e r Datenbank an ∗ ∗ @throws SQLException ∗/ p u b l i c v o i d constructPersonDatabase ( ) throws SQLException { String sqlString ; Statement stmt ; // Erzeugen d e r T a b e l l e 78 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 Datenbanken Musterlösungen Übung SS 2009 sqlString = " CREATE TABLE personendaten ( lastname VARCHAR (20) ," + " firstname VARCHAR (20) , ssn integer , dayofbirth CHAR (12) ," + " gender CHAR (6) , PRIMARY KEY (ssn), CHECK " + " ( gender in (’male ’,’female ’)));" ; stmt = db . createStatement ( ) ; stmt . execute ( sqlString ) ; } /∗ ∗ ∗ Führt e i n e Anfrage an d i e v e rb un d en de Datenbank aus . ∗ ∗ @param s q l S t r i n g Das a u s z u f ü h r e n d e SQL−S t a t e m e n t a l s S t r i n g . ∗ @return Das R e s u l t S e t , das das E r g b n i s d e r Anfrage an d i e Datenbank e n t h ä l t . ∗ @throws SQLException ∗/ p u b l i c ResultSet executeQuery ( String sqlString ) throws SQLException { Statement statement = db . createStatement ( ResultSet . TYPE_SCROLL_INSENSITIVE , ResultSet . CONCUR_UPDATABLE ); r e t u r n statement . executeQuery ( sqlString ) ; } /∗ ∗ ∗ Führt e i n Update i n d e r verbundenden Datenbank aus . ∗ ∗ @param s q l S t r i n g Das a u s z u f ü h r e n d e SQL−S t a t e m e n t a l s S t r i n g . ∗ @return Angabe ü b e r den E r f o l g d e s Updates ∗ @throws SQLException ∗/ p u b l i c i n t executeUpdate ( String sqlString ) throws SQLException { Statement statement = db . createStatement ( ) ; r e t u r n statement . executeUpdate ( sqlString ) ; } /∗ ∗ ∗ F ü l l t d i e T a b e l l e ” p e r s o n e n d a t e n ” mit dem D a t e n b e s t a n d im PersonenArray . Vorab werden ∗ d i e a l t e n T a b e l l e n i n h a l t e g e l ö s c h t . ∗ ∗ @throws SQLException ∗/ p u b l i c v o i d fillPersonDatabase ( ) throws SQLException { Statement stmt = db . createStatement ( ) ; String sqlString = " DELETE FROM personendaten " ; stmt . executeUpdate ( sqlString ) ; f o r ( i n t i = 0 ; i < persons . length ; i++) { Julia Wolters 79 Übung SS 2009 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung sqlString = " INSERT INTO personendaten VALUES (’" + persons [ i ] . getLastname ( ) + "’, ’" + persons [ i ] . getFirstname ( ) + "’, " + Integer . toString ( persons [ i ] . getSsn ( ) ) + ",’" + getSqlDateByJavaGregorianCalendar ( persons [ i ] . getDayOfBirth ( ) ) + "’, ’" + persons [ i ] . getGender ( ) + " ’)" ; stmt . executeUpdate ( sqlString ) ; } } /∗ ∗ ∗ K o n v e r t i e r t e i n O b j e k t vom Typ e i n O b j e k t vom Typ G r e g o r i a n C a l e n d a r in ∗ e i n e n S t r i n g im SQL−Date−Format ∗ ∗ @param c a l e n d a r ∗ @return e i n S t r i n g im SQL−Date−Format ∗/ p u b l i c s t a t i c String getSqlDateByJavaGregorianCalendar ( GregorianCalendar calendar ) { String ret ; ret = calendar . get ( java . util . Calendar . YEAR ) + " " + calendar . get ( java . util . Calendar . MONTH ) + " " + calendar . get ( java . util . Calendar . DAY_OF_MONTH ) ; r e t u r n ret ; } /∗ ∗ ∗ K o n v e r t i e r t e i n e n S t r i n g im SQL−Date−Format ( z .B. 1999 2 12) i n e i n ∗ O b j e k t vom Typ G r e g o r i a n C a l e n d a r . ∗ ∗ @param s q l D a t e ∗ e i n S t r i n g im SQL−Date−Format ∗ @return e i n O b j e k t vom Typ G r e g o r i a n C a l e n d a r . ∗/ p u b l i c s t a t i c GregorianCalendar getJavaGreogorianCalendareBysqlDate ( String sqlDate ) { i f ( sqlDate == n u l l ) r e t u r n new GregorianCalendar ( ) ; else { StringTokenizer tokenizer = new StringTokenizer ( sqlDate , " " ) ; r e t u r n new GregorianCalendar ( Integer . parseInt ( tokenizer . nextToken ( ) ) , Integer . parseInt ( tokenizer . nextToken ( ) ) , Integer . parseInt ( tokenizer . nextToken ( ) ) ) ; } } 80 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 Datenbanken Musterlösungen Übung SS 2009 /∗ ∗ ∗ E r z e u g t aus dem I n h a l t d e r T a b e l l e ” p e r s o n e n d a t e n ” d e r Datenbank e i n Array von I n s t a n z e n ∗ d e r K l a s s e Person . Ruft e x t r a c t P e r s o n s F r o m R e s u l t S e t ( ) a u f . ∗ ∗ @return @throws SQLException ∗/ p u b l i c Person [ ] extractPersonsFromDatabase ( ) throws SQLException { Statement statement = db . createStatement ( ResultSet . TYPE_SCROLL_INSENSITIVE , ResultSet . CONCUR_UPDATABLE ); String sqlString = " SELECT * FROM personendaten " ; ResultSet rs = statement . executeQuery ( sqlString ) ; Person [ ] ret = extractPersonsFromResultSet ( rs ) ; r e t u r n ret ; } /∗ ∗ ∗ E r z e u g t aus einem R e s u l t S e t −O b j e k t e i n Array von I n s t a n z e n d e r Klasse ∗ Person . Wird von e x t r a c t P e r s o n s F r o m D a t a b a s e ( ) a u f g e r u f e n . ∗ ∗ @param r s Das R e s u l t S e t , aus dem d i e Personendaten zu e x t r a h i e r e n sind . ∗ @return Ein Array von Person−Obj ekte n , das d i e e x t r a h i e r t e n Daten ∗ e n t h ä l t . ∗ @throws SQLException ∗/ p u b l i c s t a t i c Person [ ] extractPersonsFromResultSet ( ResultSet rs ) throws SQLException { i n t count = 0 ; rs . beforeFirst ( ) ; w h i l e ( ! rs . isLast ( ) ) { rs . next ( ) ; count++; } Person [ ] ret = new Person [ count ] ; rs . beforeFirst ( ) ; count = −1; w h i l e ( ! rs . isLast ( ) ) { rs . next ( ) ; count++; b o o l e a n female ; i f ( rs . getString ( " gender " ) != n u l l && rs . getString ( " gender " ) . equalsIgnoreCase ( Person . FEMALE_STRING ) ) { Julia Wolters 81 Übung SS 2009 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung female = t r u e ; } else { female = f a l s e ; } Person person = new Person ( rs . getString ( " lastname " ) , rs . getString ( " firstname " ) , rs . getInt ( "ssn" ) , getJavaGreogorianCalendareBysqlDate ( rs . getString ( " dayofbirth " ) ) , female ) ; ret [ count ] = person ; } r e t u r n ret ; } /∗ ∗ ∗ Lö s c h t a l l e Tupel aus d e r T a b e l l e ” p e r s o n e n d a t e n ” d e r Datenbank . ∗ ∗ @throws SQLException ∗/ p u b l i c v o i d clearPersonDatabase ( ) throws SQLException { Statement stmt = db . createStatement ( ) ; String sqlString = " DELETE FROM personendaten " ; stmt . executeUpdate ( sqlString ) ; } /∗ ∗ ∗ @ d e p r i c a t e d H e r s t e l l e n d e r Verbindung z u r Datenbank und S e t z e n d e r die ∗ Verbindung c h a r a k t i e r i s i e r e n d e n A t t r i b u t e d e s aufrufenden ∗ Objektes ∗ @param i n D r i v e r ∗ Der Name d e s T r e i b e r s . E n t s p r i c h t dem a b s o l u t e n Klassenpfad ∗ der T r e i b e r k l a s s e ∗ @throws ClassNotFoundException ∗ f a l l s e i n f a l s c h e r T r e i b e r s p e z i f i z i e r t wurde ∗ @throws SQLException ∗ f a l l s beim Ansprechen d e r Datenbank F e h l e r von d i e s e r ∗ g e m e l d e t werden ∗/ p u b l i c v o i d establishAndConnect ( String inDriver ) throws ClassNotFoundException , SQLException { Class . forName ( inDriver ) ; db = DriverManager . getConnection ( dbName , userName , password ) ; } /∗ ∗ ∗ G i b t e i n R e s u l t S e t i n T a b e l l e n f o r m a u f den B i l d s c h i r m aus . 82 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 Datenbanken Musterlösungen Übung SS 2009 ∗ ∗ @param r s Das R e s u l t S e t , das a u s g e g e b e n werden s o l l ∗ @param numOfColumns ∗ Die Anzahl d e r A t t r i b u t w e r t e ( d . h . S p a l t e n ) d e r anzuzeigenden ∗ Tupel ( d . h . Z e i l e n ) ∗ @throws SQLException ∗/ p u b l i c s t a t i c v o i d printResultSet ( ResultSet rs , i n t numOfColumns ) throws SQLException { rs . beforeFirst ( ) ; w h i l e ( ! rs . isLast ( ) && rs . next ( ) ) { f o r ( i n t i = 1 ; i <= numOfColumns ; i++) { System . out . print ( rs . getString ( i ) + " " ) ; } System . out . println ( ) ; } } /∗ ∗ ∗ Methode z u r Ausnahmebehandlung während d e s Versuches , mit d e r Datenbank ∗ zu kommunizieren . ∗ ∗ @param s q l E x c e p t i o n Die g e w o r f e n e Ausnahme ∗/ p r i v a t e v o i d reactOnSQLException ( SQLException sqlException ) { b o o l e a n isFirstException = t r u e ; w h i l e ( isFirstException | | ( sqlException . getNextException ( ) != n u l l )) { System . out . println ( " Während der Arbeit mit der Datenbank trat folgender Fehler auf: " + sqlException . toString ( ) + " Code:" + sqlException . getErrorCode ( ) ) ; System . out . println ( "Die Verbindung verblieb in folgendem Status : " + sqlException . getSQLState ( ) ) ; isFirstException = f a l s e ; } } /∗ ∗ ∗ @param a r g s ∗/ p u b l i c s t a t i c v o i d main ( String args [ ] ) { PersonenJDBC personenJDBC = new PersonenJDBC ( ) ; Julia Wolters 83 Übung SS 2009 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung // B e r e i t s t e l l e n d e r E i n g a b e p a r a m e t e r f ü r d i e Verbindung mit d e r Datenbank ; p r ü f t // vorab , ob e i n Passwort a l s A u f r u f p a r a m e t e r ü b e r g e b e n wurde i f ( args . length == 3 ) { personenJDBC . dbName = args [ 0 ] ; personenJDBC . userName = args [ 1 ] ; personenJDBC . password = args [ 2 ] ; } e l s e i f ( args . length == 2 ) { personenJDBC . dbName = args [ 0 ] ; personenJDBC . userName = args [ 1 ] ; // F a l l s k e i n Passwort ü b e r g e b e n wurde , s e t z e das Passwort a l s leeren String personenJDBC . password = "" ; } else { // F a l l s d i e P a r a m e t e r a n z a h l n i c h t s i n n v o l l i s t , beende das Programm // mit F e h l e r m e l d u n g System . err . println ( " Benutzung : java PersonenJDBC <dbname > <dbusername > " + "[< dbuserpasswd >] \n" ) ; System . err . println ( " Beispiel : java PersonenJDBC jdbc: postgresql :// padme .uni - muenster .de/ mustermanndb mustermann }\n" + " oder java PersonenJDBC jdbc: mysql :// cpc.uni muenster .de/ mustermanndb mustermann " ) ; System . exit ( 1 ) ; } try { i f ( personenJDBC . dbName . startsWith ( "jdbc: postgresql :" ) ) { System . out . println ( " Benutze PostgreSQL ." ) ; personenJDBC . establishAndConnect ( PersonenJDBC . PSQL_DRIVER ) ; } e l s e i f ( personenJDBC . dbName . startsWith ( "jdbc: mysql :" ) ) { System . out . println ( " Benutze MySQL ." ) ; personenJDBC . establishAndConnect ( PersonenJDBC . MYSQL_DRIVER ) ; } else { System . err . println ( " Unbekanntes Datenbankssystem .\n" ) ; System . exit ( 1 ) ; } } c a t c h ( java . lang . ClassNotFoundException e ) { System . out . println ( " Verbindung mit der Datenbank fehlgeschlagen : Treiber nicht gefunden . " + e . toString ( ) ) ; } c a t c h ( SQLException sqlException ) { 84 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 436 437 438 439 440 441 442 Datenbanken Musterlösungen Übung SS 2009 personenJDBC . reactOnSQLException ( sqlException ) ; } // Führt d i e i n d e r A u f g a b e n s t e l l u n g genannten Anforderungen aus . personenJDBC . doRequiredOperations ( ) ; } } Julia Wolters 85 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 45 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 −− Aufgabe 45 −− geänderte Definition von depositor create table depositor ( customer_name c h a r ( 2 0 ) not n u l l , account_number c h a r ( 1 0 ) not n u l l , primary key ( customer_name , account_number ) , foreign key ( customer_name ) references customer on delete cascade , foreign key ( account_number ) references account on delete cascade ); −− alle Konten mit Anzahl ihrer Inhaber create view account_customer_count as select account_number , count ( customer_id ) as customer_count from depositor group by account_number ; −− Löschen eines Kunden verhindern , wenn es ein Konto mit Kontostand > 0 gibt , das nur diesem Kunden gehört create trigger customer_delete1 before delete on customer referencing old row as orow f o r each row when ( exists ( select account_number from account natural join account_customer_count natural join depositor where customer_id = orow . customer_id and balance > 0 and customer_count = 1 ) ) begin rollback work end ; 32 33 34 35 36 −− Beim Löschen eines Kunden alle Konten mit Kontostand 0 löschen , die nur diesem Kunden gehören 37 create trigger customer_delete2 38 before delete on customer 39 referencing old row as orow 40 f o r each row 41 begin 86 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung 42 43 44 45 Übung SS 2009 delete from account where account_number in ( select account_number from account natural join account_customer_count natural join depositor where customer_id = orow . customer_id and balance = 0 and customer_count = 1 ) 46 47 Datenbanken Musterlösungen end ; Julia Wolters 87 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 46 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 −− Aufgabe 46 −− Erzeugen der Sicht : CREATE VIEW customersInBrooklyn AS SELECT customer_name , customer_street , customer_city FROM customer NATURAL JOIN ( SELECT DISTINCT customer_name FROM depositor NATURAL JOIN account NATURAL JOIN branch WHERE branch_city = ’Brooklyn ’ ) AS temp1 UNION SELECT customer_name , customer_street , customer_city FROM customer NATURAL JOIN ( SELECT DISTINCT customer_name FROM borrower NATURAL JOIN loan NATURAL JOIN branch WHERE branch_city = ’Brooklyn ’ ) AS temp2 ; −− Entziehen aller Rechte an den an der Sicht beteiligten Tabellen : REVOKE REVOKE REVOKE REVOKE REVOKE REVOKE ALL ALL ALL ALL ALL ALL ON ON ON ON ON ON customer FROM Joe ; branch FROM Joe ; depositor FROM Joe ; account FROM Joe ; borrower FROM Joe ; loan FROM Joe ; −− Vergeben eines Leserechtes für die erzeugte Sicht : GRANT SELECT ON customersInBrooklyn TO Joe ; −− analog für Mary −− Bemerkung : Reihenfolge ist unerheblich , Revoken der Recht für Tabellen wirkt 34 −− sich nicht auf Rechte für Sichten aus . 88 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 47 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 Aufgabe 4 7 : c l a s s Person ( extent personen key name ) { attribute struct Pname { string Vorname , string Nachname } name ; relationship set<Person> bin−Mutter−von−Kind inverse Person : : bin−Kind−von−Mutter ; relationship set<Person> bin−Vater−von−Kind inverse Person : : bin−Kind−von−Vater ; relationship Person bin−Ehepartner−von inverse Person : : bin−Ehepartner−von ; relationship Person bin−Kind−von−Mutter inverse Person : : bin−Mutter−von−Kind ; relationship Person bin−Kind−von−Vater inverse Person : : bin−Vater−von−Kind ; relationship set<Person> bin−Kind−von inverse Person : : bin−Elternteil−von−Kind ; relationship set<Person> bin−Elternteil−von−Kind inverse Person : : bin−Kind−von ; }; Inverse Beziehung zur n:1− Beziehung "bin -Kind -von - Mutter " ist : "bin -Mutter -von -Kind" ( 1 : n−Beziehung ) und nicht : bin−Elternteil−von−Kind" (2:n- Beziehung ) select struct ( nachname : p.name.Nachname , mutter : p. mutter .name , vater : p. vater .name ) Julia Wolters 89 Übung SS 2009 47 48 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung from p in personen where p.name. Vorname = ’Hans ’ 90 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Aufgabe 48 (a) • Entität = Ansammlung von Attributwerten • Objekte enthalten Werte von Methoden (Zugang auf Werte sollte über Methoden erfolgen) • Gleichheitsbegriff (b) OO : Unterschied auch bei gleichen Attributwerten (z.B. Speicheradressen) relationale: Gleichheit von zwei Tupeln bei Gleichheit aller Alttributwerte (c) Geschindigkeit / Aufwand • aufwändiger beim Erzeugen, Löschen, Modifizieren • nötig wegen – Transaktionsmanagement – Sichherheitsmanagement – Integritätssicherung (d) • Nicht möglich durch Programm, Objekte ja gerade zugreifbar über Referenz. • 1. Lösung: Garbage Collection (mark and sweep) – markiere Objekte wie folgt: 1. direkt durch das Programm referenzierte Objekte 2. von solchen Objekten referenzierte Objekte – Lösche markierte Objekte • 2. Lösung: Zähler von Referenzen – jedes Objekt zählt die auf sich verwiesenen Objekte – Erzeugen / Entfernen einer Referenz → Benachrichtigung und Aktualität des Zählers Zähler = 0 ⇒ Objekt zerstören. (e) weitere Elemente des OODBMS • Transaktionsmanagement • Sicherheitsmanagement • Integritätssicherung Julia Wolters 91 Übung SS 2009 Datenbanken Musterlösungen Mittwochs, 08 – 10 Uhr Musterlösung Aufgabe 49 Geben Sie in Stichpunkten an, in welchen Punkten ein objektorientiertes DBMS einem relationalen DBMS überlegen ist, welche dieser Punkte bereits ein objektrelationales DBMS erfüllt und worin ein objektrelationales DBMS einem objektorientierten DBMS überlegen ist. Nennen Sie jeweils ein typisches Anwendungsbeispiel. Empfehlen Sie dann für jeden der folgenden Anwendungsbereiche eine der oben genannten DBMSTechnologien und begründen Sie kurz Ihre Empfehlung. (a) Entwicklung eines Systems zur Unterstützung der Konstruktionsabteilung im Maschinenbau. Hier werden vor allem Vektordaten erstellt, manipuliert und gespeichert. Zusätzlich sind in der Arbeitsvorbereitung betriebsspezifische Informationen und Angaben zur Arbeitszeit hinzuzufügen. • Komplexe Datentypen • Viele Datentypen - spezifische Manipulation / komplexe Anfragen → Methoden für einzelne Objektklassen erwünscht, höhere Programmiersprache für Anfragen ⇒ OO-DBMS (b) Entwicklung eines Systems zur Unterstützung elektronisch abzugebener Stimmzettel bei der nächsten Kommunalwahl. Unabhängig von Sicherheitsaspekten liegt die Aufgabe Ihrer Komponente insbesondere in der schnellen Analyse und Aufbereitung der Wählerstimmen unter verschiedenen Gesichtspunkten. • Simple Datentypen • große Datenmenge, schnelle Analyse wichtig ⇒ relationale DBMS (c) Entwicklung eines Systems zur Unterstützung von Jingles im Hörfunk. Zum einen müssen in Anwendungsprogrammen erzeugte Tondateien abgespeichert und geladen werden, zum anderen sollen bei Angabe eines Titels bestimmte vorher festgelegte Ausschnitte eines Musikstücks aus der Datenbank geladen und abgespielt werden. • große Datentypen • Jingels enthalten Teile von Musikstücken → Verweise erwünscht zwecks Vermeidung von Redundanz • Anfragen, Anforderungen sind simpel und fest vorgegeben ⇒ OR-DBMS 92 Julia Wolters Mittwochs, 08 – 10 Uhr Musterlösung Datenbanken Musterlösungen Übung SS 2009 Thomas’ Schreibregel • überflüssige Schreiboperationen werden nicht durchgeführt • Transaktion Ti will write(A) ausführen – T S(Ti ) < W-timestamp(A) · der zu schreibende Wert ist veraltet · der Wert muss nicht geschrieben werden – ansonsten keine Änderungen • resultierende Scheldules sind Sicht-serialisierbar Aufgabe 52 Geben Sie zu dem folgenden Schedule für jede Schreib- und Leseoperation die jeweils veränderten Werte der Zeitstempel für das Zeitstempelprotokoll an.Werden Transaktionen zurückgesetzt? 1 2 3 4 5 6 7 8 9 T1 read(A) T2 T3 read(A) read(B) read(B) write(A) read(A) write(A) write(B) write(B) Chronologische Reihenfolge: 1 2 3 4 5 6 7 8 9 Julia Wolters TS(T1) = 1 TS(T2) = 2 TS(T3) = 3 R - TS(A) = 1 R - TS(A) = 2 R - TS(B) = 3 R - TS(B) = 3 W - TS(A) = 2 R - TS(A) = 3 W - TS(A) = 3 W - TS(B) = 3 TS(1) = 1 < R - TS(B) = 3 Möglichkeit 1: T1 zurücksetzten Möglichkeit 2: Thomas’ Schreibregel 93