Universität Augsburg, Institut für Informatik Prof. Dr. W. Kießling Dr. A. Huhn, F. Wenzel, M. Endres Wintersemester 2010/2011 21. Jan. 2011 Lösungsblatt 10 Datenbanksysteme I Aufgabe 1: B*-Bäume a) Nach dem Einfügen von 15, 13 und 30 b) Nach dem Einfügen von 23 c) Nach dem Löschen von 42 1 Aufgabe 2: Kostenbasierte Optimierung Lösungsvorschlag: a) Da VNummer ein Primärschlüssel ist und damit automatisch ein Primärindex erstellt wird, ergibt sich IV N ummer = TV orlesung ⇒ GV N ummer = 1 ⇒ HV N ummer = 1 b) C1 = Bestand: = 800 • Passender Nicht-Cluster-Index: HBestand = TILiteratur 20 = 40 Bestand • Literatur als kompakter Heap: HLiteratur = BLiteratur = 50 C2 = Bedarf: • Literatur als kompakter Heap: HLiteratur = BLiteratur = 50 • Nichtpassender Nicht-Cluster-Index: HBedarf = TLiteratur = 2 800 2 = 400 c) Ausführungszeit: • Best-Case: 40 * 8ms = 320ms • Worst-Case: 400 * 8ms = 3200ms Aufgabe 3: SQL: DDL und DML Lösungsvorschlag: CREATE TABLE Bundeslaender (Name VARCHAR(20) PRIMARY KEY, Einwohner INTEGER NOT NULL CHECK (Einwohner > 0)); CREATE TABLE Wahlkreise (Nr INTEGER PRIMARY KEY, Bezeichnung VARCHAR(20), Bundesland VARCHAR(20) REFERENCES Bundeslaender); CREATE TABLE Wahlbezirke (Nr INTEGER PRIMARY KEY, Wahlberechtigte INTEGER NOT NULL CHECK (Wahlberechtigte > 0), Wahllokal VARCHAR(20), Wahlkreis INTEGER REFERENCES Wahlkreise ON DELETE CASCADE); CREATE TABLE Parteien (Name VARCHAR(20) PRIMARY KEY, Mitglieder INTEGER NOT NULL CHECK (Mitglieder > 0)); CREATE TABLE Direktkandidaten (SozialVNr VARCHAR(20) PRIMARY KEY, Name VARCHAR(20), Partei VARCHAR(10) REFERENCES Parteien ON DELETE SET NULL, Wahlkreis INTEGER REFERENCES Wahlkreise ON DELETE CASCADE); CREATE TABLE Erststimmen (Wahlbezirk INTEGER NOT NULL REFERENCES Wahlbezirke ON DELETE CASCADE, Jahr INTEGER NOT NULL, Kandidat VARCHAR(20) NOT NULL REFERENCES Direktkandidaten ON DELETE CASCADE, Stimmen INTEGER NOT NULL CHECK (Stimmen >=0), PRIMARY KEY (Wahlbezirk, Jahr, Kandidat)); CREATE TABLE Zweitstimmen (Wahlbezirk INTEGER NOT NULL REFERENCES Wahlbezirke ON DELETE CASCADE, Jahr INTEGER NOT NULL, Partei VARCHAR(10) NOT NULL REFERENCES parteien ON DELETE CASCADE, Stimmen INTEGER NOT NULL CHECK (Stimmen >=0), PRIMARY KEY(Wahlbezirk, Jahr, Partei)); 2