RelationalDesign: synergymed_ddl.sql

File synergymed_ddl.sql, 15.5 KB (added by 222003, 3 days ago)

synergymed creation script

Line 
1-- Drop all tables if they exist
2DROP TABLE IF EXISTS synergymed.branded_medicine_instanceof_medicine CASCADE;
3DROP TABLE IF EXISTS synergymed.allergicreaction_healthprofile_medicine CASCADE;
4DROP TABLE IF EXISTS synergymed.supplyorder_brandedmedicine CASCADE;
5DROP TABLE IF EXISTS synergymed.shoppingcart_brandedmedicine CASCADE;
6DROP TABLE IF EXISTS synergymed.pharmacy_catalog CASCADE;
7DROP TABLE IF EXISTS synergymed.patientorder_brandedmedicine CASCADE;
8DROP TABLE IF EXISTS synergymed.patientorder CASCADE;
9DROP TABLE IF EXISTS synergymed.inventory_brandedmedicine CASCADE;
10DROP TABLE IF EXISTS synergymed.healthprofile CASCADE;
11DROP TABLE IF EXISTS synergymed.distributor_brandedmedicine CASCADE;
12DROP TABLE IF EXISTS synergymed.contactinformation CASCADE;
13DROP TABLE IF EXISTS synergymed.clubcard CASCADE;
14DROP TABLE IF EXISTS synergymed.brandedmedicineimage CASCADE;
15DROP TABLE IF EXISTS synergymed.brandedmedicine CASCADE;
16DROP TABLE IF EXISTS synergymed.supplyorder CASCADE;
17DROP TABLE IF EXISTS synergymed.shoppingcart CASCADE;
18DROP TABLE IF EXISTS synergymed.sensitivepatientdata CASCADE;
19DROP TABLE IF EXISTS synergymed.prescription CASCADE;
20DROP TABLE IF EXISTS synergymed.pharmacy CASCADE;
21DROP TABLE IF EXISTS synergymed.pharmacist CASCADE;
22DROP TABLE IF EXISTS synergymed.payment CASCADE;
23DROP TABLE IF EXISTS synergymed.patient CASCADE;
24DROP TABLE IF EXISTS synergymed.medicineinteraction CASCADE;
25DROP TABLE IF EXISTS synergymed.manufacturer CASCADE;
26DROP TABLE IF EXISTS synergymed.inventory CASCADE;
27DROP TABLE IF EXISTS synergymed.facility CASCADE;
28DROP TABLE IF EXISTS synergymed.distributor CASCADE;
29DROP TABLE IF EXISTS synergymed.deliverycompany CASCADE;
30DROP TABLE IF EXISTS synergymed.admins CASCADE;
31DROP TABLE IF EXISTS synergymed.users CASCADE;
32DROP TABLE IF EXISTS synergymed.paymentmethod CASCADE;
33DROP TABLE IF EXISTS synergymed.medicine CASCADE;
34DROP TABLE IF EXISTS synergymed.company CASCADE;
35
36-- Create schema
37CREATE SCHEMA IF NOT EXISTS synergymed AUTHORIZATION postgres;
38
39-- Table: company
40CREATE TABLE synergymed.company (
41 id INT4 NOT NULL,
42 company_name VARCHAR(255) NOT NULL,
43 description TEXT,
44 registration_number VARCHAR(100) NOT NULL,
45 CONSTRAINT company_pkey PRIMARY KEY (id),
46 CONSTRAINT company_registration_number_key UNIQUE (registration_number)
47);
48
49-- Table: medicine
50CREATE TABLE synergymed.medicine (
51 id INT4 NOT NULL,
52 medicine_name VARCHAR(255) NOT NULL,
53 active_ingredient VARCHAR(255) NOT NULL,
54 CONSTRAINT medicine_pkey PRIMARY KEY (id)
55);
56
57-- Table: paymentmethod
58CREATE TABLE synergymed.paymentmethod (
59 id INT4 NOT NULL,
60 method_name VARCHAR(50) NOT NULL,
61 CONSTRAINT paymentmethod_pkey PRIMARY KEY (id)
62);
63
64-- Table: users
65CREATE TABLE synergymed.users (
66 id INT4 NOT NULL,
67 first_name VARCHAR(100) NOT NULL,
68 last_name VARCHAR(100) NOT NULL,
69 username VARCHAR(100) NOT NULL,
70 hashed_password VARCHAR(255) NOT NULL,
71 e_mail VARCHAR(255) NOT NULL,
72 gender VARCHAR(50),
73 date_created DATE NOT NULL,
74 CONSTRAINT users_pkey PRIMARY KEY (id),
75 CONSTRAINT users_username_key UNIQUE (username),
76 CONSTRAINT users_e_mail_key UNIQUE (e_mail)
77);
78
79-- Table: admins
80CREATE TABLE synergymed.admins (
81 user_id INT4 NOT NULL,
82 CONSTRAINT admin_pkey PRIMARY KEY (user_id),
83 CONSTRAINT admin_user_id_fkey FOREIGN KEY (user_id) REFERENCES synergymed.users(id)
84);
85
86-- Table: deliverycompany
87CREATE TABLE synergymed.deliverycompany (
88 company_id INT4 NOT NULL,
89 CONSTRAINT deliverycompany_pkey PRIMARY KEY (company_id),
90 CONSTRAINT deliverycompany_company_id_fkey FOREIGN KEY (company_id) REFERENCES synergymed.company(id)
91);
92
93-- Table: distributor
94CREATE TABLE synergymed.distributor (
95 company_id INT4 NOT NULL,
96 CONSTRAINT distributor_pkey PRIMARY KEY (company_id),
97 CONSTRAINT distributor_company_id_fkey FOREIGN KEY (company_id) REFERENCES synergymed.company(id)
98);
99
100-- Table: facility
101CREATE TABLE synergymed.facility (
102 id INT4 NOT NULL,
103 company_id INT4 NOT NULL,
104 facility_name VARCHAR(150) NOT NULL,
105 code VARCHAR(50) NOT NULL,
106 CONSTRAINT facility_pkey PRIMARY KEY (id),
107 CONSTRAINT facility_code_key UNIQUE (code),
108 CONSTRAINT facility_company_id_fkey FOREIGN KEY (company_id) REFERENCES synergymed.company(id)
109);
110
111-- Table: inventory
112CREATE TABLE synergymed.inventory (
113 facility_id INT4 NOT NULL,
114 CONSTRAINT inventory_pkey PRIMARY KEY (facility_id),
115 CONSTRAINT inventory_facility_id_key UNIQUE (facility_id),
116 CONSTRAINT inventory_facility_id_fkey FOREIGN KEY (facility_id) REFERENCES synergymed.facility(id)
117);
118
119-- Table: manufacturer
120CREATE TABLE synergymed.manufacturer (
121 company_id INT4 NOT NULL,
122 CONSTRAINT manufacturer_pkey PRIMARY KEY (company_id),
123 CONSTRAINT manufacturer_company_id_fkey FOREIGN KEY (company_id) REFERENCES synergymed.company(id)
124);
125
126-- Table: medicineinteraction
127CREATE TABLE synergymed.medicineinteraction (
128 medicine_id_1 INT4 NOT NULL,
129 medicine_id_2 INT4 NOT NULL,
130 type VARCHAR(100) NOT NULL,
131 description TEXT,
132 severity VARCHAR(50) NOT NULL,
133 CONSTRAINT medicineinteraction_pkey PRIMARY KEY (medicine_id_1, medicine_id_2),
134 CONSTRAINT medicineinteraction_check CHECK (medicine_id_1 <> medicine_id_2),
135 CONSTRAINT medicineinteraction_medicine_id_1_fkey FOREIGN KEY (medicine_id_1) REFERENCES synergymed.medicine(id),
136 CONSTRAINT medicineinteraction_medicine_id_2_fkey FOREIGN KEY (medicine_id_2) REFERENCES synergymed.medicine(id)
137);
138
139-- Table: patient
140CREATE TABLE synergymed.patient (
141 user_id INT4 NOT NULL,
142 is_verified BOOL NOT NULL,
143 CONSTRAINT patient_pkey PRIMARY KEY (user_id),
144 CONSTRAINT patient_user_id_fkey FOREIGN KEY (user_id) REFERENCES synergymed.users(id)
145);
146
147-- Table: payment
148CREATE TABLE synergymed.payment (
149 id INT4 NOT NULL,
150 patient_id INT4 NOT NULL,
151 payment_method_id INT4 NOT NULL,
152 payment_date DATE NOT NULL,
153 amount INT4 NOT NULL,
154 status VARCHAR(50) NOT NULL,
155 CONSTRAINT payment_pkey PRIMARY KEY (id),
156 CONSTRAINT payment_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES synergymed.patient(user_id),
157 CONSTRAINT payment_payment_method_id_fkey FOREIGN KEY (payment_method_id) REFERENCES synergymed.paymentmethod(id)
158);
159
160-- Table: pharmacist
161CREATE TABLE synergymed.pharmacist (
162 user_id INT4 NOT NULL,
163 CONSTRAINT pharmacist_pkey PRIMARY KEY (user_id),
164 CONSTRAINT pharmacist_user_id_fkey FOREIGN KEY (user_id) REFERENCES synergymed.users(id)
165);
166
167-- Table: pharmacy
168CREATE TABLE synergymed.pharmacy (
169 company_id INT4 NOT NULL,
170 CONSTRAINT pharmacy_pkey PRIMARY KEY (company_id),
171 CONSTRAINT pharmacy_company_id_fkey FOREIGN KEY (company_id) REFERENCES synergymed.company(id)
172);
173
174-- Table: prescription
175CREATE TABLE synergymed.prescription (
176 id INT4 NOT NULL,
177 patient_id INT4,
178 medicine_id INT4 NOT NULL,
179 issued_by VARCHAR(20) NOT NULL,
180 issued_at DATE NOT NULL,
181 valid_to DATE NOT NULL,
182 embg VARCHAR(20) NOT NULL,
183 CONSTRAINT prescription_pkey PRIMARY KEY (id),
184 CONSTRAINT prescription_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES synergymed.patient(user_id),
185 CONSTRAINT prescription_medicine_id_fkey FOREIGN KEY (medicine_id) REFERENCES synergymed.medicine(id)
186);
187
188-- Table: sensitivepatientdata
189CREATE TABLE synergymed.sensitivepatientdata (
190 id INT4 NOT NULL,
191 patient_id INT4 NOT NULL,
192 pharmacist_id INT4,
193 embg VARCHAR(20) NOT NULL,
194 portrait_photo VARCHAR(255) NOT NULL,
195 CONSTRAINT sensitivepatientdata_pkey PRIMARY KEY (id),
196 CONSTRAINT sensitivepatientdata_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES synergymed.patient(user_id),
197 CONSTRAINT sensitivepatientdata_pharmacist_id_fkey FOREIGN KEY (pharmacist_id) REFERENCES synergymed.pharmacist(user_id)
198);
199
200-- Table: shoppingcart
201CREATE TABLE synergymed.shoppingcart (
202 id INT4 NOT NULL,
203 patient_id INT4 NOT NULL,
204 CONSTRAINT shoppingcart_pkey PRIMARY KEY (id),
205 CONSTRAINT shoppingcart_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES synergymed.patient(user_id)
206);
207
208-- Table: supplyorder
209CREATE TABLE synergymed.supplyorder (
210 id INT4 NOT NULL,
211 distributor_id INT4 NOT NULL,
212 pharmacy_id INT4 NOT NULL,
213 order_date DATE NOT NULL,
214 expected_arrival_date DATE NOT NULL,
215 CONSTRAINT supplyorder_pkey PRIMARY KEY (id),
216 CONSTRAINT supplyorder_distributor_id_fkey FOREIGN KEY (distributor_id) REFERENCES synergymed.distributor(company_id),
217 CONSTRAINT supplyorder_pharmacy_id_fkey FOREIGN KEY (pharmacy_id) REFERENCES synergymed.pharmacy(company_id)
218);
219
220-- Table: brandedmedicine
221CREATE TABLE synergymed.brandedmedicine (
222 id INT4 NOT NULL,
223 manufacturer_id INT4 NOT NULL,
224 price NUMERIC(10,2) NOT NULL,
225 description TEXT,
226 dosage_form VARCHAR(100) NOT NULL,
227 strength VARCHAR(100) NOT NULL,
228 origin_country VARCHAR(100),
229 CONSTRAINT brandedmedicine_pkey PRIMARY KEY (id),
230 CONSTRAINT brandedmedicine_manufacturer_id_fkey FOREIGN KEY (manufacturer_id) REFERENCES synergymed.manufacturer(company_id)
231);
232
233-- Table: brandedmedicineimage
234CREATE TABLE synergymed.brandedmedicineimage (
235 id INT4 NOT NULL,
236 branded_medicine_id INT4 NOT NULL,
237 image VARCHAR(255) NOT NULL,
238 CONSTRAINT brandedmedicineimage_pkey PRIMARY KEY (id),
239 CONSTRAINT brandedmedicineimage_branded_medicine_id_fkey FOREIGN KEY (branded_medicine_id) REFERENCES synergymed.brandedmedicine(id)
240);
241
242-- Table: clubcard
243CREATE TABLE synergymed.clubcard (
244 id INT4 NOT NULL,
245 user_id INT4 NOT NULL,
246 club_program VARCHAR(100) NOT NULL,
247 points INT4 NOT NULL,
248 CONSTRAINT clubcard_pkey PRIMARY KEY (id),
249 CONSTRAINT clubcard_patient_id_fkey FOREIGN KEY (user_id) REFERENCES synergymed.patient(user_id)
250);
251
252-- Table: contactinformation
253CREATE TABLE synergymed.contactinformation (
254 id INT4 NOT NULL,
255 phone VARCHAR(20),
256 address VARCHAR(255),
257 user_id INT4,
258 facility_id INT4,
259 CONSTRAINT contactinformation_pkey PRIMARY KEY (id),
260 CONSTRAINT contactinformation_target_oneof_chk CHECK (((user_id IS NOT NULL)::int + (facility_id IS NOT NULL)::int) = 1),
261 CONSTRAINT contactinformation_user_id_fkey FOREIGN KEY (user_id) REFERENCES synergymed.users(id),
262 CONSTRAINT contactinformation_facility_id_fkey FOREIGN KEY (facility_id) REFERENCES synergymed.facility(id)
263);
264
265-- Table: distributor_brandedmedicine
266CREATE TABLE synergymed.distributor_brandedmedicine (
267 id INT4 NOT NULL,
268 distributor_id INT4 NOT NULL,
269 branded_medicine_id INT4 NOT NULL,
270 CONSTRAINT distributorbrandedmedicine_pkey PRIMARY KEY (id),
271 CONSTRAINT distributorbrandedmedicine_distributor_id_fkey FOREIGN KEY (distributor_id) REFERENCES synergymed.distributor(company_id),
272 CONSTRAINT distributorbrandedmedicine_branded_medicine_id_fkey FOREIGN KEY (branded_medicine_id) REFERENCES synergymed.brandedmedicine(id)
273);
274
275-- Table: healthprofile
276CREATE TABLE synergymed.healthprofile (
277 id INT4 NOT NULL,
278 patient_id INT4 NOT NULL,
279 blood_type VARCHAR(10),
280 CONSTRAINT healthprofile_pkey PRIMARY KEY (id),
281 CONSTRAINT healthprofile_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES synergymed.patient(user_id)
282);
283
284-- Table: inventory_brandedmedicine
285CREATE TABLE synergymed.inventory_brandedmedicine (
286 inventory_id INT4 NOT NULL,
287 branded_medicine_id INT4 NOT NULL,
288 quantity INT4 NOT NULL,
289 last_changed DATE NOT NULL,
290 CONSTRAINT inventorybrandedmedicine_pkey PRIMARY KEY (inventory_id, branded_medicine_id),
291 CONSTRAINT inventorybrandedmedicine_inventory_id_fkey FOREIGN KEY (inventory_id) REFERENCES synergymed.inventory(facility_id),
292 CONSTRAINT inventorybrandedmedicine_branded_medicine_id_fkey FOREIGN KEY (branded_medicine_id) REFERENCES synergymed.brandedmedicine(id)
293);
294
295-- Table: patientorder
296CREATE TABLE synergymed.patientorder (
297 id INT4 NOT NULL,
298 patient_id INT4 NOT NULL,
299 delivery_company_id INT4 NOT NULL,
300 payment_id INT4 NOT NULL,
301 order_date DATE NOT NULL,
302 expected_arrival_date DATE NOT NULL,
303 status VARCHAR(100) NOT NULL,
304 total_price INT4 NOT NULL,
305 CONSTRAINT orders_pkey PRIMARY KEY (id),
306 CONSTRAINT orders_payment_id_key UNIQUE (payment_id),
307 CONSTRAINT orders_patient_id_fkey FOREIGN KEY (patient_id) REFERENCES synergymed.patient(user_id),
308 CONSTRAINT orders_delivery_company_id_fkey FOREIGN KEY (delivery_company_id) REFERENCES synergymed.deliverycompany(company_id),
309 CONSTRAINT orders_payment_id_fkey FOREIGN KEY (payment_id) REFERENCES synergymed.payment(id)
310);
311
312-- Table: patientorder_brandedmedicine
313CREATE TABLE synergymed.patientorder_brandedmedicine (
314 id INT4 NOT NULL,
315 order_id INT4 NOT NULL,
316 branded_medicine_id INT4 NOT NULL,
317 quantity INT4 NOT NULL,
318 CONSTRAINT patientorder_brandedmedicine_pkey PRIMARY KEY (id),
319 CONSTRAINT orderbrandedmedicine_order_id_fkey FOREIGN KEY (order_id) REFERENCES synergymed.patientorder(id),
320 CONSTRAINT orderbrandedmedicine_branded_medicine_id_fkey FOREIGN KEY (branded_medicine_id) REFERENCES synergymed.brandedmedicine(id)
321);
322
323-- Table: pharmacy_catalog
324CREATE TABLE synergymed.pharmacy_catalog (
325 pharmacy_id INT4 NOT NULL,
326 branded_medicine_id INT4 NOT NULL,
327 CONSTRAINT pharmacy_catalog_pkey PRIMARY KEY (pharmacy_id, branded_medicine_id),
328 CONSTRAINT pharmacybrandedmedicine_pharmacy_id_fkey FOREIGN KEY (pharmacy_id) REFERENCES synergymed.pharmacy(company_id),
329 CONSTRAINT pharmacybrandedmedicine_branded_medicine_id_fkey FOREIGN KEY (branded_medicine_id) REFERENCES synergymed.brandedmedicine(id)
330);
331
332-- Table: shoppingcart_brandedmedicine
333CREATE TABLE synergymed.shoppingcart_brandedmedicine (
334 shopping_cart_id INT4 NOT NULL,
335 branded_medicine_id INT4 NOT NULL,
336 quantity INT4 NOT NULL,
337 CONSTRAINT shoppingcartbrandedmedicine_pkey PRIMARY KEY (shopping_cart_id, branded_medicine_id),
338 CONSTRAINT shoppingcartbrandedmedicine_shopping_cart_id_fkey FOREIGN KEY (shopping_cart_id) REFERENCES synergymed.shoppingcart(id),
339 CONSTRAINT shoppingcartbrandedmedicine_branded_medicine_id_fkey FOREIGN KEY (branded_medicine_id) REFERENCES synergymed.brandedmedicine(id)
340);
341
342-- Table: supplyorder_brandedmedicine
343CREATE TABLE synergymed.supplyorder_brandedmedicine (
344 supply_order_id INT4 NOT NULL,
345 branded_medicine_id INT4 NOT NULL,
346 quantity INT4 NOT NULL,
347 CONSTRAINT supplyorderbrandedmedicine_pkey PRIMARY KEY (supply_order_id, branded_medicine_id),
348 CONSTRAINT supplyorderbrandedmedicine_supply_order_id_fkey FOREIGN KEY (supply_order_id) REFERENCES synergymed.supplyorder(id),
349 CONSTRAINT supplyorderbrandedmedicine_branded_medicine_id_fkey FOREIGN KEY (branded_medicine_id) REFERENCES synergymed.brandedmedicine(id)
350);
351
352-- Table: allergicreaction_healthprofile_medicine
353CREATE TABLE synergymed.allergicreaction_healthprofile_medicine (
354 health_profile_id INT4 NOT NULL,
355 medicine_id INT4 NOT NULL,
356 date_diagnosed DATE,
357 description TEXT,
358 severity VARCHAR(50),
359 CONSTRAINT healthprofilemedicineallergy_pkey PRIMARY KEY (health_profile_id, medicine_id),
360 CONSTRAINT healthprofilemedicineallergy_health_profile_id_fkey FOREIGN KEY (health_profile_id) REFERENCES synergymed.healthprofile(id),
361 CONSTRAINT healthprofilemedicineallergy_medicine_id_fkey FOREIGN KEY (medicine_id) REFERENCES synergymed.medicine(id)
362);
363
364-- Table: branded_medicine_instanceof_medicine
365CREATE TABLE synergymed.branded_medicine_instanceof_medicine (
366 branded_medicine_id INT4 NOT NULL,
367 medicine_id INT4 NOT NULL,
368 CONSTRAINT brandedmedicinemedicine_pkey PRIMARY KEY (branded_medicine_id, medicine_id),
369 CONSTRAINT brandedmedicinemedicine_branded_medicine_id_fkey FOREIGN KEY (branded_medicine_id) REFERENCES synergymed.brandedmedicine(id),
370 CONSTRAINT brandedmedicinemedicine_medicine_id_fkey FOREIGN KEY (medicine_id) REFERENCES synergymed.medicine(id)
371);