create table Progetto (
 Nome       varchar2(30) primary key,
 Budget     number(11,2) default 0,
 Consegna   date not null) 
TABLESPACE USERS
STORAGE (INITIAL 8K NEXT 4K PCTINCREASE 0);

insert into Progetto values ('Dante'     , 200.0, '1-MAR-00');
insert into Progetto values ('B24'       , 500  , '1-JUN-01');
insert into Progetto values ('S3E'       , 250  , '1-DEC-05');
insert into Progetto values ('PostKantor', 500  , '1-MAY-00');
insert into Progetto values ('Mirror'    , 400  , '1-NOV-01');

create table Sede (
  CAP        char(5) primary key ,
  Numero     varchar2(10)  ,  
  Via        varchar2(30)) 
TABLESPACE USERS
STORAGE (INITIAL 8K NEXT 4K PCTINCREASE 0);
insert into Sede values ('10015', 77 , 'Jervis'       );
insert into Sede values ('20025', 100, 'Gluk'         );
insert into Sede values ('80030', 34 , 'Campi Flegrei');

REM Il campo Sede identifica Dipartimento
REM tramite la relazione Composizione. Il campo 
REM Impiegato realizza la relazione Direzione.
REM Il campo multivalore Telefono sfruttera` una tabella a parte. 
create table Dipartimento (
  Nome        varchar2(50)  not null,
  Sede        char(5) not null,
  Impiegato   varchar2(6)   not null unique,
  primary key(Nome, Sede)
) 
TABLESPACE USERS
STORAGE (INITIAL 8K NEXT 4K PCTINCREASE 0);
insert into Dipartimento values ('Amministr', '20025', '375');
insert into Dipartimento values ('Progetto' , '10015', '010');
insert into Dipartimento values ('Progetto' , '80030', '301');
insert into Dipartimento values ('CQ'       , '10015', '020');
insert into Dipartimento values ('CQ'       , '80030', '231');
insert into Dipartimento values ('Produzion', '80030', '210');
insert into Dipartimento values ('Ricerca'  , '10015', '030');

REM I campi DipNome, DipSede e Data realizzano la relazione Afferenza.  */
create table Impiegato (
 Matricola  varchar2(6)   primary key,
 Nome       varchar2(20)  not null,
 Cognome    varchar2(20)  not null, 
 Stipendio  number(9,2)   default 0,
 Eta        number(2)     default 18,
 Data       date,
 DipNome    varchar2(50)  not null,
 DipSede    char(5) 	  not null,
 check(eta >= 18)) 
TABLESPACE USERS
STORAGE (INITIAL 8K NEXT 4K PCTINCREASE 0);
insert into Impiegato values ('101', 'Mario', 	  'Rossi', 	 34, 40, '15-JAN-00' , 'Produzion', '80030');
insert into Impiegato values ('103', 'Mario', 	  'Bianchi', 	 50, 35, '15-JAN-80' , 'Produzion', '80030');
insert into Impiegato values ('104', 'Luigi', 	  'Neri', 	 38, 61, '20-FEB-80' , 'Produzion', '80030');
insert into Impiegato values ('105', 'Nico', 	  'Bini', 	 44, 38, '20-FEB-80' , 'CQ'       , '80030');
insert into Impiegato values ('210', 'Marco', 	  'Celli', 	 49, 60, '20-FEB-80' , 'Progetto' , '80030');
insert into Impiegato values ('231', 'Siro', 	  'Bisi', 	 50, 60, '20-FEB-80' , 'Progetto' , '80030');
insert into Impiegato values ('252', 'Nico', 	  'Bini', 	 44, 70, '05-JAN-79' , 'Amministr', '20025');
insert into Impiegato values ('301', 'Sergio', 	  'Rossi', 	 34, 70, '05-MAY-79' , 'Amministr', '20025');
insert into Impiegato values ('375', 'Mario', 	  'Rossi', 	 50, 65, '01-JAN-66' , 'Amministr', '20025');
insert into Impiegato values ('010', 'Silvia', 	  'Zanzi', 	 40, 46, '15-OCT-97' , 'Amministr', '20025');
insert into Impiegato values ('020', 'Anna', 	  'Pilatone', 	 55, 40, '03-NOV-89' , 'Progetto' , '10015');
insert into Impiegato values ('030', 'Antonio',   'Prevignano',  55, 39, '03-NOV-89' , 'Progetto' , '10015');
insert into Impiegato values ('021', 'Fulvia', 	  'Donetti', 	 34, 32, '01-SEP-97' , 'CQ'       , '10015');
insert into Impiegato values ('031', 'Carmelina', 'Savatteri', 	 80, 31, '12-NOV-99' , 'Ricerca'  , '10015');
insert into Impiegato values ('022', 'Fulvio', 	  'Marini', 	 30, 30, '01-JUL-95' , 'CQ'       , '10015');
insert into Impiegato values ('032', 'Carla', 	  'Vercellotti', 79, 32, '01-MAR-98' , 'Ricerca'  , '10015');
insert into Impiegato values ('033', 'Massimo',   'Rosciano', 	 25, 32, '15-FEB-96' , 'Ricerca'  , '10015');

alter table Dipartimento
 add constraint Composizione foreign key (Sede) references Sede(CAP);
alter table Dipartimento 
 add constraint Direzione foreign key (Impiegato) references Impiegato(Matricola);
alter table Impiegato
 add constraint Afferenza foreign key (DipNome,DipSede) references Dipartimento(Nome,Sede);

create table Partecipazione (
  Impiegato      varchar2(6)   	not null,
  Progetto       varchar2(30) 	not null,
  Inizio         date 		not null,
  primary key (Impiegato,Progetto),
  constraint lato01 foreign key (Impiegato) references Impiegato(Matricola),
  constraint lato1N foreign key (Progetto)  references Progetto(Nome)) 
TABLESPACE USERS
STORAGE (INITIAL 8K NEXT 4K PCTINCREASE 0);
insert into Partecipazione values ('231', 'PostKantor', '01-JAN-95');
insert into Partecipazione values ('231', 'Mirror', 	'01-MAR-96');
insert into Partecipazione values ('105', 'PostKantor', '01-FEB-95');
insert into Partecipazione values ('105', 'Mirror', 	'20-MAR-96');
insert into Partecipazione values ('210', 'PostKantor', '01-JAN-94');
insert into Partecipazione values ('101', 'PostKantor', '10-JAN-94');
insert into Partecipazione values ('103', 'PostKantor', '10-JAN-94');
insert into Partecipazione values ('104', 'PostKantor', '11-JAN-94');
insert into Partecipazione values ('030', 'Dante', 	'01-JAN-97');
insert into Partecipazione values ('030', 'S3E', 	'01-FEB-98');
insert into Partecipazione values ('030', 'B24', 	'01-MAR-97');
insert into Partecipazione values ('032', 'Dante', 	'15-JAN-97');
insert into Partecipazione values ('032', 'S3E', 	'04-FEB-98');
insert into Partecipazione values ('032', 'B24', 	'28-MAR-97');
insert into Partecipazione values ('031', 'Dante', 	'14-JAN-97');
insert into Partecipazione values ('031', 'B24', 	'01-APR-97');
insert into Partecipazione values ('020', 'Dante', 	'01-JAN-98');
insert into Partecipazione values ('020', 'B24', 	'01-JUL-97');
insert into Partecipazione values ('021', 'Dante', 	'10-JAN-98');
insert into Partecipazione values ('022', 'B24', 	'05-JUL-97');

create table DipartimentoTelefono (
  DipNome        varchar2(50)  	not null,
  DipSede        char(5) 	not null,
  Telefono	 varchar2(20)   not null,
  primary key (DipNome,DipSede,Telefono),
  foreign key (DipNome,DipSede) references Dipartimento(Nome,Sede)) 
TABLESPACE USERS
STORAGE (INITIAL 8K NEXT 4K PCTINCREASE 0) ;


insert into DipartimentoTelefono values ('Amministr', '20025', '0212345');
insert into DipartimentoTelefono values ('Amministr', '20025', '0212346');
insert into DipartimentoTelefono values ('Amministr', '20025', '0212347');
insert into DipartimentoTelefono values ('Progetto' , '10015', '0125528');
insert into DipartimentoTelefono values ('Progetto' , '10015', '0125529');
insert into DipartimentoTelefono values ('Progetto' , '80030', '0818533');
insert into DipartimentoTelefono values ('CQ'       , '10015', '0125521');
insert into DipartimentoTelefono values ('CQ'       , '80030', '0818533');
insert into DipartimentoTelefono values ('CQ'       , '80030', '0818534');
insert into DipartimentoTelefono values ('Produzion', '80030', '0818533');
insert into DipartimentoTelefono values ('Ricerca'  , '10015', '0125525');
insert into DipartimentoTelefono values ('Ricerca'  , '10015', '0125526');
