-- contraintes.sql 
-- Manu, 17/9/9

-- attention a dropper les tables dans le bon ordre : cause foreign keys
drop table voyage;
drop table client;
drop table sejour;

-- les clients
create table client(
  idc integer primary key, 
  nom varchar2(10) not null, 
  age integer,
  solde integer default 2000 not null,
  constraint check_age check (0<=age and age<120),
  check (solde>=0)
);
drop sequence seq_client;
create sequence seq_client;

-- lieu de sejour (village de vacance)
create table sejour(
  ids integer primary key,
  dest varchar2(10) not null,
  activite varchar2(10),
  prix integer not null,
  nbplaces integer not null,
  check (1<=nbplaces and nbplaces <=100),
  check (prix>0)
);
drop sequence seq_sejour;
create sequence seq_sejour;

-- achats de sejours par les  clients
create table voyage(
  idc integer,
  ids integer not null, 
  jour integer,
  foreign key (idc) references client(idc),
  foreign key (ids) references sejour(ids),
  check (1<=jour and jour<=365),
  primary key (idc, jour)
);

-- contraintes inter-tables
/* sejour et voyage
  pour tout ids i de nbplaces n dans sejour,
  il y a au plus n lignes avec ids i pour un jour j donne dans voyage
  pas exprimable en SQL : intuition : c'est une contrainte entre deux
  tables plus compliquee qu'une foreign key
*/

-- contenu de la base
insert into client(idc, nom, age) values(seq_client.nextval, 'titi', 21);
insert into sejour values(seq_sejour.nextval, 'NY', 'MOMA', 100, 20);
-- insert into sejour values(seq_sejour.nextval, 'NY', 'MOMA', 100, 1);
insert into voyage values(seq_client.currval, seq_sejour.currval, 1);

