CREATE TABLE Studenten (
         MatrNr         INTEGER PRIMARY KEY,
         Name           VARCHAR(20) NOT NULL,
         Semester       INTEGER,
         GebDatum       DATETIME)

 CREATE TABLE Professoren (
         PersNr         INTEGER PRIMARY KEY,
         Name           VARCHAR(20) NOT NULL,
         Rang           CHAR(2) CHECK (Rang in ('C2', 'C3', 'C4')),
         Raum           INTEGER UNIQUE,
         Gebdatum       DATETIME)

 CREATE TABLE Assistenten (
         PersNr         INTEGER PRIMARY KEY,
         Name           VARCHAR(20) NOT NULL,
         Fachgebiet     VARCHAR(20),
         Boss           INTEGER REFERENCES Professoren,
         GebDatum       DATETIME)
 
 CREATE TABLE Vorlesungen (
         VorlNr         INTEGER PRIMARY KEY,
         Titel          VARCHAR(20),
         SWS            INTEGER,
         gelesenVon     INTEGER REFERENCES Professoren)

 CREATE TABLE hoeren (
         MatrNr         INTEGER REFERENCES Studenten   ON UPDATE CASCADE
                                                       ON DELETE CASCADE,
         VorlNr         INTEGER REFERENCES Vorlesungen ON UPDATE CASCADE,
         PRIMARY KEY    (MatrNr, VorlNr))
 
 CREATE TABLE voraussetzen (
         Vorgaenger     INTEGER REFERENCES Vorlesungen ON UPDATE CASCADE,
         Nachfolger     INTEGER REFERENCES Vorlesungen,
         PRIMARY KEY    (Vorgaenger, Nachfolger))

 CREATE TABLE pruefen (
         MatrNr         INTEGER REFERENCES Studenten   ON UPDATE CASCADE
                                                       ON DELETE CASCADE,
         VorlNr         INTEGER REFERENCES Vorlesungen ON UPDATE CASCADE,
         PersNr         INTEGER REFERENCES Professoren,
         Note           NUMERIC(3,1) CHECK (Note between 0.7 and 5.0),
         PRIMARY KEY    (MatrNr, VorlNr))