Universität Augsburg, Institut für Informatik Prof. Dr. W. Kießling Dr. M. Endres, Dr.-Ing. S. Mandl SS 2011 20. Mai. 2011 Übungsblatt 3 Datenbankprogrammierung (Oracle) Aufgabe 1: Systemtabellen Finden Sie heraus, welche User zur Rolle STUDENT ROLE gehören. Welche Rechte werden durch die Rolle STUDENT ROLE bereitgestellt? Zeigen Sie alle Data Dictionary und Dynamic Performance Views an, z.B. mit select * from DBA_views where view_name like ’V$%’ In der Vorlesung waren das viel mehr! Was ist die Ursache? Wie kommen Sie doch noch zu einem Ergebnis? Aufgabe 2: Modellierung eines öffentlichen Verkehrsbetriebes Überlegen Sie sich eine ER-Modellierung für eine Fahrzeugeinsatzplanung eines öffentlichen Verkehrsbetriebes (z.B. für die VGA in Augsburg). Erstellen Sie das Entity-Relationship Diagramm mit Hilfe des Oracle Data Modeler. Hinweis: Ihr Modell sollte dabei insbesondere Entitäten für Fahrer, Fahrzeuge und Fahrten beinhalten. Aufgabe 3: SQL Puzzle In dieser Aufgabe sollen Sie ein CREATE TALBE Statement schreiben, welches so “vollständig wie möglich” ist. Die Tabelle ist gegeben als CREATE TABLE FiscalYearTable1 ( fiscalyear SMALLINT, startdate DATE, enddate DATE ); Die Tabelle speichert Datums-Bereiche. Damit kann festgestellt werden, zu welchem Geschäftsjahr (fiscalyear) ein beliebiges Datum gehört. Das Geschäftsjahr bei Oracle geht z.B. vom 1. Juni bis zum 31. Mai. Fügen Sie alle denkbaren, sinnvollen, notwendigen, ... Constraints hinzu, so dass sichergestellt wird, dass die Tabelle nur “korrekte Informationen” enthält. Sie können dabei alle SQL92 Funktionen sowie die “Zeit”-Funktion EXTRACT [YEAR | MONTH | DAY] FROM <date expression> verwenden. Aufgabe 4: Reverse Engineering Überführen Sie nachstehende SQL-DDL Anweisungen in ein Entity-Relationship-Modell. Verwenden Sie dazu den Oracle Data Modeler. Generieren Sie anschließend aus Ihrem ER-Modell die SQL-DDL Statements. Stimmen diese mit den unten aufgeführten überein? Wenn nein, warum nicht? CREATE TABLE Studenten (MatrNr INTEGER PRIMARY KEY, Name VARCHAR(30) NOT NULL, Semester INTEGER); CREATE TABLE Professoren (PersNr INTEGER PRIMARY KEY, Name VARCHAR(30) NOT NULL, Rang CHAR(2) CHECK (Rang in (’C2’, ’C3’, ’C4’)), Raum INTEGER UNIQUE); CREATE TABLE Assistenten (PersNr INTEGER PRIMARY KEY, Name VARCHAR(30) NOT NULL, Fachgebiet VARCHAR(30), Boss INTEGER, FOREIGN KEY (Boss) REFERENCES Professoren); CREATE TABLE Vorlesungen (VorlNr INTEGER PRIMARY KEY, Titel VARCHAR(30), SWS INTEGER, gelesenVon INTEGER REFERENCES Professoren); CREATE TABLE hoeren (MatrNr VorlNr PRIMARY KEY INTEGER REFERENCES Studenten ON DELETE CASCADE, INTEGER REFERENCES Vorlesungen ON DELETE CASCADE, (MatrNr, VorlNr)); CREATE TABLE voraussetzen (Vorgaenger INTEGER REFERENCES Vorlesungen ON DELETE CASCADE, Nachfolger INTEGER REFERENCES Vorlesungen ON DELETE CASCADE, PRIMARY KEY (Vorgänger, Nachfolger)); CREATE TABLE pruefen (MatrNr VorlNr PersNr Note PRIMARY KEY INTEGER REFERENCES INTEGER REFERENCES INTEGER REFERENCES NUMERIC(2,1) CHECK (MatrNr, VorlNr)); Studenten ON DELETE CASCADE, Vorlesungen, Professoren, (Note between 0.7 and 5.0),