Relationale Datenbanken
Bei einer Relationalen Datenbank handelt es sich um eine Datenstruktur, die in Tabellenform (Relationen) aufgebaut wird.
Diese Tabellen werden untereinander mit sogenannten referenzierenden Schlüsseln verbunden und können somit über eine mengenorientierten Sprache abgerufen werden. SQL
Für eine Klausuranmeldung wurden folgende Tabellen implementiert:
Student
MatrikelNr |
Name |
Fachbereich |
|
|
|
Fachbereich
FachbereichNr |
FachbereichBezeichnung |
|
|
Klausur
Fach |
Klausurdatum |
KlausurNr |
FachbereichNr |
Anmeldeschluss |
|
|
|
|
|
Anmeldung
MatrikelNr |
KlausurNr |
Anmeldedatum |
|
|
|
a. Geben Sie zu jeder Tabelle einen geeigneten Primary Key an
b. Ordnen Sie die folgenden Integritätsbedingungen den Klassen Primary Key/ Unique Key, referentielle Integritätsbedingungen,
check constraints oder buisness rule und skizzieren Sie, wie Sie das in SQL- Syntax realisieren könnten!
b1. Eine Klausuranmeldung darf nur vor Anmeldeschluss erfolgen!
b2. Der Anmeldeschluss für eine Klausur muss vor dem Klasusurdatum liegen!
b3. Für eine Klausur darf maximal eine Anmeldung für einen Studenten vorliegen!
b4. Für ein Fach darf zu einem Zeitpunkt nur eine Klausur angeboten werden!
c. Beantworten Sie folgende Aufgaben in SQL Syntax:
c1. Wieviel Anmeldeungen liegen für das Fach „Statistik“ vor?
c2. Für welche Klasusuren hat sich die Studentin „Mayer“ angemeldet, sortiert nach Klausurdatum absteigend und innerhalb des
Gleichen Datums nach Fach aufsteigend?
c3. Welchem Fachbereich sind die meisten Anmeldungen zuzuordnen?
Lösung:
Student Þ MatrikelNr
Fachbereich Þ FB_nummer
Klausur Þ Klausurnummer
Anmeldung Þ Matrikelnummer, KlausurNr
Buisness Rule Þ Trigger
Create trigger T_Anmeldng
Before Insert or Update on Anmeldung
For each row
Declare
V_Anmeldeschluss
Date;
Begin
Select Anmeldeschluss INTO
V_Anmeldeschluss from Klausur
where :NEW.KlausurNR =
Klausur.Klausurnummer;
If :NEW.Anmeldedatum > V_Anmeldeschluss
THEN raise_application_error(-20009,’Die Anmeldefrist ist bereits abgelaufen!’);
END If;
END
T_Anmeldung;
ALTER
TABLE Klausur
ADD
CONSTRAINT CK_Klausurdatum CHECK(Anmeldeschluss < Klausurdatum);
CREATE
TABLE Anmeldung( Matrikelnummer
NOT NULL Number,
KlausurNR
NOT NULL Number,
Anmeldedatum
NOT NULL Date,
Constraint
PK_Anmeldung primary key(Matrikelnummer,KlausurNR));
Würde eine Tabelle bereits bestehen, ohne das ein Primary Key gesetzt ist (wäre wohl der größte
Quatsch) so würde man folgenden SQL Befehl benötigen:
ALTER TABLE Anmeldung
ADD CONSTRAINT PK_Anmeldung Primary
Key(Matrikelnummer, KlausurNR);
Uique Key
ALTER TABLE Klausur
ADD CONSTRAINT UN_Klausur Unique Key(Fach, Klausurnummer);
Select count(*) from Anmeldung A, Klausur K
Where A.KlausurNr = K.Klausurnummer
AND K.Fach = ‘Statistik’;
Select Fach from Klausur K, Anmeldung A, Student S
Where S.Matrikelnr = A.Matrikelnummer
AND A.KlausurNR = K.Klausurnummer
AND S.Name = ‘Mayer’
Order by K.Klausurdatum DESC, K.Fach ASC;
SELECT MAX(FB_Bezeichnung) FROM Anmeldung A, Klausur K, Fachbereich F
WHERE A.KlausurNr = K.Klausurnummer
AND K.FB_Nummer = F.FB_Nummer;