create table NomeTabella()
NomeAttributo DOMINIO [ValoreDefault] [VincoloAttributo]
...
VincoloTabella
)
Dominio:
Vincoli
Politica cascade→
Politica no action→

/*soluzione*/
/* l'asterisco indica che l'attributo può non essere specificato*/
create table Studente(
Matricola CHAR(6) PRIMARY KEY, //primary key è implicitamente not null
CodiceFiscale CHAR(16) UNIQUE NOT NULL,
DataNascita DATE NOT NULL CHECK(DataNascita >='1/1/1900'),
Città VARCHAR(255),
Rappresentante BOOLEAN NOT NULL DEFAULT false
)
create table Esame(
CodiceCorso CHAR(5) REFERENCES Corso(Codice) ON UPDATE Cascade ON DELETE No action,
MatricolaStudente CHAR(6) REFERENCES Studente(Matricola) ON UPDATE Cascade ON DELETE No Action,
Voto INTEGER NOT NULL Check(Voto BETWEEN 18 AND 31),
PRIMARY KEY(CodiceCorso, MatricolaStudente)
)

Create table Corso(
CodCorso VARCHAR(255) PRIMARY KEY,
Descrizione VARCHAR(255) NOT NULL,
Tipo ENUM('MONOSETTIMANALE', 'BISETTIMANALE') NOT NULL,
DataInizio DATE NOT NULL,
DataFine DATE NOT NULL,
)
Create Table Frequenza(
CodiceCorso VARCHAR(255),
Vasca VARCHAR(255),
Giorno DATE,
OraInizio TIME,
Cliente CHAR(16) REFERENCES PERSONA(CF) ON UPDATE CASCADE ON DELETE NO ACTION,
DataIscrizione DATE NOT NULL,
PRIMARY KEY(CodiceCorso, Vasca, Giorno, OraInizio, Cliente),
FOREIGN KEY(CodiceCorso, Vasca, Giorno, OraInizio, Cliente) REFERENCES Calendario
)
Riferendosi all'esercizio prima, specificare in SQL il vincolo che controlla che la data di iscrizione non sia posteriore alla data di fine del corso.
CREATE ASSERTION VerficaDate CHECK (
NOT EXISTS ( SELECT * FROM Frequenza, Corso
WHERE CodiceCorso = CodCorso AND
DataIscrizione>DataFine
)
)
WHERE [not] EXISTS sub_query