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

 

Aufgabe

 

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:

 

zu a)

 

   Student            Þ        MatrikelNr

   Fachbereich     Þ        FB_nummer

   Klausur            Þ        Klausurnummer

   Anmeldung       Þ        Matrikelnummer, KlausurNr

 

zu b1)

 

   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;

 

zu b2)

 

   CHECK Constraint

 

   ALTER TABLE Klausur

   ADD CONSTRAINT CK_Klausurdatum CHECK(Anmeldeschluss < Klausurdatum);

 

zu b3)

 

   Primary Key

 

   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);

 

zu b4)

 

   Uique Key

 

   ALTER TABLE Klausur

ADD CONSTRAINT UN_Klausur Unique Key(Fach, Klausurnummer);

 

zu c1)

 

   Select count(*) from Anmeldung A, Klausur K

   Where A.KlausurNr = K.Klausurnummer

AND K.Fach = ‘Statistik’;

 

zu c2)

 

   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;

 

zu c3)

 

   SELECT MAX(FB_Bezeichnung) FROM Anmeldung A, Klausur K, Fachbereich F

   WHERE A.KlausurNr = K.Klausurnummer

AND K.FB_Nummer = F.FB_Nummer;