Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme Eine Auswahl aus Klausuraufgaben früherer Klausuren 19.5.2001 Aufgabe 1 Datenbank für Fahrzeugtypen In einer Datenbank für Fahrzeugtypen sind folgende Informationen zu speichern : • • • • Jeden PKW gibt es in verschiedenen Lackierungen und Stoffbezügen Jede Lackierung und jeder Stoffbezug ist in der Regel für mehrere PKW - Typen verfügbar. Für einen PKW - Typ sind nur bestimmte Lack - Stoff - Kombinationen erlaubt. Legen Sie die Attribute der PKW - Typen, Lackierungen und Bezüge selbst fest. a) Erstellen Sie ein ER - Diagramm ( in Krähenfußnotation) einschließlich der Attribute, Primärschlüssel und Fremdschlüssel. Geben Sie auch die Kardinalität und Optionalität der Beziehungen an ! b) Erzeugen Sie aus Ihren E - R - Modell ein relationales Datenbankschema ! Datenbankschema in der Form Relation(Attribut1, Attribut2, ...) , Schlüsselattribute unterstreichen ! c) Führen Sie Ihr relationales Datenbankschema in SQL - Befehle zum Einspielen der Tabellen über ! Primärschlüssel und Fremdschlüssel bitte durch CONSTRAINT’s darstellen ! Aufgabe 2 ( relationale Algebra) Gegen sei die relationale Datenbank einer Bankfiliale, die Primärschlüssel sind unterstrichen: Bankfiliale(FilialNr, Name, Ort, Bankleitzahl) Konto(KontoNr, FilialNr, Kontostand) Kunde(Kundennr, Name, Adresse) Gehoert_zu(KontoNr, KundenNr) Ueberweisung(von_Blz, von_KontoNr, nach_BLZ, nach_KontoNr, Betrag) Formulieren Sie die folgenden Fragen, falls möglich, in der relationalen Algebra ! Wenn eine Abfrage nicht in der relationalen Algebra enthalten ist, geben Sie bitte eine Begründung an ! a) Geben Sie eine Liste aller Filialen mit ihren Bankleitzahlen aus ! Sortieren Sie die Liste nach Bankleitzahlen und in zweiter Linie nach Namen ! b) Ermitteln Sie die Kontonummern und Namen aller Kunden, die ihr Konto überzogen haben ! c) Hat Fritz Müller ein Konto bei einer Bank in Gummersbach ? Falls ja, soll die Bankfiliale und die KontoNr ausgegeben werden ! d) Geben Sie die Nummern, Namen und Gesamteinlagen (Summe über alle Kontostände) aller Filialen in Gummersbach aus ! e) Ermitteln Sie die Nummer und Summe aller Abbuchungen aller Konten, von denen mehr als 10000 DM abgebucht wurden. 1 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme Aufgabe 3 ( Speicherstrukturen) a) Erzeugen Sie einen B-Baum vom Typ 2, indem Sie nacheinander die Zahlen { 20, 19, 18, 17, ... 3,2,1 } in absteigender Reihenfolge einfügen ! b) Löschen Sie aus dem entstandenen Baum die Zahlen 12 und 20 ! Aufgabe 4 (Normalformen) Gegeben sei eine wieder die relationale Datenbank aus Aufgabe 2 mit folgenden Relationen, die Primärschlüssel sind unterstrichen: Bankfiliale(FilialNr, Name, Ort, Bankleitzahl) Konto(KontoNr, FilialNr, Kontostand) Kunde(Kundennr, Name, Adresse) Gehoert_zu(KontoNr, KundenNr) Ueberweisung(von_Blz, von_KontoNr, nach_BLZ, nach_KontoNr, Betrag) a) b) c) d) In welcher Normalform befindet sich die Datenbank ? Welche Nachteile kann eine Überführung in die dritte Normalform haben ? Verändern Sie das Datenbankschema so, dass es nicht mehr (3NF), aber noch (2NF) ist . Verändern Sie das Datenbankschema so, dass es nicht mehr (2NF), aber noch (1NF) ist . Aufgabe 5 (SQL) Betrachten Sie die Tabellen Abteilungen und Mitarbeiter aus der Fahrrad- Datenbank, die durch die folgenden SQL – Anweisungen erzeugt werden: CREATE TABLE Abteilungen (Abt_Nr NUMBER(38) NOT NULL, Leiter NUMBER(38) NOT NULL, Name VARCHAR2(50) NOT NULL, Ort VARCHAR2(50)); CREATE TABLE Angestellte (Ang_Nr NUMBER(38) NOT NULL, Abt_Nr NUMBER(38) NOT NULL, Aufgabenbeschreibung VARCHAR2(50) NOT NULL, Beruf VARCHAR2(50) NOT NULL, Nachname VARCHAR2(50) NOT NULL, Vorname VARCHAR2(50) NOT NULL, Geschlecht CHAR(1) NOT NULL, Eintrittsdatum DATE, Gehalt NUMBER(9,2) Default 0, Abzuege NUMBER(9,2) Default 0, Ort VARCHAR2(50), Strasse VARCHAR2(50), Zeitstempel DATE); 2 Prof. Dr. Heide Faeskorn - Woyke 3 Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme Bitte kreuzen Sie ein oder mehrere Antworten an! 1) Welche Abfrage erzeugt einen Fehler, wenn es keinen Angestellten mit Nachnamen ‘FaeskornWoyke‘ gibt ? SELECT * FROM Angestellte; SELECT Ang_Nr, Vorname, Nachname FROM Angestellte; SELECT Nachname; 2) Welches Ergebnis hat die folgende Abfrage SELECT * FROM Angestellte WHERE Nachname != 'Weber'; Alle Zeilen und Spalten der Angestellten - Tabelle Die Anzahl der Angestellten, deren Nachname gleich Weber ist. Die Anzahl der Angestellten, deren Nachname nicht gleich Weber ist. Nachnamen der Angestellten, deren Nachname nicht gleich Weber ist. Alle Zeilen und Spalten der Angestellten Tabelle, außer derjenigen Angestellten, die den Nachname ‘Weber‘ haben. 3) Welches Ergebnis hat die folgende Abfrage SELECT * FROM Angestellte WHERE Nachname LIKE ‘_e%‘; Die Nachnamen aller Angestellten, die als zweiten Buchstaben ein „e“ haben. Die Nachnamen aller Angestellten, die als zweiten Buchstaben von hinten ein „e“ haben. Die Nachnamen aller Angestellten, die höchsten ein „e“ haben. Die Nachnamen aller Angestellten, die als zweiten Buchstaben kein „e“ haben. Die Nachnamen aller Angestellten, die als zweiten Buchstaben von hinten kein „e“ haben. 4) Wenn Sie zwei Tabellen mit einem Natural-Join- Operator verknüpfen wollen, müssen Sie eine WHERE- Klausel benutzen die WHERE – Klausel weglassen eine Subquery benutzen beide Tabellen in der FROM – Klausel aufführen die FROM – Klausel weglassen die Tabellen über Gleichsetzung von Spalten in der WHERE – Klausel miteinander verbinden. 5) Welcher Typ des Join- Operators wird mit der folgenden Abfrage in SQL abgebildet ? SELECT Nachname, Ang_Nr, Abt_Nr, Name FROM Angestellte, Abteilungen; Ein Natural - Join ein Outer- Join ein kartesisches Produkt Diese Abfrage bildet keinen Join- Operator ab. 6) Welcher Typ des Join- Operators wird mit der folgenden Abfrage in SQL abgebildet ? SELECT Nachname, Ang_Nr, Name FROM Angestellte, Abteilungen WHERE Angestellte.Abt_Nr = Abteilungen.Abt_Nr AND Name LIKE ‘G%‘; Ein Natural – Join ein Outer- Join ein kartesisches Produkt Diese Abfrage bildet keinen Join- Operator ab. Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme 7) Welcher Typ des Join- Operators wird mit der folgenden Abfrage in SQL abgebildet ? SELECT Nachname, Ang_Nr, Name FROM Angestellte, Abteilungen WHERE Angestellte.Abt_Nr = Abteilungen.Abt_Nr (+) AND Name LIKE ‘G%‘; Ein Natural – Join ein Outer- Join ein kartesisches Produkt Diese Abfrage bildet keinen Join- Operator ab. 8) Welche der folgenden SQL- Zeilen produziert einen Fehler ? SELECT Nachname , Vorname, Name as Abteilungsname FROM Abteilungen, Angestellte WHERE Ort = ‘Köln‘ AND Abt_Nr = Abt_Nr Diese Abfrage produziert keinen Fehler. 9) In welcher Komponente kann eine Unterabfrage stehen ? SELECT - Komponente FROM – Komponente WHERE – Komponente ORDER BY- Komponente GROUP BY- Komponente HAVING - Komponente 10) Welche der folgenden SQL- Zeilen produziert einen Fehler ? SELECT Nachname , Vorname, Gehalt FROM Angestellte WHERE Ang_Nr = (SELECT Ang_Nr, Nachname FROM Angestellte WHERE Ort = ‘Köln‘); Diese Abfrage produziert keinen Fehler. 11) Welche der folgenden SQL- Zeilen produziert einen Fehler ? SELECT Nachname , Vorname, SUM(Gehalt) FROM Abteilungen a, Angestellte b WHERE a.Abt_Nr = b.Abt_Nr GROUP BY Nachname HAVING Sum(Gehalt) > 10000 ORDER BY Nachname Diese Abfrage produziert keinen Fehler. 12) Welche der folgenden INSERT – Anweisungen erzeugt eine Zeile in der Abteilungs-Tabelle? INSERT INTO Abteilungen (Abt_Nr 10, Name ‘EDV‘); INSERT INTO Abteilungen (Abt_Nr, Name, Leiter) VALUES (10, ‘EDV‘, ‘Schmidt‘); INSERT INTO VALUES (10, ‘EDV‘, ‘Schmidt‘, ‘Wiehl‘); 13) Wenn in einer UPDATE- Anweisung die WHERE – Bedingung fehlt, werden alle Zeilen verändert wahr falsch 4 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme 14) Welche Anweisung löscht den Angestellten mit der Ang_Nr 17? DELETE Angestellte DELETE FROM Angestellte WHERE Ang_Nr = 17 DELETE Angestellte WHERE Ang_Nr = 17 DROP FROM Angestellte WHERE Ang_Nr = 17 15) Welche der folgenden Zeilen produziert einen Fehler ? CREATE TABLE Abteilungen (Abt_Nr NUMBER(38) NOT NULL, Leiter NUMBER(38) NOT NULL, Name VARCHAR2(50) NOT NULL, VARCHAR2(50)); 16) Welche Anweisung legt eine Kopie der Angestellten – Tabelle an ? CREATE TABLE temp SELECT * FROM Angestellte; CREATE temp SELECT * FROM Angestellte; CREATE TABLE temp AS SELECT * FROM Angestellte; CREATE TABLE temp IS SELECT * FROM Angestellte; 17) Wie kann man der Abteilungstabelle ein Spalte ‘gegruendet_am‘ hinzufügen ? ALTER TABLE Abteilungen ADD COLUMN gegruendet_am Date; ALTER TABLE Abteilungen ADD gegruendet_am Date; ALTER Abteilungen ADD gegruendet_am Date; ADD COLUMN gegruendet_am Date to Abteilungen Eine Tabelle kann überhaupt nicht nachträglich verändert werden. 18) Welche Aussagen sind für einen PL/SQL – Block richtig ? Die DECLARE – Anweisung ist ein optionaler Bestandteil eines PL/SQL – Blockes, der am Anfang eines Blockes steht. Zwischen BEGIN und END stehen die eigentlichen Anweisungen. Dieser Bestandteil ist nicht optional. Mit EXCEPTION wird der letzte Teil eines PL/SQL – Blockes eingeleitet, der den Fehlerbehandlungscode enthält. Dieser Bereich ist optional. Nach BEGIN muß immer ein END folgen, und zwar vor EXECEPTION, wenn eine Fehlerbehandlung programmiert ist. 19) Welcher Cursor- Bestandteil kann in der DECLARE – Sektion eines PL/SQL- Blockes stehen ? %FOUND %NOTFOUND %ROWTYPE %TYPE %ISOPEN 20) Welcher Typ eines PL/SQL -Blockes liefert einen Wert zurück ? ein Prozedur ein Datenbanktrigger ein Package eine Funktion keine von allen 5 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme 21) Welche Metadatentabelle enthält den Source-Code einer Prozedur ? USER_SOURCE USER_CODE USER_PROCEDURES USER_OBJECTS 22) Welche Anweisung erzeugt den Output ‘Hello Wold‘ am Bildschirm ? DBMS_OUTPUT.PUTLINE('Hello world.'); DBMS_PRINT.PUTLINE('Hello world.'); PRINT('Hello world.'); DBMS_PRINT.OUTPUT('Hello world.'); Das geht überhaupt nicht. Aufgabe 6 SQL Betrachten Sie die Beispieldatenbank des Fahrradherstellers Byce und Co. aus der Vorlesung. Welche Ergebnisse liefern die folgenden fünf SELECT - Anweisungen ? Erläutern Sie die Unterschiede ! I. SELECT ang_nr , gehalt FROM angestellte a WHERE gehalt > (SELECT avg(gehalt) FROM angestellte b WHERE a.abt_abTNR = b.abt_abTNR); II. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > (SELECT avg(gehalt) FROM angestellte b); III. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > all (SELECT avg(gehalt) FROM angestellte Group by abt_abTNR); IV. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > any (SELECT avg(gehalt) FROM angestellte Group by abt_abTNR); V. SELECT ang_nr , gehalt FROM angestellte WHERE gehalt > (SELECT avg(avg(gehalt)) FROM angestellte Group by abt_abTNR); 6 Prof. Dr. Heide Faeskorn - Woyke Fachbereich Informatik , Fachhochschule Köln, Abteilung Gummersbach Lehr- und Forschungsgebiet : Wirtschaftsinformatik, mit den Schwerpunkten Datenbank - und Informationssysteme Aufgabe 7 SQL Betrachten Sie die Beispieldatenbank des Fahrradherstellers Byce und Co. aus der Vorlesung. Beantworten Sie in SQL: a) Welche Teile haben eine Bezeichnung, die mit dem Buchstaben G anfängt? b) Geben Sie eine Liste über alle Artikel aus, mit den Attributen TNr, Bezeichnung und Verkaufspreis, wobei die Preise um 10 % erhöht werden ! Sortieren Sie die Liste absteigend nach den Preisen und bei gleichem Preis noch mal alphabetisch aufsteigend nach der Bezeichnung ! c) Von welchen Teilen sind mehr als 10 Einheiten im Bestand aller Lager? (Tabelle : Lagerbestand). Geben Sie diese Teile mit den Attributen TNR, BEZEICHNUNG und der Summe des Bestandes über alle Lager aus ! d) Welches Teil benötigt in der Stückliste (Struktur-Tabelle) die Silberfarbe mit der TNr = 3 ? Listen Sie diejenigen Teile auf, die dieses Teil ( TNr = 3) direkt oder indirekt in der zweiten Stufe verwenden ! Geben Sie die Attribute TNR und Bezeichnung aus der Teile Tabelle aus und benutzen Sie einen SELECT mit UNION - Statement ! e) Auf welchen Lagern liegt ein Bestand des Rades mit der TNr = 1 ? f) Welche Teile haben, summiert über alle Lager, einen Bestand von mehr als 100 Einheiten ? g) Gibt es Teile, deren Bestand, summiert über alle Lager, den aus der Tabelle Teile unterschreitet ? h) In welchem Lager werden die meisten Artikel ( Typ = 'Artikel') gelagert ? i) Geben Sie den durchschnittlichen Bestand je Lager aus ! j) Geben Sie die Lagernummer und den durchschnittlichen Bestand derjenigen Lager aus, deren Durchschnittsbestand höher als 1500 Einheiten ist ! k) Geben Sie eine Liste aus über alle Teile mit TNr, Bezeichnung und den Lagern, auf denen die Teile gelagert sind ! 7