· 4 years ago · Jun 28, 2021, 03:06 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àMin, EtàMax, NumSom, Delta, Efficacia)
38*/
39
40create table Vaccino (
41 TipoVaccino varchar(100),
42 EtaMin numeric(3) check (EtaMin >= 0 and EtaMin < EtaMax) not null,
43 EtaMax numeric(3) check (EtaMax >= 0) not null,
44 NumSom numeric(2) check (NumSom >= 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à, Vaccino)
53*/
54
55create table Prenotazione (
56 Vaccinando varchar(16),
57 Categoria varchar(100) not null,
58 Recapito varchar(100) not null,
59 PregressaPositivita 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, Prenotazione),
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, NumeroL, VaccinoL),
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 NumDosiFlustop numeric(5) check(NumDosiFlustop >= 0) not null,
123 NumDosiCovidin numeric(5) check(NumDosiCovidin >= 0) not null,
124 NumDosiCoronax numeric(5) check(NumDosiCoronax >= 0) not null,
125
126 constraint pk_CV primary key (Citta, Indirizzo)
127);
128
129
130/*
131Dispone(CittàCV,IndirizzoCV,NumeroL,VaccinoL,NumDosi)
132*/
133
134create table Dispone (
135 CittaCV varchar(100),
136 IndirizzoCV varchar(100),
137 NumeroL numeric(5),
138 VaccinoL varchar(100),
139 NumDosi numeric(5) check(NumDosi >= 0) not null,
140
141 constraint pk_Dispone primary key (CittaCV,IndirizzoCV,NumeroL,VaccinoL),
142 constraint fk_DisCV foreign key (CittaCV,IndirizzoCV) references CentroVaccinale(Citta, Indirizzo)
143 on update cascade
144 on delete cascade,
145 constraint fk_DisLot foreign key (NumeroL,VaccinoL) references Lotto(Numero,Vaccino)
146 on update cascade
147 on delete cascade
148);
149
150/*
151Convocato(Vaccinando, CittàCV, IndirizzoCV, Vaccino, Data, Ora)
152*/
153
154create table Convocato (
155 Vaccinando varchar(16),
156 CittaCV varchar(100),
157 IndirizzoCV varchar(100),
158 Vaccino varchar(100),
159 DataC date not null,
160 Ora time not null,
161 NumSom numeric(1) check(NumSom > 0) not null,
162
163 constraint pk_Convocato primary key (Vaccinando, CittaCV, IndirizzoCV, Vaccino),
164 constraint fk_ConVaccinando foreign key (Vaccinando) references Vaccinando(CF)
165 on update cascade
166 on delete cascade,
167 constraint fk_ConVaccino foreign key (Vaccino) references Vaccino(TipoVaccino)
168 on update cascade
169 on delete cascade,
170 constraint fk_ConCV foreign key (CittaCV, IndirizzoCV) references CentroVaccinale(Citta, Indirizzo)
171 on update cascade
172 on delete cascade
173);
174
175/*
176Medico(CF, Tipo Medico,Nome, Cognome, Età, Indirizzo, Città, CittàCV, IndirizzoCV)
177*/
178
179create table Medico (
180 CF varchar(16),
181 TipoMedico varchar(100) not null,
182 Nome varchar(100) not null,
183 Cognome varchar(100) not null,
184 Eta numeric(3) check (Eta >= 0) not null,
185 Indirizzo varchar(100) not null,
186 Citta varchar(100) not null,
187 CittaCV varchar(100) not null,
188 IndirizzoCV varchar(100) not null,
189
190 constraint pk_Medico primary key (CF),
191 constraint fk_MedCV foreign key (CittaCV, IndirizzoCV) references CentroVaccinale(Citta, Indirizzo)
192 on update cascade
193 on delete cascade
194);
195
196/*
197Somministra(Vaccinando,Medico,NumeroL, VaccinoL)
198*/
199
200create table Somministra (
201 Vaccinando varchar(16),
202 Medico varchar(16),
203 NumeroL numeric(5),
204 VaccinoL varchar(100),
205
206 constraint pk_Somministra primary key (Vaccinando,Medico,NumeroL,VaccinoL),
207 constraint fk_SomVaccinando foreign key (Vaccinando) references Vaccinando(CF)
208 on update cascade
209 on delete cascade,
210 constraint fk_SomMed foreign key (Medico) references Medico(CF)
211 on update cascade
212 on delete cascade,
213 constraint fk_SomLot foreign key (NumeroL, VaccinoL) references Lotto(Numero, Vaccino)
214 on update cascade
215 on delete cascade
216);
217
218/*
219Report(Medico,CittàCV, IndirizzoCV, NumeroL, VaccinoL, Data, Reazione)
220*/
221
222create table Report (
223 Medico varchar(16),
224 CittaCV varchar(100),
225 IndirizzoCV varchar(100),
226 NumeroL numeric(5),
227 VaccinoL varchar(100),
228 DataR date not null,
229 Reazione varchar(100) not null,
230
231 constraint pk_Report primary key (Medico,CittaCV, IndirizzoCV, NumeroL, VaccinoL),
232 constraint fk_RepCV foreign key (CittaCV, IndirizzoCV) references CentroVaccinale(Citta, Indirizzo)
233 on update cascade
234 on delete cascade,
235 constraint fk_RepMed foreign key (Medico) references Medico(CF)
236 on update cascade
237 on delete cascade,
238 constraint fk_RepLot foreign key (NumeroL, VaccinoL) references Lotto(Numero, Vaccino)
239 on update cascade
240 on delete cascade
241);
242
243commit;