Warning: include_once(/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php): failed to open stream: No such file or directory in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: include_once(): Failed opening '/var/www/html/pmwiki-2.2.86/cookbook/soap4pmwiki/soap4pmwiki.php' for inclusion (include_path='.:/opt/php/lib/php') in /var/www/html/fields/dbp09/local/config.php on line 4

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/fields/dbp09/local/config.php:4) in /var/www/html/pmwiki-2.2.86/pmwiki.php on line 1250
Datenbankpraktikum SS 2009 - Gruppe 3 - Aufgaben ER

Datenbankmodellierung

von D. Abraham, A. Brankova, S. Heider, D. Künne, K. Roehr, A. Siemer, K. Sperber

ursprüngliches ER-Diagramm

Für die Planung der Datenbank haben wir im ersten Schritt ein grobes ER-Diagramm erstellt, dass alle benötigten Entitäten darstellt. Während der Programmierung des Web-Interfaces ist uns aber aufgefallen, dass an einigen Stellen noch Änderungen / Erweiterungen vorgenommen werden sollten. Diese haben dann zum engültigen ER-Diagramm (siehe: Abbildung 2) geführt.

Abb. 1: ursprüngliches ER-Diagramm für die Testat- und Klausurverwaltung

ursprüngliches Schema der Datenbank

Veranstaltungen:{[VerID : integer, Titel : string, Semestertyp : enum, Semesterjahr : integer maxStudenten : integer]}
Vorlesungen:{[VerID : integer, proZettel : boolean, Prozentsatz : double, AnzFreiversuche : integer, Gruppengroesse : integer, Uebungsblaetter : integer]}
Seminare:{[VerID : integer]}
Personen:{[Login : string, Vorname : string, Name : string, Titel : string, E-Mail : string,Passwort: string]}
Angestellte:{[Login : string, Rolle : enum]}
Studenten:{[Login : string, Einschreibedatum : date, Studiengang : string, MatrNr(UNIQUE) : integer]}
Gruppen:{[GrID : integer, VerID : integer, TutorLog : string, Kuerzel : string]}
Pruefungen:VIEW Klausuren + Uebungen + berechnete Pruefungsart
Klausuren:{[VerID : integer, KlausurNr : integer, Datum : date, Aufgaben : integer]}
Uebungsblaetter:{[VerID : integer, BlattNr : integer, Woche : integer, Aufgaben : integer]}
Aufgaben:{[VerID : integer, PrID : integer, Art : enum, AufgNr : integer, maxPunkte : integer]}
Klausuraufgaben:VIEW mit einem Filter auf Aufgaben
Uebungsaufgaben:VIEW mit einem Filter auf Aufgaben
halten:{[VerID : integer, Login : string]}
betreuen:{[Login : string, VerID : integer]}
besuchen:{[Login : string, VerID : integer]}
pruefen:{[VerID : integer, StudLogin : string, AngLogin : string, Note : float]}
sindIn:{[GrID : integer, VerID : integer, Login : string, von : integer, bis : integer]}
bearbeitenUeb:{[VerID : integer, GrID : integer, PrID : integer, Art : enum, AufgNr : integer, Punkte : integer]}
bearbeitenKL:{[VerID : integer, Login : string, PrID : integer, Art : enum, AufgNr : integer, Punkte : integer]}

Umsetzung auf dem MySQL-Server / Änderungen

von F.Hebestreit, P. Middendorf, D.Künne

Umsetzung auf dem Server

Beim Erstellen der Datenbank mussten nebem dem Anlegen der Tabellen auch sämtliche Fremdschlüssel mit angelegt werden, damit die Abhängigkeiten zwischen den einzelnen Entitäten gegeben sind. So darf zum Beispiel keine Prüfung mehr existieren, wenn es die zugehörige Vorlesung nicht mehr gibt.
Außerdem wurden einige Funktionen angelegt, die das Arbeiten wesentlich vereinfachen sollen.

CREATE FUNCTION naechsteGruppenNr(VID int) RETURNS int(11)
    READS SQL DATA
BEGIN 
  SET @max = ( SELECT MAX( GrpID ) FROM Gruppen WHERE VerID = VID );
  IF (@max is null) THEN
    RETURN 0;
  END IF;
  RETURN @max +1;
END
Funktion zum Ermitteln der nächsten freien Gruppennummer

überarbeitetes ER-Diagramm

Beim Erstellen der Datenbank und der ersten Models wurde festgestellt, dass die Entities Übungsaufgaben und Klausuraufgaben nie direkt angesprochen werden. Dementsprechend wurden die beiden Views aus dem Konzept herausgenommen. Ähnliches gilt für die Prüfungen. Hier wurde die Entität Pruefungen deswegenn als Tabelle und nicht als View umgesetzt.
Des Weiteren wurden die Entitäten Notenschluessel und ECTS-Grades eingeführt um datenbankseitig bereits die Zuordnung einer Note zu der erreichten Punktzahl vornehmen zu können. Diese Änderung geschah hauptsächlich aus Gründen der Performance, da eine Berechnung in der Datenbank deutlich schneller ist, als mit PHP.
Um die Statistiken korrekt umsetzen zu können und dabei zu berücksichtigen, dass ein Student in mehreren Studiengängen eingeschrieben sein kann, wurde noch die Entität Studiengaenge eingeführt. Außerdem muss noch eine Historie für alte Matrikelnummern geführt werden, da es Fälle gibt, in denen ein Student im Laufe seines Studiums mehrere Matrikelnummern hat.

Abb. 2: überarbeitetes ER-Diagramm augrund von Anforderungsänderungen

neue Entitäten im Schema

Durch diese Änderungen musste auch das Schema erweitert werden und es kamen folgende neue Entitäten und Relationships hinzu.

History:{[Login : string, alteMatrNr : integer, von : date, bis : date]}
ECTS-Grade:{[Grade : varchar, Note : float]}
Notenschluessel:{[VerID : integer, PrID : integer, Typ: enum, Note: float, MaxPunkte : integer]}
Studiengaenge:{[StdgID : integer, Studiengang : string]}
eingeschrieben:{[Login : string, StdgID : integer]}


Page last modified on September 04, 2009, at 02:40 PM