source: sql/ddl.sql@ 48d2bed

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

Remote database setup, fixed models and application properties

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