
create table studente(
matricola char(6) primary key
codiceefiscale char(16) not null unique,
datanascita date not null check(datanascita>'01-01-1900')
città varchar(255),
rappresentante boolean not null default false
)
create table esame (
codicecorso varchar(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 (matricolastudente, codicecorso)

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,
ora inizio 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) references
calendario(codicecorso, vasca, giorno, orainizio)
on update cascade on delete no action
)
Specificare in SQL il vincolo che controlla che la data di iscrizione non sia posteriore alla data di fine del corso.
create assertion verificadate check(
not exists(
select*
from frequenza as f, corso as c
where f.codicecorso = c.codcorso
and f.dataiscrizione > c.datafine
)
)
Specificare in SQL il vincolo che controlla che in uno stesso giorno non ci siano più di 50 persone che frequentano lezioni.
create assertion verificanumeropresenti (
50 >= ALL (
select count(distinct cliente)
from frequenza
group by giorno
)
)