CREATE TABLE Persona(
CF VARCHAR(16) PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Cognome VARCHAR(50) NOT NULL,
Email VARCHAR(50) NOT NULL,
RuoloPersona VARCHAR(20) NOT NULL CHECK(RuoloPersona IN ('Studente', 'Professore', 'Tutor', 'Ex-Studente')),
Telefono NUMERIC(10) NOT NULL,
Scuola NUMERIC(5) NOT NULL REFERENCES Scuola ON UPDATE CASCADE ON DELETE RESTRICT,
Genere VARCHAR(50),
Ruolo VARCHAR(50),
Materia VARCHAR(50) DEFAULT NULL,
Classe VARCHAR(5) DEFAULT NULL,
Sezione VARCHAR(5) DEFAULT NULL,
Note VARCHAR(100),
CHECK((RuoloPersona='Professore' AND Materia!=NULL) OR (RuoloPersona!='Professore' AND Materia=NULL)),
CHECK((RuoloPersona='Studente' AND Classe!=NULL) OR (RuoloPersona!='Studente' AND Classe=NULL)),
CHECK((RuoloPersona='Studente' AND Sezione!=NULL) OR (RuoloPersona!='Studente' AND Sezione=NULL)));
Ich versuche, eine Tabelle Person zu erstellen, die auch Schüler und Lehrer enthalten. Um dies zu ermöglichen, habe ich ein Feld namens "RuoloPersona" erstellt, das markiert, ob eine Person ein Schüler oder ein Lehrer ist. Ich möchte, dass das Feld "Materia" NICHT NULL ist, wenn ein Lehrer hinzugefügt wird und ich möchte, dass die Felder "Classe" und "Sezione" NICHT NULL sind, wenn ein Schüler hinzugefügt wird. In allen anderen Fällen möchte ich, dass sie NULL sind. Offensichtlich funktioniert das, was ich oben geschrieben habe, nicht, sondern erklärt meine Idee.Stellen einiger Felder ‚NOT NULL‘ nur dann, wenn ein Feld einen besonderen Wert hat
Das hat gut funktioniert, danke! –