SQL-CHECK

-- Tabelle Student
CREATE TABLE Student (
    MatrNr INTEGER PRIMARY KEY NOT NULL,
    Name VARCHAR(30) NOT NULL,
    Semester INTEGER CHECK (Semester BETWEEN 1 AND 13)
);

-- Tabelle Professor
CREATE TABLE Professor (
    PersNr INTEGER PRIMARY KEY NOT NULL,
    Name VARCHAR(30) NOT NULL,
    Rang CHARACTER(2) CHECK (Rang IN ('W1', 'W2', 'W3')),
    Raum INTEGER UNIQUE
);

Komplexe Integritätsbedingungen

CREATE TABLE Prüfung (
    PersNr INTEGER NOT NULL,
    ModNr CHAR(9),
    MatrNr INTEGER NOT NULL,
    Note DECIMAL(2,1) CHECK (Note BETWEEN 0.0 AND 5.0) DEFAULT 0.0,
    PRIMARY KEY (PersNr, MatrNr),
    FOREIGN KEY (PersNr) REFERENCES DOZENT(PERSNR),
    FOREIGN KEY (MatrNr) REFERENCES STUDENT(MATRNR),
    CONSTRAINT VORHER_HOEREN 
        CHECK (EXISTS (SELECT * FROM Besucht b 
                       WHERE b.ModNr = Prüfung.ModNr 
                       AND b.MatrNr = Prüfung.MatrNr))
);