source: sql/ddl.sql@ 48d2bed

Last change on this file since 48d2bed was 48d2bed, checked in by MBK <marija.karapandzova@…>, 12 hours ago

Remote database setup, fixed models and application properties

  • Property mode set to 100644
File size: 22.8 KB
RevLine 
[c613cbf]1BEGIN;
2
3DROP TABLE IF EXISTS medical_record_allergies CASCADE;
4DROP TABLE IF EXISTS medical_record_symptoms CASCADE;
5DROP TABLE IF EXISTS medical_record_procedures CASCADE;
6DROP TABLE IF EXISTS medical_record_lab_results CASCADE;
7DROP TABLE IF EXISTS performed_lab_tests CASCADE;
8DROP TABLE IF EXISTS performed_procedures CASCADE;
9DROP TABLE IF EXISTS medical_report_lab_results CASCADE;
10DROP TABLE IF EXISTS prescription_medical_records CASCADE;
11DROP TABLE IF EXISTS diagnosis_medical_records CASCADE;
12DROP TABLE IF EXISTS billing_lab_tests CASCADE;
13DROP TABLE IF EXISTS billing_procedures CASCADE;
14DROP TABLE IF EXISTS department_procedures CASCADE;
15DROP TABLE IF EXISTS specialization_procedures CASCADE;
16DROP TABLE IF EXISTS diagnosis_symptoms CASCADE;
17DROP TABLE IF EXISTS patient_symptoms CASCADE;
18DROP TABLE IF EXISTS allergy_prescription_restrictions CASCADE;
19DROP TABLE IF EXISTS patient_allergies CASCADE;
20DROP TABLE IF EXISTS symptoms CASCADE;
21DROP TABLE IF EXISTS allergies CASCADE;
22
23DROP TABLE IF EXISTS billing CASCADE;
24DROP TABLE IF EXISTS medical_report CASCADE;
25DROP TABLE IF EXISTS referrals CASCADE;
26DROP TABLE IF EXISTS medical_records CASCADE;
27DROP TABLE IF EXISTS lab_results CASCADE;
28DROP TABLE IF EXISTS lab_tests CASCADE;
29DROP TABLE IF EXISTS prescription_restriction CASCADE;
30DROP TABLE IF EXISTS prescriptions CASCADE;
31DROP TABLE IF EXISTS procedure_results CASCADE;
32DROP TABLE IF EXISTS procedures CASCADE;
33DROP TABLE IF EXISTS diagnosis CASCADE;
34DROP TABLE IF EXISTS appointments CASCADE;
35DROP TABLE IF EXISTS lab_technician CASCADE;
36DROP TABLE IF EXISTS admin CASCADE;
37DROP TABLE IF EXISTS patients CASCADE;
38DROP TABLE IF EXISTS doctors CASCADE;
39DROP TABLE IF EXISTS departments CASCADE;
40DROP TABLE IF EXISTS doctor_specialization CASCADE;
41DROP TABLE IF EXISTS doctor_level CASCADE;
[48d2bed]42DROP TABLE IF EXISTS users CASCADE;
43
[c613cbf]44
[48d2bed]45-- USERS & ROLES ---------------------------------------------------------
46
47CREATE TABLE users (
48 user_id SERIAL PRIMARY KEY,
49 username VARCHAR(255) NOT NULL UNIQUE,
50 password VARCHAR(255) NOT NULL,
51 role VARCHAR(50) NOT NULL,
52 first_name VARCHAR(100),
53 last_name VARCHAR(100),
54 is_active BOOLEAN DEFAULT true
55);
[c613cbf]56
57
[48d2bed]58-- STAFF -------------------------------------------------------------------
[c613cbf]59
60CREATE TABLE doctor_level (
[48d2bed]61 level_id BIGINT,
62 level TEXT NOT NULL,
[c613cbf]63
[48d2bed]64 CONSTRAINT doctor_level_PK
65 PRIMARY KEY (level_id),
[c613cbf]66
[48d2bed]67 CONSTRAINT doctor_level_level_UQ
68 UNIQUE (level)
[c613cbf]69);
70
71CREATE TABLE doctor_specialization (
[48d2bed]72 specialization_id BIGINT,
73 specialization_name TEXT NOT NULL,
[c613cbf]74
[48d2bed]75 CONSTRAINT doctor_specialization_PK
76 PRIMARY KEY (specialization_id),
[c613cbf]77
[48d2bed]78 CONSTRAINT doctor_specialization_name_UQ
79 UNIQUE (specialization_name)
[c613cbf]80);
81
82
83CREATE TABLE departments (
[48d2bed]84 department_id BIGINT,
85 department_name TEXT NOT NULL,
[c613cbf]86
[48d2bed]87 CONSTRAINT departments_PK
88 PRIMARY KEY (department_id),
[c613cbf]89
[48d2bed]90 CONSTRAINT departments_name_UQ
91 UNIQUE (department_name)
[c613cbf]92);
93
94CREATE TABLE doctors (
[48d2bed]95 doctor_id BIGINT,
[c613cbf]96
[48d2bed]97 first_name TEXT NOT NULL,
98 last_name TEXT NOT NULL,
[c613cbf]99
[48d2bed]100 email_address TEXT NOT NULL,
[c613cbf]101
[48d2bed]102 level_id BIGINT NOT NULL,
103 specialization_id BIGINT NOT NULL,
104 department_id BIGINT NOT NULL,
[c613cbf]105
[48d2bed]106 user_id BIGINT NOT NULL,
[c613cbf]107
[48d2bed]108 CONSTRAINT doctors_PK
109 PRIMARY KEY (doctor_id),
[c613cbf]110
[48d2bed]111 CONSTRAINT doctors_email_UQ
112 UNIQUE (email_address),
[c613cbf]113
[48d2bed]114 CONSTRAINT doctors_email_chk
115 CHECK (email_address LIKE '%@%'),
[c613cbf]116
[48d2bed]117 CONSTRAINT doctors_user_UQ
118 UNIQUE (user_id),
[c613cbf]119
[48d2bed]120 CONSTRAINT doctors_level_FK
121 FOREIGN KEY (level_id)
122 REFERENCES doctor_level(level_id)
123 ON DELETE RESTRICT,
[c613cbf]124
[48d2bed]125 CONSTRAINT doctors_specialization_FK
126 FOREIGN KEY (specialization_id)
127 REFERENCES doctor_specialization(specialization_id)
128 ON DELETE RESTRICT,
[c613cbf]129
[48d2bed]130 CONSTRAINT doctors_department_FK
131 FOREIGN KEY (department_id)
132 REFERENCES departments(department_id)
133 ON DELETE RESTRICT,
[c613cbf]134
[48d2bed]135 CONSTRAINT doctors_user_FK
136 FOREIGN KEY (user_id)
137 REFERENCES users(user_id)
138 ON DELETE RESTRICT
139);
[c613cbf]140
[48d2bed]141CREATE TABLE admin (
142 admin_id BIGINT,
[c613cbf]143
[48d2bed]144 username TEXT NOT NULL,
145 name TEXT NOT NULL,
146 lastname TEXT NOT NULL,
[c613cbf]147
[48d2bed]148 email TEXT NOT NULL,
[c613cbf]149
[48d2bed]150 user_id BIGINT NOT NULL,
[c613cbf]151
[48d2bed]152 CONSTRAINT admin_PK
153 PRIMARY KEY (admin_id),
[c613cbf]154
[48d2bed]155 CONSTRAINT admin_username_UQ
156 UNIQUE (username),
[c613cbf]157
[48d2bed]158 CONSTRAINT admin_email_UQ
159 UNIQUE (email),
[c613cbf]160
[48d2bed]161 CONSTRAINT admin_email_chk
162 CHECK (email LIKE '%@adminmedora%'),
[c613cbf]163
[48d2bed]164 CONSTRAINT admin_user_UQ
165 UNIQUE (user_id),
[c613cbf]166
[48d2bed]167 CONSTRAINT admin_user_FK
168 FOREIGN KEY (user_id)
169 REFERENCES users(user_id)
170 ON DELETE RESTRICT
171);
[c613cbf]172
[48d2bed]173CREATE TABLE lab_technician (
174 technician_id BIGINT,
[c613cbf]175
[48d2bed]176 username TEXT NOT NULL,
177 name TEXT NOT NULL,
178 lastname TEXT NOT NULL,
[c613cbf]179
[48d2bed]180 email TEXT NOT NULL,
[c613cbf]181
[48d2bed]182 user_id BIGINT NOT NULL,
[c613cbf]183
[48d2bed]184 CONSTRAINT lab_technician_PK
185 PRIMARY KEY (technician_id),
[c613cbf]186
[48d2bed]187 CONSTRAINT lab_technician_username_UQ
188 UNIQUE (username),
[c613cbf]189
[48d2bed]190 CONSTRAINT lab_technician_email_UQ
191 UNIQUE (email),
[c613cbf]192
[48d2bed]193 CONSTRAINT lab_technician_email_chk
194 CHECK (email LIKE '%@labmedora%'),
[c613cbf]195
[48d2bed]196 CONSTRAINT lab_technician_user_UQ
197 UNIQUE (user_id),
[c613cbf]198
[48d2bed]199 CONSTRAINT lab_technician_user_FK
200 FOREIGN KEY (user_id)
201 REFERENCES users(user_id)
202 ON DELETE RESTRICT
[c613cbf]203);
204
205
[48d2bed]206-- PATIENTS ------------------------------------------------------------------
[c613cbf]207
[48d2bed]208CREATE TABLE patients (
209 patient_id BIGINT,
[c613cbf]210
[48d2bed]211 first_name TEXT NOT NULL,
212 last_name TEXT NOT NULL,
[c613cbf]213
[48d2bed]214 email_address TEXT,
215 date_of_birth DATE NOT NULL,
[c613cbf]216
[48d2bed]217 blood_type TEXT,
218 gender TEXT,
[c613cbf]219
[48d2bed]220 phone_number TEXT,
221 embg TEXT NOT NULL,
[c613cbf]222
[48d2bed]223 user_id BIGINT NOT NULL,
[c613cbf]224
[48d2bed]225 CONSTRAINT patients_PK
226 PRIMARY KEY (patient_id),
[c613cbf]227
[48d2bed]228 CONSTRAINT patients_email_UQ
229 UNIQUE (email_address),
[c613cbf]230
[48d2bed]231 CONSTRAINT patients_embg_UQ
232 UNIQUE (embg),
[c613cbf]233
[48d2bed]234 CONSTRAINT patients_embg_format_chk
235 CHECK (embg ~ '^[0-9]{13}$'),
[c613cbf]236
[48d2bed]237 CONSTRAINT patients_gender_chk
238 CHECK (gender IN ('MALE', 'FEMALE')),
[c613cbf]239
[48d2bed]240 CONSTRAINT patients_blood_type_chk
241 CHECK (
242 blood_type IN (
243 'A+', 'A-',
244 'B+', 'B-',
245 'AB+', 'AB-',
246 'O+', 'O-'
247 )
248 ),
[c613cbf]249
[48d2bed]250 CONSTRAINT patients_user_UQ
251 UNIQUE (user_id),
[c613cbf]252
[48d2bed]253 CONSTRAINT patients_user_FK
254 FOREIGN KEY (user_id)
255 REFERENCES users(user_id)
256 ON DELETE RESTRICT
[c613cbf]257);
258
259
[48d2bed]260-- APPOINTMENTS --------------------------------------------------------------
[c613cbf]261
[48d2bed]262CREATE TABLE appointments (
263 appointment_id BIGINT,
[c613cbf]264
[48d2bed]265 appointment_date DATE NOT NULL,
266 appointment_time TIME NOT NULL,
[c613cbf]267
[48d2bed]268 status TEXT NOT NULL,
[c613cbf]269
[48d2bed]270 patient_id BIGINT NOT NULL,
271 doctor_id BIGINT NOT NULL,
[c613cbf]272
[48d2bed]273 CONSTRAINT appointments_PK
274 PRIMARY KEY (appointment_id),
[c613cbf]275
[48d2bed]276 CONSTRAINT appointments_status_chk
277 CHECK (
278 status IN (
279 'SCHEDULED',
280 'COMPLETED',
281 'CANCELLED',
282 'IN_PROGRESS'
283 )
284 ),
[c613cbf]285
[48d2bed]286 CONSTRAINT appointments_patient_FK
287 FOREIGN KEY (patient_id)
288 REFERENCES patients(patient_id)
289 ON DELETE RESTRICT,
[c613cbf]290
[48d2bed]291 CONSTRAINT appointments_doctor_FK
292 FOREIGN KEY (doctor_id)
293 REFERENCES doctors(doctor_id)
294 ON DELETE RESTRICT
295);
[c613cbf]296
297
[48d2bed]298-- CLINICAL ENTITIES -----------------------------------------------------
[c613cbf]299
[48d2bed]300CREATE TABLE allergies (
301 allergy_id BIGINT,
[c613cbf]302
[48d2bed]303 name TEXT NOT NULL,
304 allergy_severity TEXT NOT NULL,
[c613cbf]305
[48d2bed]306 CONSTRAINT allergies_PK
307 PRIMARY KEY (allergy_id),
[c613cbf]308
[48d2bed]309 CONSTRAINT allergies_name_UQ
310 UNIQUE (name),
[c613cbf]311
[48d2bed]312 CONSTRAINT allergies_name_chk
313 CHECK (length(trim(name)) > 0),
[c613cbf]314
[48d2bed]315 CONSTRAINT allergies_severity_chk
316 CHECK (allergy_severity IN ('LOW', 'MEDIUM', 'HIGH', 'CRITICAL'))
317);
[c613cbf]318
[48d2bed]319CREATE TABLE symptoms (
320 symptom_id BIGINT,
[c613cbf]321
[48d2bed]322 name TEXT NOT NULL,
323 description TEXT,
[c613cbf]324
[48d2bed]325 CONSTRAINT symptoms_PK
326 PRIMARY KEY (symptom_id),
[c613cbf]327
[48d2bed]328 CONSTRAINT symptoms_name_UQ
329 UNIQUE (name),
[c613cbf]330
[48d2bed]331 CONSTRAINT symptoms_name_chk
332 CHECK (length(trim(name)) > 0),
[c613cbf]333
[48d2bed]334 CONSTRAINT symptoms_description_chk
335 CHECK (
336 description IS NULL
337 OR length(trim(description)) > 0
338 )
[c613cbf]339);
340
[48d2bed]341CREATE TABLE diagnosis (
342 diagnosis_id BIGINT,
[c613cbf]343
[48d2bed]344 name TEXT NOT NULL,
345 description TEXT,
[c613cbf]346
[48d2bed]347 patient_id BIGINT NOT NULL,
348 doctor_id BIGINT NOT NULL,
[c613cbf]349
[48d2bed]350 CONSTRAINT diagnosis_PK
351 PRIMARY KEY (diagnosis_id),
[c613cbf]352
[48d2bed]353 CONSTRAINT diagnosis_patient_FK
354 FOREIGN KEY (patient_id)
355 REFERENCES patients(patient_id)
356 ON DELETE RESTRICT,
[c613cbf]357
[48d2bed]358 CONSTRAINT diagnosis_doctor_FK
359 FOREIGN KEY (doctor_id)
360 REFERENCES doctors(doctor_id)
361 ON DELETE RESTRICT
[c613cbf]362);
363
[48d2bed]364CREATE TABLE diagnosis_symptoms (
365 diagnosis_id BIGINT NOT NULL,
366 symptom_id BIGINT NOT NULL,
[c613cbf]367
[48d2bed]368 CONSTRAINT diagnosis_symptoms_PK
369 PRIMARY KEY (diagnosis_id, symptom_id),
[c613cbf]370
[48d2bed]371 CONSTRAINT diagnosis_symptoms_diagnosis_FK
372 FOREIGN KEY (diagnosis_id)
373 REFERENCES diagnosis(diagnosis_id)
374 ON DELETE RESTRICT,
[c613cbf]375
[48d2bed]376 CONSTRAINT diagnosis_symptoms_symptom_FK
377 FOREIGN KEY (symptom_id)
378 REFERENCES symptoms(symptom_id)
379 ON DELETE RESTRICT
380);
[c613cbf]381
382
[48d2bed]383-- PROCEDURES --------------------------------------------------------------
[c613cbf]384
[48d2bed]385CREATE TABLE procedures (
386 procedure_id BIGINT,
[c613cbf]387
[48d2bed]388 procedure_type TEXT NOT NULL,
389 procedure_date DATE NOT NULL,
[c613cbf]390
[48d2bed]391 description TEXT,
392 cost DECIMAL NOT NULL,
[c613cbf]393
[48d2bed]394 doctor_id BIGINT NOT NULL,
[c613cbf]395
[48d2bed]396 CONSTRAINT procedures_PK
397 PRIMARY KEY (procedure_id),
[c613cbf]398
[48d2bed]399 CONSTRAINT procedures_cost_chk
400 CHECK (cost >= 0),
[c613cbf]401
[48d2bed]402 CONSTRAINT procedures_type_chk
403 CHECK (length(trim(procedure_type)) > 0),
[c613cbf]404
[48d2bed]405 CONSTRAINT procedures_doctor_FK
406 FOREIGN KEY (doctor_id)
407 REFERENCES doctors(doctor_id)
408 ON DELETE RESTRICT
[c613cbf]409);
410
[48d2bed]411CREATE TABLE procedure_results (
412 result_id BIGINT,
[c613cbf]413
[48d2bed]414 result_description TEXT,
415 result_date DATE NOT NULL,
[c613cbf]416
[48d2bed]417 procedure_id BIGINT NOT NULL,
[c613cbf]418
[48d2bed]419 CONSTRAINT procedure_results_PK
420 PRIMARY KEY (result_id),
[c613cbf]421
[48d2bed]422 CONSTRAINT procedure_results_description_chk
423 CHECK (
424 result_description IS NULL
425 OR length(trim(result_description)) > 0
426 ),
[c613cbf]427
[48d2bed]428 CONSTRAINT procedure_results_procedure_FK
429 FOREIGN KEY (procedure_id)
430 REFERENCES procedures(procedure_id)
431 ON DELETE RESTRICT
432);
[c613cbf]433
[48d2bed]434CREATE TABLE specialization_procedures (
435 specialization_id BIGINT NOT NULL,
436 procedure_id BIGINT NOT NULL,
[c613cbf]437
[48d2bed]438 CONSTRAINT specialization_procedures_PK
439 PRIMARY KEY (specialization_id, procedure_id),
[c613cbf]440
[48d2bed]441 CONSTRAINT specialization_procedures_specialization_FK
442 FOREIGN KEY (specialization_id)
443 REFERENCES doctor_specialization(specialization_id)
444 ON DELETE RESTRICT,
[c613cbf]445
[48d2bed]446 CONSTRAINT specialization_procedures_procedure_FK
447 FOREIGN KEY (procedure_id)
448 REFERENCES procedures(procedure_id)
449 ON DELETE RESTRICT
450);
[c613cbf]451
[48d2bed]452CREATE TABLE department_procedures (
453 department_id BIGINT NOT NULL,
454 procedure_id BIGINT NOT NULL,
455
456 CONSTRAINT department_procedures_PK
457 PRIMARY KEY (department_id, procedure_id),
[c613cbf]458
[48d2bed]459 CONSTRAINT department_procedures_department_FK
460 FOREIGN KEY (department_id)
461 REFERENCES departments(department_id)
462 ON DELETE RESTRICT,
[c613cbf]463
[48d2bed]464 CONSTRAINT department_procedures_procedure_FK
465 FOREIGN KEY (procedure_id)
466 REFERENCES procedures(procedure_id)
467 ON DELETE RESTRICT
[c613cbf]468);
469
470
[48d2bed]471-- LAB TESTS -----------------------------------------------------------------
[c613cbf]472
[48d2bed]473CREATE TABLE lab_tests (
474 test_id BIGINT,
[c613cbf]475
[48d2bed]476 test_name TEXT NOT NULL,
477 description TEXT,
478 cost DECIMAL NOT NULL,
[c613cbf]479
[48d2bed]480 CONSTRAINT lab_tests_PK
481 PRIMARY KEY (test_id),
[c613cbf]482
[48d2bed]483 CONSTRAINT lab_tests_cost_chk
484 CHECK (cost >= 0),
[c613cbf]485
[48d2bed]486 CONSTRAINT lab_tests_name_chk
487 CHECK (length(trim(test_name)) > 0)
[c613cbf]488);
489
[48d2bed]490CREATE TABLE lab_results (
491 result_id BIGINT,
[c613cbf]492
[48d2bed]493 results TEXT NOT NULL,
494 result_date DATE NOT NULL,
[c613cbf]495
[48d2bed]496 test_id BIGINT NOT NULL,
[c613cbf]497
[48d2bed]498 CONSTRAINT lab_results_PK
499 PRIMARY KEY (result_id),
[c613cbf]500
[48d2bed]501 CONSTRAINT lab_results_results_chk
502 CHECK (length(trim(results)) > 0),
[c613cbf]503
[48d2bed]504 CONSTRAINT lab_results_date_chk
505 CHECK (result_date <= CURRENT_DATE),
[c613cbf]506
[48d2bed]507 CONSTRAINT lab_results_test_FK
508 FOREIGN KEY (test_id)
509 REFERENCES lab_tests(test_id)
510 ON DELETE RESTRICT
[c613cbf]511);
512
513
[48d2bed]514-- PRESCRIPTIONS ---------------------------------------------------------
[c613cbf]515
[48d2bed]516CREATE TABLE prescriptions (
517 prescription_id BIGINT,
[c613cbf]518
[48d2bed]519 medication_name TEXT NOT NULL,
[c613cbf]520
[48d2bed]521 CONSTRAINT prescriptions_PK
522 PRIMARY KEY (prescription_id)
[c613cbf]523);
524
[48d2bed]525CREATE TABLE prescription_restriction (
526 restriction_id BIGINT,
[c613cbf]527
[48d2bed]528 description TEXT NOT NULL,
[c613cbf]529
[48d2bed]530 prescription_id BIGINT NOT NULL,
[c613cbf]531
[48d2bed]532 CONSTRAINT prescription_restriction_PK
533 PRIMARY KEY (restriction_id),
[c613cbf]534
[48d2bed]535 CONSTRAINT prescription_restriction_desc_chk
536 CHECK (length(trim(description)) > 0),
[c613cbf]537
[48d2bed]538 CONSTRAINT prescription_restriction_prescription_FK
539 FOREIGN KEY (prescription_id)
540 REFERENCES prescriptions(prescription_id)
541 ON DELETE RESTRICT
[c613cbf]542);
543
[48d2bed]544CREATE TABLE allergy_prescription_restrictions (
545 allergy_id BIGINT NOT NULL,
546 restriction_id BIGINT NOT NULL,
[c613cbf]547
[48d2bed]548 CONSTRAINT allergy_prescription_restrictions_PK
549 PRIMARY KEY (allergy_id, restriction_id),
[c613cbf]550
[48d2bed]551 CONSTRAINT allergy_prescription_restrictions_allergy_FK
552 FOREIGN KEY (allergy_id)
553 REFERENCES allergies(allergy_id)
554 ON DELETE RESTRICT,
[c613cbf]555
[48d2bed]556 CONSTRAINT allergy_prescription_restrictions_restriction_FK
557 FOREIGN KEY (restriction_id)
558 REFERENCES prescription_restriction(restriction_id)
559 ON DELETE RESTRICT
[c613cbf]560);
561
562
[48d2bed]563-- PATIENTS <-> ALLERGIES / SYMPTOMS -----------------------------------------
[c613cbf]564
[48d2bed]565CREATE TABLE patient_allergies (
566 patient_id BIGINT NOT NULL,
567 allergy_id BIGINT NOT NULL,
[c613cbf]568
[48d2bed]569 CONSTRAINT patient_allergies_PK
570 PRIMARY KEY (patient_id, allergy_id),
[c613cbf]571
[48d2bed]572 CONSTRAINT patient_allergies_patient_FK
573 FOREIGN KEY (patient_id)
574 REFERENCES patients(patient_id)
575 ON DELETE RESTRICT,
[c613cbf]576
[48d2bed]577 CONSTRAINT patient_allergies_allergy_FK
578 FOREIGN KEY (allergy_id)
579 REFERENCES allergies(allergy_id)
580 ON DELETE RESTRICT
[c613cbf]581);
582
583CREATE TABLE patient_symptoms (
[48d2bed]584 patient_id BIGINT NOT NULL,
585 symptom_id BIGINT NOT NULL,
[c613cbf]586
[48d2bed]587 CONSTRAINT patient_symptoms_PK
588 PRIMARY KEY (patient_id, symptom_id),
[c613cbf]589
[48d2bed]590 CONSTRAINT patient_symptoms_patient_FK
591 FOREIGN KEY (patient_id)
592 REFERENCES patients(patient_id)
593 ON DELETE RESTRICT,
[c613cbf]594
[48d2bed]595 CONSTRAINT patient_symptoms_symptom_FK
596 FOREIGN KEY (symptom_id)
597 REFERENCES symptoms(symptom_id)
598 ON DELETE RESTRICT
[c613cbf]599);
600
601
[48d2bed]602-- MEDICAL RECORDS -------------------------------------------------------
[c613cbf]603
[48d2bed]604CREATE TABLE medical_records (
605 record_id BIGINT PRIMARY KEY,
[c613cbf]606
[48d2bed]607 patient_id BIGINT NOT NULL,
[c613cbf]608
[48d2bed]609 FOREIGN KEY (patient_id)
610 REFERENCES patients(patient_id)
611 ON DELETE RESTRICT
[c613cbf]612);
613
[48d2bed]614CREATE TABLE diagnosis_medical_records (
615 diagnosis_id BIGINT NOT NULL,
616 record_id BIGINT NOT NULL,
[c613cbf]617
[48d2bed]618 CONSTRAINT diagnosis_medical_records_PK
619 PRIMARY KEY (diagnosis_id, record_id),
[c613cbf]620
[48d2bed]621 CONSTRAINT diagnosis_medical_records_diagnosis_FK
622 FOREIGN KEY (diagnosis_id)
623 REFERENCES diagnosis(diagnosis_id)
624 ON DELETE RESTRICT,
[c613cbf]625
[48d2bed]626 CONSTRAINT diagnosis_medical_records_record_FK
627 FOREIGN KEY (record_id)
628 REFERENCES medical_records(record_id)
629 ON DELETE RESTRICT
[c613cbf]630);
631
[48d2bed]632CREATE TABLE prescription_medical_records (
633 prescription_id BIGINT NOT NULL,
634 record_id BIGINT NOT NULL,
[c613cbf]635
[48d2bed]636 dosage TEXT NOT NULL,
637 frequency TEXT NOT NULL,
638 duration TEXT NOT NULL,
[c613cbf]639
[48d2bed]640 notes TEXT,
[c613cbf]641
[48d2bed]642 CONSTRAINT prescription_medical_records_PK
643 PRIMARY KEY (prescription_id, record_id),
[c613cbf]644
[48d2bed]645 CONSTRAINT prescription_medical_records_prescription_FK
646 FOREIGN KEY (prescription_id)
647 REFERENCES prescriptions(prescription_id)
648 ON DELETE RESTRICT,
[c613cbf]649
[48d2bed]650 CONSTRAINT prescription_medical_records_record_FK
651 FOREIGN KEY (record_id)
652 REFERENCES medical_records(record_id)
653 ON DELETE RESTRICT
[c613cbf]654);
655
[48d2bed]656CREATE TABLE medical_record_lab_results (
657 record_id BIGINT NOT NULL,
658 result_id BIGINT NOT NULL,
[c613cbf]659
[48d2bed]660 PRIMARY KEY (record_id, result_id),
[c613cbf]661
[48d2bed]662 FOREIGN KEY (record_id)
663 REFERENCES medical_records(record_id)
664 ON DELETE RESTRICT,
[c613cbf]665
[48d2bed]666 FOREIGN KEY (result_id)
667 REFERENCES lab_results(result_id)
668 ON DELETE RESTRICT
[c613cbf]669);
670
[48d2bed]671CREATE TABLE medical_record_procedures (
672 record_id BIGINT NOT NULL,
673 procedure_id BIGINT NOT NULL,
[c613cbf]674
[48d2bed]675 PRIMARY KEY (record_id, procedure_id),
[c613cbf]676
[48d2bed]677 FOREIGN KEY (record_id)
678 REFERENCES medical_records(record_id)
679 ON DELETE RESTRICT,
[c613cbf]680
[48d2bed]681 FOREIGN KEY (procedure_id)
682 REFERENCES procedures(procedure_id)
683 ON DELETE RESTRICT
[c613cbf]684);
685
[48d2bed]686CREATE TABLE medical_record_symptoms (
687 record_id BIGINT NOT NULL,
688 symptom_id BIGINT NOT NULL,
689 severity TEXT,
[c613cbf]690
[48d2bed]691 PRIMARY KEY (record_id, symptom_id),
[c613cbf]692
[48d2bed]693 FOREIGN KEY (record_id)
694 REFERENCES medical_records(record_id)
695 ON DELETE RESTRICT,
[c613cbf]696
[48d2bed]697 FOREIGN KEY (symptom_id)
698 REFERENCES symptoms(symptom_id)
699 ON DELETE RESTRICT
[c613cbf]700);
701
[48d2bed]702CREATE TABLE medical_record_allergies (
703 record_id BIGINT NOT NULL,
704 allergy_id BIGINT NOT NULL,
705 reaction TEXT,
706 severity TEXT,
[c613cbf]707
[48d2bed]708 PRIMARY KEY (record_id, allergy_id),
[c613cbf]709
[48d2bed]710 FOREIGN KEY (record_id)
711 REFERENCES medical_records(record_id)
712 ON DELETE RESTRICT,
[c613cbf]713
[48d2bed]714 FOREIGN KEY (allergy_id)
715 REFERENCES allergies(allergy_id)
716 ON DELETE RESTRICT
[c613cbf]717);
718
719
[48d2bed]720-- REPORTS & REFERRALS -----------------------------------------------------
[c613cbf]721
[48d2bed]722CREATE TABLE referrals (
723 referral_id BIGINT PRIMARY KEY,
[c613cbf]724
[48d2bed]725 reason TEXT NOT NULL,
726 referral_date DATE NOT NULL,
[c613cbf]727
[48d2bed]728 record_id BIGINT NOT NULL,
729 from_doctor_id BIGINT NOT NULL,
730 to_doctor_id BIGINT NOT NULL,
[c613cbf]731
[48d2bed]732 CONSTRAINT referrals_reason_chk
733 CHECK (length(trim(reason)) > 0),
[c613cbf]734
[48d2bed]735 FOREIGN KEY (record_id)
736 REFERENCES medical_records(record_id)
737 ON DELETE RESTRICT,
[c613cbf]738
[48d2bed]739 FOREIGN KEY (from_doctor_id)
740 REFERENCES doctors(doctor_id)
741 ON DELETE RESTRICT,
[c613cbf]742
[48d2bed]743 FOREIGN KEY (to_doctor_id)
744 REFERENCES doctors(doctor_id)
745 ON DELETE RESTRICT
746);
[c613cbf]747
[48d2bed]748CREATE TABLE medical_report (
749 report_id BIGINT PRIMARY KEY,
[c613cbf]750
[48d2bed]751 description TEXT NOT NULL,
752 report_date DATE NOT NULL,
[c613cbf]753
[48d2bed]754 record_id BIGINT NOT NULL,
755 doctor_id BIGINT NOT NULL,
[c613cbf]756
[48d2bed]757 FOREIGN KEY (record_id)
758 REFERENCES medical_records(record_id)
759 ON DELETE RESTRICT,
[c613cbf]760
[48d2bed]761 FOREIGN KEY (doctor_id)
762 REFERENCES doctors(doctor_id)
763 ON DELETE RESTRICT
764);
[c613cbf]765
766CREATE TABLE medical_report_lab_results (
[48d2bed]767 report_id BIGINT NOT NULL,
768 result_id BIGINT NOT NULL,
[c613cbf]769
[48d2bed]770 CONSTRAINT medical_report_lab_results_PK
771 PRIMARY KEY (report_id, result_id),
[c613cbf]772
[48d2bed]773 CONSTRAINT medical_report_lab_results_report_FK
774 FOREIGN KEY (report_id)
775 REFERENCES medical_report(report_id)
776 ON DELETE RESTRICT,
[c613cbf]777
[48d2bed]778 CONSTRAINT medical_report_lab_results_result_FK
779 FOREIGN KEY (result_id)
780 REFERENCES lab_results(result_id)
781 ON DELETE RESTRICT
[c613cbf]782);
783
784
[48d2bed]785-- PERFORMED PROCEDURES / LAB TESTS -----------------------------------------
[c613cbf]786
787CREATE TABLE performed_procedures (
[48d2bed]788 performed_id BIGINT,
[c613cbf]789
[48d2bed]790 procedure_id BIGINT NOT NULL,
791 doctor_id BIGINT NOT NULL,
792 patient_id BIGINT NOT NULL,
793 diagnosis_id BIGINT,
[c613cbf]794
[48d2bed]795 procedure_date DATE NOT NULL,
796 notes TEXT,
[c613cbf]797
[48d2bed]798 CONSTRAINT performed_procedures_PK
799 PRIMARY KEY (performed_id),
[c613cbf]800
[48d2bed]801 CONSTRAINT performed_procedures_procedure_FK
802 FOREIGN KEY (procedure_id)
803 REFERENCES procedures(procedure_id)
804 ON DELETE RESTRICT,
[c613cbf]805
[48d2bed]806 CONSTRAINT performed_procedures_doctor_FK
807 FOREIGN KEY (doctor_id)
808 REFERENCES doctors(doctor_id)
809 ON DELETE RESTRICT,
[c613cbf]810
[48d2bed]811 CONSTRAINT performed_procedures_patient_FK
812 FOREIGN KEY (patient_id)
813 REFERENCES patients(patient_id)
814 ON DELETE RESTRICT,
[c613cbf]815
[48d2bed]816 CONSTRAINT performed_procedures_diagnosis_FK
817 FOREIGN KEY (diagnosis_id)
818 REFERENCES diagnosis(diagnosis_id)
819 ON DELETE RESTRICT
[c613cbf]820);
821
822CREATE TABLE performed_lab_tests (
[48d2bed]823 performed_test_id BIGINT,
[c613cbf]824
[48d2bed]825 test_id BIGINT NOT NULL,
826 patient_id BIGINT NOT NULL,
827 doctor_id BIGINT NOT NULL,
828 technician_id BIGINT NOT NULL,
[c613cbf]829
[48d2bed]830 test_date DATE NOT NULL,
831 notes TEXT,
832 created_at TIMESTAMP DEFAULT now(),
[c613cbf]833
[48d2bed]834 CONSTRAINT performed_lab_tests_PK
835 PRIMARY KEY (performed_test_id),
[c613cbf]836
[48d2bed]837 CONSTRAINT performed_lab_tests_test_FK
838 FOREIGN KEY (test_id)
839 REFERENCES lab_tests(test_id)
840 ON DELETE RESTRICT,
[c613cbf]841
[48d2bed]842 CONSTRAINT performed_lab_tests_patient_FK
843 FOREIGN KEY (patient_id)
844 REFERENCES patients(patient_id)
845 ON DELETE RESTRICT,
[c613cbf]846
[48d2bed]847 CONSTRAINT performed_lab_tests_doctor_FK
848 FOREIGN KEY (doctor_id)
849 REFERENCES doctors(doctor_id)
850 ON DELETE RESTRICT,
[c613cbf]851
[48d2bed]852 CONSTRAINT performed_lab_tests_technician_FK
853 FOREIGN KEY (technician_id)
854 REFERENCES lab_technician(technician_id)
855 ON DELETE RESTRICT
[c613cbf]856);
857
858
[48d2bed]859-- BILLING -------------------------------------------------------------------
[c613cbf]860
[48d2bed]861CREATE TABLE billing (
862 bill_id BIGINT PRIMARY KEY,
[c613cbf]863
[48d2bed]864 total_cost DECIMAL NOT NULL,
[c613cbf]865
[48d2bed]866 payment_status TEXT NOT NULL,
867 payment_date DATE,
[c613cbf]868
[48d2bed]869 created_at TIMESTAMP DEFAULT now(),
[c613cbf]870
[48d2bed]871 record_id BIGINT NOT NULL,
872 admin_id BIGINT NOT NULL,
[c613cbf]873
[48d2bed]874 CONSTRAINT billing_cost_chk CHECK (total_cost >= 0),
875 CONSTRAINT billing_status_chk
876 CHECK (payment_status IN ('PENDING', 'PAID', 'CANCELLED')),
[c613cbf]877
[48d2bed]878 FOREIGN KEY (record_id)
879 REFERENCES medical_records(record_id)
880 ON DELETE RESTRICT,
[c613cbf]881
[48d2bed]882 FOREIGN KEY (admin_id)
883 REFERENCES admin(admin_id)
884 ON DELETE RESTRICT
[c613cbf]885);
886
[48d2bed]887CREATE TABLE billing_procedures (
888 bill_id BIGINT NOT NULL,
889 procedure_id BIGINT NOT NULL,
[c613cbf]890
[48d2bed]891 CONSTRAINT billing_procedures_PK
892 PRIMARY KEY (bill_id, procedure_id),
[c613cbf]893
[48d2bed]894 CONSTRAINT billing_procedures_bill_FK
895 FOREIGN KEY (bill_id)
896 REFERENCES billing(bill_id)
897 ON DELETE RESTRICT,
[c613cbf]898
[48d2bed]899 CONSTRAINT billing_procedures_procedure_FK
900 FOREIGN KEY (procedure_id)
901 REFERENCES procedures(procedure_id)
902 ON DELETE RESTRICT
[c613cbf]903);
904
[48d2bed]905CREATE TABLE billing_lab_tests (
906 bill_id BIGINT NOT NULL,
907 test_id BIGINT NOT NULL,
[c613cbf]908
[48d2bed]909 CONSTRAINT billing_lab_tests_PK
910 PRIMARY KEY (bill_id, test_id),
[c613cbf]911
[48d2bed]912 CONSTRAINT billing_lab_tests_bill_FK
913 FOREIGN KEY (bill_id)
914 REFERENCES billing(bill_id)
915 ON DELETE RESTRICT,
[c613cbf]916
[48d2bed]917 CONSTRAINT billing_lab_tests_test_FK
918 FOREIGN KEY (test_id)
919 REFERENCES lab_tests(test_id)
920 ON DELETE RESTRICT
[c613cbf]921);
922
923COMMIT;
Note: See TracBrowser for help on using the repository browser.