Aufgabenstellung: Prof. Dr. Inge Schestag zugelassene Hilfsmittel: 1 beidseitig bedrucktes oder beschriebenes A4-Blatt Bearbeitungszeit: 90 Minuten Note: Name: Matrikelnr. Aufgabe 1 Aufgabe 2 Aufgabe 3 Aufgabe 4 Aufgabe 5 Aufgabe 6 Summe 6 10 8 12 14 10 60 Schreiben Sie Ihre Lösung jeweils in den leeren Raum unterhalb der Aufgabenstellung. Falls der Platz nicht ausreicht, nutzen Sie die Rückseiten der Aufgabenblätter. Sollten bestimmte Fakten aus Ihrer Sicht nicht eindeutig formuliert sein, so schreiben Sie Ihre Annahmen zur Lösung dazu. 08.02.2012 1 / 9
Aufgabe 1 (6 = 3 + 3 Punkte) Codd sche Normalformen ( / 6) Das Relationenmodell eines Webshop wurde folgendermaßen modelliert: Webshop WarenkorbID integer Identifier des Warenkorbs ProduktID integer Identifier eines Produktes (im Warenkorb) ProduktBez varchar(20) Bezeichnung des Produktes ProduktPreis varchar(20) Preis des Produktes Menge integer Menge des bestellten Produktes Bestelldatum date Bestelldatum des Warenkorbes Die Relation genügt der 1. Normalform (1NF) und enthält die beiden Primärschlüssel- Komponenten WarenkorbID und ProduktID. a) Überpüfen Sie, ob die Relation der 2. Normalform (2NF) genügt. Falls ja, formulieren Sie die Bedingung für die 2. Normalform. Falls nein, nennen Sie alle Verletzungen und überführen Sie die Relation in die 2NF. 08.02.2012 2 / 9
b) Die Relation aus Teilaufgabe a) wird jetzt dahingehend geändert, dass der zusammengesetzte Primärschlüssel durch eine einzige synthetische Primärschlüssel-Spalte SynthKey vom Typ autoincrement ersetzt wird: Webshop SynthKey auto - PK vom Typ autoincrement WarenkorbID integer Identifier des Warenkorbs ProduktID integer Identifier eines Produktes (im Warenkorb) ProduktBez varchar(20) Bezeichnung des Produktes ProduktPreis varchar(20) Preis des Produktes Menge integer Menge des bestellten Produktes Bestelldatum date Bestelldatum des Warenkorbes Befindet sich die Relation jetzt in normalisiertem Zustand bzgl. der ersten drei NF? Begründen Sie Ihre Entscheidung und normalisieren Sie gegebenenfalls. 08.02.2012 3 / 9
( / 10) Aufgabe 2 (10 = 4 + 6 Punkte) ER-Modell, Relationenmodell a) Erweitern Sie das folgende ER-Modell einer Projektverwaltung um die Informationen, in welchem Zeitraum bzw. in welchen Zeiträumen (jeweils von- und bis-datum) ein Mitarbeiter in einem Projekt mitarbeitet. Abteilung AbtNr <pi> Zugehoerigkeit Mitarbeiter MANr <pi> Projektmitarbeit Projekt ProjektID <pi> b) Überführen Sie das erweiterte ER-Modell aus a) nun in ein Relationenmodell. Kennzeichnen Sie dabei Primärschlüssel und Fremdschlüssel und geben Sie für jeden Fremdschlüssel an, ob er NULL-fähig ist oder nicht. 08.02.2012 4 / 9
Aufgabe 3 (8 = 2 + 2 + 2 + 2 Punkte) referentielle Integrität ( / 8) Gegeben sei das Datenmodell einer Mitfahrerzentrale auf der letzten Seiten relevant für diese Aufgabe sind die Tabellen Person, Fahrer und Angebot, deren Foreign Key- Constraints im DDL-Skript wie folgt deklariert sind: create table Fahrer (..., constraint FK_Fahrer_RELATIONS_Person foreign key (PersonenID) references Person (PersonenID) on delete cascade ); create table Angebot (..., constraint FK_Angebot_RELATIONS_Fahrer foreign key (PersonenID) references Fahrer (PersonenID) ); Die drei Tabellen haben auf den Schlüsselspalten die folgenden Inhalte: Person Fahrer Angebot PersonenI D PersonenI D AngebotID PersonenI D 100 200 11 200 200 300 22 200 300 33 300 Beschreiben Sie, was bei den (voneinander unabhängigen) SQL-Anweisungen a) d) geschieht und begründen Sie jeweils in Stichworten Ihre Antwort: a) delete from Person where PersonenID = 100; b) delete from Person where PersonenID = 200; c) delete from Fahrer where PersonenID = 300; d) delete from Angebot where PersonenID = 200; 08.02.2012 5 / 9
Aufgabe 4 (12 = 4 + 4 + 4 Punkte) DML SELECT ( / 12) Die folgenden Teilaufgaben für die SELECT-Anweisungen a), b) und c) beziehen sich auf das Datenmodell auf der letzten Seite! a) Erstellen Sie eine Liste aller Fahrer (PersonenID und Name), die selbst schon mindestens einmal ein Angebot als Mitfahrer gebucht haben. b) Erstellen Sie eine Liste aller Fahrer (PersonenID und Name), die im Jahr 2011 mindestens 10 Fahrten angeboten hatten. Geben Sie die Anzahl der angebotenen Fahrten in 2011 mit aus. Ausschlaggebend ist das Abfahrtsdatum in 2011! c) Erstellen Sie eine Liste aller Zielorte in den Angeboten, absteigend sortiert nach der Häufigkeit des Angebotes. 08.02.2012 6 / 9
Aufgabe 5 (14 = 7 + 7 Punkte) ESQL / JDBC Trigger ( / 14) a) Schreiben Sie eine Prozedur, die zeilenweise von allen Angeboten die AngebotID, Startort, Zielort und Abfahrtsdatum an der Konsole ausgibt, deren Abfahrtsdatum in der Zukunft, also nach dem 08.02.2012 liegt, und die noch nicht ausgebucht sind (Datenmodell auf der letzten Seite!). Schreiben Sie die Prozedur entweder - als anonymen ESQL-Block einer prozeduralen Spracherweiterung von SQL (Pseudocode in Anlehnung an PL/SQL) für die Ausgabe an der Konsole können Sie die PL/SQL-Prozedur dbms_output.put_line(string ausgabe) verwenden, oder - als JDBC-Anweisungsblock einer Java-Applikation (Sie können davon ausgehen, dass die Connection schon aufgebaut ist und eine Connection-Instanz con zur Verfügung steht). b) Schreiben Sie einen Insert-Trigger für die Tabelle Buchung, - der die Spalte AnzahlGebucht um die entsprechende AnzahlMitfahrer erhöht, wenn die Anzahl der freien Plätze noch ausreicht für die gewünschte Buchung, und - der die Spalte ausgebucht in der Tabelle Angebot auf TRUE setzt, wenn die angebotene Anzahl der Plätze durch die Buchungen der Mitfahrer genau erreicht ist bzw. - der die neue Buchung mit entsprechender Fehlermeldung abweist, wenn die Anzahl der noch freien Plätze nicht mehr ausreicht für die gewünschte Buchung. 08.02.2012 7 / 9
( / 10) Aufgabe 6 (10 = 4+2+4 Punkte) Transaktionsmanagement, Backup & Recovery Die Teilaufgabe a) bezieht sich auf den SQL-92 Standard: a) Skizzieren Sie einen Verlauf zweier konkurrierender Transaktionen T1 und T2, bei dem es zu einem Non Repeatable Read kommt und geben Sie den von Ihnen vorgesehenen Isolation Level hierfür an: b) Nennen Sie die drei Fehlerkategorien, bzgl. derer man Backup- und Recovery-Maßnahmen klassifiziert: 1. 2. 3, c) Die Backups x-1 und x einer DB seien als Online-Backups erstellt worden: Online- Log-Datei n-4 Log-Datei n-3 Backup x Log-Datei n-2 Log-Datei n-1 Log-Datei n Online- Backup x-1 Beschreiben Sie ein Fehlerszenario, in dem es erforderlich ist, (mindestens) eines der vorhandenen Backups wieder ein zu spielen. Skizzieren Sie in Stichworten, wie das anschließende vollständige Recovery erfolgt. Schreiben Sie dabei an die entsprechenden Log-Dateien, ob UNDO und/oder REDO- Aktivitäten erforderlich sind. Zeit 08.02.2012 8 / 9
Datenmodell Mitfahrerzentrale zu den Aufgaben 3, 4 und 5 PersonenID = PersonenID PersonenID Name Vorname Person VARCHAR2(20) VARCHAR2(20) <pk> PersonenID = PersonenID PersonenID Führerscheinklasse Fahrzeugtyp Fahrer CHAR(3) CHAR(1) <pk,fk> Mitfahrer PersonenID <pk,fk> PersonenID = PersonenID AngebotID PersonenID Startort Zielort Abfahrtsdatum Ankunftsdatum Abfahrtszeit Ankunftszeit AnzahlPlaetze AnzahlGebucht ausgebucht Angebot VARCHAR2(20) VARCHAR2(20) DATE DATE DATE DATE BOOLEAN <pk> <fk> PersonenID = PersonenID AngebotID = AngebotID PersonenID AngebotID AnzahlMitfahrer Buchung <pk,fk1> <pk,fk2> 08.02.2012 9 / 9