Klausur Datenbanksysteme Musterlösung

Werbung
Fachhochschule Ravensburg-Weingarten, Fachbereich Elektrotechnik und Informatik
Musterstudent
11111
Klausur Datenbanksysteme Musterlösung
Prüfer:
Datum:
Prof. Dr. Martin Hulin
11. Februar 2000
Dauer:
Hilfsmittel:
Aufgaben
90 Minuten
A
Punkte (ohne Gewähr)
Für die Aufgaben 1 bis 5 ist das relationale Datenbankschema einer Fachhochschule ausschnittsweise
gegeben. Es wird davon ausgegangen, dass jede Vorlesung von nur einem Dozenten gehalten wird.
Das Attribut „Vorgängerveranstaltung“ enthält bei zusammengehörigen Vorlesungen die V_Nr der
ersten Vorlesung, z. B. wird bei der Vorlesung „Mathematik 2“ auf die V_Nr der Vorlesung
„Mathematik 1" verwiesen.
Tabellenname: Dozent
Feldname
Constraint
PersNr
Primärschlüssel
D_Name
Gehalt
Tabellenname: Student
Feldname
Constraint
MatrikelNr
Primärschlüssel
S_Name
Studiengang
Notendurchschnitt
Tabellenname: Vorlesung
Feldname
Constraint
V_Nr
Primärschlüssel
DozentNr
Fremdschlüssel, Verweis auf Dozent (PersNr)
V_Name
Vorgängerveranstaltung Fremdschlüssel, Verweis auf Vorlesung (V_Nr)
Tabellenname: Teilnahme
Feldname
Constraint
V_Nr
Fremdschlüssel, Verweis auf Vorlesung (V_Nr)
MatrikelNr
Fremdschlüssel, Verweis auf Student (MatrikelNr)
Note
Musterstudent 11111
1. Aufgabe
-2-
(5 P)
Erstellen Sie eine SQL-Abfrage, die die Namen aller Vorlesungen ausgibt zusammen mit dem Namen
des Dozenten, der die Vorlesung hält.
SELECT V_Name, D_Name
FROM Vorlesung, Dozent
WHERE DozentNr = PersNr;
2. Aufgabe
(9 P)
Geben Sie eine SQL-Anweisung an, mit der die Namen aller Studenten angezeigt werden, die eine
Vorlesung bei dem Dozenten mit dem Namen „Manfred Meiselstein“ hören.
SELECT S_Name
FROM Student, Teilnahme, Vorlesung, Dozent
WHERE Student.MatrikelNr = Teilnahme.MatrikelNr AND
Teilnahme.V_Nr = Vorlesung.V_Nr AND
DozentNr = PersNr AND
D_Name = ‚Manfred Meiselstein‘;
3. Aufgabe
(6 P)
Geben Sie eine SQL-Anweisung an, mit der für alle Vorlesungen, die eine zugehörige
Vorgängerveranstaltung haben, in der ersten Spalte der Name der Vorlesung und der zweiten Spalte
der Name der Vorgängervorlesung ausgegeben wird.
SELECT V2.V_Name, V1.V_Name
FROM Vorlesung V1, Vorlesung V2
WHERE V2.Vorgängerveranstaltung = V1.V_Nr;
4. Aufgabe
(18 P)
In dem Datenbankschema gibt es das redundante Feld „Notendurchschnitt“ in der Tabelle „Student“.
Vervollständigen Sie den Trigger in Aufgabenteil b), der den Notendurchschnitt eines Studenten neu
berechnet und zwar beim Einfügen eines neuen Datensatzes in die Tabelle „Teilnahme“, beim
Löschen eines Datensatzes aus der Tabelle „Teilnahme“ und beim Ändern des Feldes „Note“ der
Tabelle „Teilnahme“. Ihre Lösung von Aufgabenteil a) können Sie in Teil b) leicht modifiziert
benutzen.
a) Geben Sie eine SQL-Anweisung an, die für den Studenten mit der MatrikelNr „12345“ seine
Notensumme und die Anzahl seiner Noten aus der Tabelle „Teilnahme“ berechnet.
SELECT SUM(Note), COUNT(Note)
FROM Teilnahme
WHERE MatrikelNr = 12345;
b) Vervollständigen Sie nun den Trigger!
CREATE OR REPLACE TRIGGER korrigiere_Notenschnitt
AFTER /* Triggerzeitpunkt */
INSERT OR DELETE OR UPDATE OF Note /* Trigger-Ereignis */
ON Teilnahme /* Tabellenname */
FOR EACH ROW
DECLARE
Schnitt INTEGER;
BEGIN
Musterstudent 11111
-3-
SELECT AVG (Note) INTO Schnitt
FROM Teilnahme
WHERE Teilnahme.MatrikelNr = :new.MatrikelNr OR
Teilnahme.MatrikelNr = :old.MatrikelNr;
UPDATE Student
SET Notendurchschnitt = Schnitt
WHERE Teilnahme.MatrikelNr = :new.MatrikelNr OR
Teilnahme.MatrikelNr = :old.MatrikelNr;
END;
5. Aufgabe
(20 P)
a) Erstellen Sie eine SQL-Abfrage, die für jeden Dozenten die PersonalNr und die Anzahl aller
Teilnehmer seiner Vorlesungen ausgibt. Sitzt ein Student in mehreren Vorlesungen des Dozenten,
so wird er mehrfach gezählt.
SELECT PersNr, Count (MatrikelNr)
FROM Teilnahme, Vorlesung
WHERE Teilnahme.V_Nr = Vorlesung.V_Nr
GROUP BY PersNr;
b) Das Ministerium plant eine leistungsgerechte Besoldung der Professoren. Da die Qualität der
Vorlesungen aber nur aufwendig zu ermitteln ist, wird zunächst eine Belastungszulage auf das
(niedrigere) Grundgehalt gewährt. Wer mehr als 150 Studenten unterrichtet, bekommt 50 DM
Zulage, wer mehr als 250 Studenten unterrichtet, bekommt 100 DM Zulage. Ergänzen Sie
folgende C-Funktion mit Embedded-SQL, die die Summe der Belastungszulagen aller
Professoren berechnet. Benutzen Sie dabei Aufgabenteil a) für eine Cursor-Deklaration. Sie
brauchen die Abfrage nicht nochmals hinzuschreiben, sondern können mit [a] darauf verweisen.
Die Anmeldung bei der Datenbank ist bereits erfolgt und die Struktur sqlca deklariert.
int Summe_Belastungszulage (void)
{
EXEC SQL BEGIN DECLARE SECTION;
int pnr, studzahl;
EXEC SQL END DECLARE SECTION;
unsigned int summe_zulage = 0; /* Variable für Rueckgabewert */
EXEC SQL DECLARE Studentenzahl CURSOR FOR [a];
/* Cursordeklaration */
EXEC SQL OPEN Studentenzahl;
EXEC SQL FETCH Studentenzahl INTO pnr, studzahl;
while (sqlca.sqlcode == 0)
{
if (studzahl > 250) summe_zulage + = 100;
else if (studzahl > 150) summe_zulage + = 50;
EXEC SQL FETCH Studentenzahl INTO pnr, studzahl;
}
EXEC SQL CLOSE Studentenzahl;
return (summe_zulage);
}
Musterstudent 11111
-4-
6. Aufgabe
(30 P)
Gegeben ist folgender Ausschnitt eines Entity-Relationship-Diagramm eines Maklerbüros, in dem
mehrere Makler angestellt sind.
M_Nr
M_Name
Makler
K_Nr
K_Name
K_Adr
Zeitpunkt
Kunde
(0, n)
(0, n)
Besichtigungs
termin
(0, n)
Wohnung_Haus
W_Nr
Preis
W_Adr
Ausstattung
a) Besichtigungstermin ist eine 3-stellige Relation, d. h. die Elemente der Relation sind Tripel
bestehend aus einem Makler, einem Kunden und einem Haus (oder Wohnung), das besichtigt
wird. Der Zeitpunkt eines Besichtigungstermins fehlt noch. Tragen Sie ihn an der richtigen Stelle
im Entity-Relationship-Diagramm ein!
b) Übersetzen Sie das Entity-Relationship-Diagramm in ein relationales Datenbankschema. Tragen
Sie dazu auf dem nächsten Blatt ein, welche Tabellen entstehen und welche Felder die Tabellen
haben. Bei jedem Feld können Sie ankreuzen, ob es sich um einen Primär- oder Fremdschlüssel
handelt. Bei einem Fremdschlüssel müssen Sie noch eintragen, auf welche andere Tabelle und
welches Feld in der anderen Tabelle er verweist.
Achten Sie auch auf die korrekte Implementierung des mehrwertigen Attributs „Ausstattung“.
Darin ist für jede Wohnung/Haus eine Liste von Ausstattungsdetails gespeichert, z. B.
„Parkettboden“, „Balkon“, „Markise“. Insbesondere soll eine einfache Suche nach
Ausstattungsdetails möglich sein, z. B.: „Suche alle Häuser mit Balkon und Fußbodenheizung“.
Musterstudent 11111
-5-
Tabellenname: Makler
Feldname
Constraint
M_Nr
Primärschlüssel
M_Name
Tabellenname: Kunde
Feldname
Constraint
K_Nr
Primärschlüssel
K_Name
K_Adr
Tabellenname: Wohnung_Haus
Feldname
Constraint
W_Nr
Primärschlüssel
Preis
W_Adr
Tabellenname: Ausstattung
Feldname
Constraint
W_Nr
Fremdschlüssel, Verweis auf Wohnung_Haus (W_Nr)
Ausstattungsdetail
Tabellenname: Besichtigungstermin
Feldname
Constraint
M_Nr
Fremdschlüssel, Verweis auf Makler (M_Nr)
K_Nr
Fremdschlüssel, Verweis auf Kunde (K_Nr)
W_Nr
Fremdschlüssel, Verweis auf Wohnung_Haus (W_Nr)
Zeitpunkt
Herunterladen