LogicalAndPhysicalDesign: ddl.sql

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