· 4 years ago · Jun 25, 2021, 03:54 PM
1begin;
2
3drop table if exists Vaccinando CASCADE;
4drop table if exists Vaccino CASCADE;
5drop table if exists Prenotazione CASCADE;
6drop table if exists Complicazioni;
7drop table if exists Lotto CASCADE;
8drop table if exists Reazione;
9drop table if exists CentroVaccinale CASCADE;
10drop table if exists Dispone;
11drop table if exists Convocato;
12drop table if exists Medico CASCADE;
13drop table if exists Somministra;
14drop table if exists Report;
15
16/*
17Vaccinando(CF, Pers. San, Pers. Sco, Sog. Fragili, Nome, Cognome, Età, Indirizzo, Città, Prenotazione*)
18*/
19
20create table Vaccinando (
21 CF varchar(16),
22 PersSan boolean not null,
23 PersSco boolean not null,
24 SogFra boolean not null,
25 Nome varchar(100) not null,
26 Cognome varchar(100) not null,
27 Eta numeric(3) check (Eta >= 0) not null,
28 Indirizzo varchar(100) not null,
29 Citta varchar(100) not null,
30 Prenotazione varchar(16),
31
32 constraint pk_Vaccinando primary key(CF)
33
34);
35
36/*
37Vaccino(TipoVaccino, EtàMax, EtàMin, NSom, Delta, Efficacia)
38*/
39
40create table Vaccino (
41 TipoVaccino varchar(100),
42 EtaMax numeric(3) check (EtaMax >= 0) not null,
43 EtaMin numeric(3) check (EtaMin >= 0 and EtaMin < EtaMax) not null,
44 NSom numeric(2) check (NSom >= 1) not null,
45 Delta numeric(3) check (Delta > 0) not null,
46 Efficacia decimal(5, 2) check (Efficacia >= 0.00 and Efficacia <= 100.00) not null,
47
48 constraint pk_Vaccino primary key(TipoVaccino)
49);
50
51/*
52Prenotazione(Vaccinando, Categoria, Recapito, Pregressa Positività, )
53*/
54
55create table Prenotazione (
56 Vaccinando varchar(16),
57 Categoria varchar(100) not null,
58 Recapito varchar(100) not null,
59 PregressaPositività boolean not null,
60 Vaccino varchar(100) not null,
61
62 constraint pk_Prenotazione primary key(Vaccinando),
63 constraint fk_PreVaccinando foreign key (Vaccinando) references Vaccinando(CF)
64 on update cascade
65 on delete cascade,
66 constraint pk_preVaccino foreign key (Vaccino) references Vaccino(TipoVaccino)
67 on update cascade
68 on delete cascade
69);
70
71/*
72Complicazioni(Allergia/Intolleranza, Prenotazione)
73*/
74create table Complicazioni (
75 AllergiaIntolleranza varchar(100),
76 Prenotazione varchar(16) not null,
77
78 constraint pk_Complicazioni primary key(AllergiaIntolleranza),
79 constraint fk_ComPre foreign key (Prenotazione) references Prenotazione(Vaccinando)
80 on update cascade
81 on delete cascade
82);
83
84/*
85Lotto(Numero, Vaccino, DataProd, DataScad)
86*/
87
88create table Lotto (
89 Numero numeric(5),
90 Vaccino varchar(100),
91 DataProd date not null,
92 DataScad date check(DataScad > DataProd) not null,
93
94 constraint pk_Lotto primary key(Numero, Vaccino),
95 constraint fk_LotVac foreign key (Vaccino) references Vaccino(TipoVaccino)
96 on update cascade
97 on delete cascade
98);
99
100/*
101Reazione(Tipo Reazione, NumeroL, VaccinoL)
102*/
103
104create table Reazione (
105 TipoReazione varchar(100),
106 NumeroL numeric(5) not null,
107 VaccinoL varchar(100) not null,
108
109 constraint pk_Reazione primary key (TipoReazione),
110 constraint fk_ReaLot foreign key (NumeroL, VaccinoL) references Lotto(Numero, Vaccino)
111 on update cascade
112 on delete cascade
113);
114
115/*
116Centro Vaccinale(Città, Indirizzo)
117*/
118
119create table CentroVaccinale (
120 Citta varchar(100),
121 Indirizzo varchar(100),
122
123 constraint pk_CV primary key (Citta, Indirizzo)
124);
125
126
127/*
128Dispone(CittàCV,IndirizzoCV,NumeroL,VaccinoL,NumDosi)
129*/
130
131create table Dispone (
132 CittaCV varchar(100),
133 IndirizzoCV varchar(100),
134 NumeroL numeric(5),
135 VaccinoL varchar(100),
136 NumDosi numeric(5) not null,
137
138 constraint pk_Dispone primary key (CittaCV,IndirizzoCV,NumeroL,VaccinoL),
139 constraint fk_DisCV foreign key (CittaCV,IndirizzoCV) references CentroVaccinale(Citta, Indirizzo)
140 on update cascade
141 on delete cascade,
142 constraint fk_DisLot foreign key (NumeroL,VaccinoL) references Lotto(Numero,Vaccino)
143 on update cascade
144 on delete cascade
145);
146
147/*
148Convocato(Vaccinando, CittàCV, IndirizzoCV, Vaccino, Data, Ora)
149*/
150
151create table Convocato (
152 Vaccinando varchar(16),
153 CittaCV varchar(100),
154 IndirizzoCV varchar(100),
155 Vaccino varchar(100),
156 DataC date not null,
157 Ora time not null,
158
159 constraint pk_Convocato primary key (Vaccinando, CittaCV, IndirizzoCV, Vaccino),
160 constraint fk_ConVaccinando foreign key (Vaccinando) references Vaccinando(CF)
161 on update cascade
162 on delete cascade,
163 constraint fk_ConVaccino foreign key (Vaccino) references Vaccino(TipoVaccino)
164 on update cascade
165 on delete cascade,
166 constraint fk_ConCV foreign key (CittaCV, IndirizzoCV) references CentroVaccinale(Citta, Indirizzo)
167 on update cascade
168 on delete cascade
169);
170
171/*
172Medico(CF, Tipo Medico,Nome, Cognome, Età, Indirizzo, Città, CittàCV, IndirizzoCV)
173*/
174
175create table Medico (
176 CF varchar(16),
177 TipoMedico varchar(100) not null,
178 Nome varchar(100) not null,
179 Cognome varchar(100) not null,
180 Eta numeric(3) check (Eta >= 0) not null,
181 Indirizzo varchar(100) not null,
182 Citta varchar(100) not null,
183 CittaCV varchar(100) not null,
184 IndirizzoCV varchar(100) not null,
185
186 constraint pk_Medico primary key (CF),
187 constraint fk_MedCV foreign key (CittaCV, IndirizzoCV) references CentroVaccinale(Citta, Indirizzo)
188 on update cascade
189 on delete cascade
190);
191
192/*
193Somministra(Vaccinando,Medico,NumeroL, VaccinoL)
194*/
195
196create table Somministra (
197 Vaccinando varchar(16),
198 Medico varchar(16),
199 NumeroL numeric(5),
200 VaccinoL varchar(100),
201
202 constraint pk_Somministra primary key (Vaccinando,Medico,NumeroL,VaccinoL),
203 constraint fk_SomVaccinando foreign key (Vaccinando) references Vaccinando(CF)
204 on update cascade
205 on delete cascade,
206 constraint fk_SomMed foreign key (Medico) references Medico(CF)
207 on update cascade
208 on delete cascade,
209 constraint fk_SomLot foreign key (NumeroL, VaccinoL) references Lotto(Numero, Vaccino)
210 on update cascade
211 on delete cascade
212);
213
214/*
215Report(Medico,CittàCV, IndirizzoCV, NumeroL, VaccinoL, Data, Reazione)
216*/
217
218create table Report (
219 Medico varchar(16),
220 CittaCV varchar(100),
221 IndirizzoCV varchar(100),
222 NumeroL numeric(5),
223 VaccinoL varchar(100),
224 DataR date not null,
225 Reazione varchar(100) not null,
226
227 constraint pk_Report primary key (Medico,CittaCV, IndirizzoCV, NumeroL, VaccinoL),
228 constraint fk_RepCV foreign key (CittaCV, IndirizzoCV) references CentroVaccinale(Citta, Indirizzo)
229 on update cascade
230 on delete cascade,
231 constraint fk_RepMed foreign key (Medico) references Medico(CF)
232 on update cascade
233 on delete cascade,
234 constraint fk_RepLot foreign key (NumeroL, VaccinoL) references Lotto(Numero, Vaccino)
235 on update cascade
236 on delete cascade
237);
238
239commit;