Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
CREATE TABLE departments (
department_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
department_name VARCHAR2(100) NOT NULL,
floor_no NUMBER,
status VARCHAR2(20) DEFAULT 'Active' NOT NULL,

CONSTRAINT pk_departments
PRIMARY KEY (department_id),

CONSTRAINT uq_department_name
UNIQUE (department_name),

CONSTRAINT chk_department_status
CHECK (status IN ('Active', 'Inactive'))
);


CREATE TABLE doctor_specialties (
specialty_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
specialty_name VARCHAR2(100) NOT NULL,
status VARCHAR2(20) DEFAULT 'Active' NOT NULL,

CONSTRAINT pk_doctor_specialties
PRIMARY KEY (specialty_id),

CONSTRAINT uq_specialty_name
UNIQUE (specialty_name),

CONSTRAINT chk_specialty_status
CHECK (status IN ('Active', 'Inactive'))
);


CREATE TABLE medicine_categories (
category_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
category_name VARCHAR2(100) NOT NULL,
status VARCHAR2(20) DEFAULT 'Active' NOT NULL,

CONSTRAINT pk_medicine_categories
PRIMARY KEY (category_id),

CONSTRAINT uq_medicine_category_name
UNIQUE (category_name),

CONSTRAINT chk_medicine_category_status
CHECK (status IN ('Active', 'Inactive'))
);


CREATE TABLE appointment_statuses (
status_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
status_name VARCHAR2(50) NOT NULL,

CONSTRAINT pk_appointment_statuses
PRIMARY KEY (status_id),

CONSTRAINT uq_appointment_status_name
UNIQUE (status_name)
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
CREATE TABLE patients (
patient_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
civil_id VARCHAR2(30) NOT NULL,
full_name VARCHAR2(150) NOT NULL,
gender VARCHAR2(10) NOT NULL,
date_of_birth DATE NOT NULL,
mobile_no VARCHAR2(20) NOT NULL,
email VARCHAR2(150),
blood_group VARCHAR2(5),
address VARCHAR2(500),
emergency_contact_name VARCHAR2(150),
emergency_contact_no VARCHAR2(20),
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,

CONSTRAINT pk_patients
PRIMARY KEY (patient_id),

CONSTRAINT uq_patient_civil_id
UNIQUE (civil_id),

CONSTRAINT chk_patient_gender
CHECK (gender IN ('Male', 'Female')),

CONSTRAINT chk_patient_blood_group
CHECK (
blood_group IN (
'A+', 'A-', 'B+', 'B-',
'O+', 'O-', 'AB+', 'AB-'
)
)
);
--------------------------------------------------------------------------------------------------
CREATE TABLE doctors (
doctor_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
full_name VARCHAR2(150) NOT NULL,
department_id NUMBER NOT NULL,
specialty_id NUMBER NOT NULL,
mobile_no VARCHAR2(20),
email VARCHAR2(150),
consultation_fee NUMBER(10,2) DEFAULT 0 NOT NULL,
status VARCHAR2(20) DEFAULT 'Active' NOT NULL,

CONSTRAINT pk_doctors
PRIMARY KEY (doctor_id),

CONSTRAINT fk_doctor_department
FOREIGN KEY (department_id)
REFERENCES departments(department_id),

CONSTRAINT fk_doctor_specialty
FOREIGN KEY (specialty_id)
REFERENCES doctor_specialties(specialty_id),

CONSTRAINT chk_doctor_fee
CHECK (consultation_fee >= 0),

CONSTRAINT chk_doctor_status
CHECK (status IN ('Active', 'Inactive'))
);
--------------------------------------------------------------------------------------------------
CREATE TABLE medicines (
medicine_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
medicine_name VARCHAR2(150) NOT NULL,
category_id NUMBER NOT NULL,
unit VARCHAR2(50) NOT NULL,
current_stock NUMBER DEFAULT 0 NOT NULL,
reorder_level NUMBER DEFAULT 0 NOT NULL,
status VARCHAR2(20) DEFAULT 'Active' NOT NULL,

CONSTRAINT pk_medicines
PRIMARY KEY (medicine_id),

CONSTRAINT fk_medicine_category
FOREIGN KEY (category_id)
REFERENCES medicine_categories(category_id),

CONSTRAINT chk_medicine_stock
CHECK (current_stock >= 0),

CONSTRAINT chk_medicine_reorder
CHECK (reorder_level >= 0),

CONSTRAINT chk_medicine_status
CHECK (status IN ('Active', 'Inactive'))
);
--------------------------------------------------------------------------------------------------
CREATE TABLE appointments (
appointment_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
patient_id NUMBER NOT NULL,
doctor_id NUMBER NOT NULL,
appointment_date DATE NOT NULL,
appointment_time VARCHAR2(20) NOT NULL,
status_id NUMBER NOT NULL,
reason_for_visit VARCHAR2(500),
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,

CONSTRAINT pk_appointments
PRIMARY KEY (appointment_id),

CONSTRAINT fk_appointment_patient
FOREIGN KEY (patient_id)
REFERENCES patients(patient_id),

CONSTRAINT fk_appointment_doctor
FOREIGN KEY (doctor_id)
REFERENCES doctors(doctor_id),

CONSTRAINT fk_appointment_status
FOREIGN KEY (status_id)
REFERENCES appointment_statuses(status_id)
);
--------------------------------------------------------------------------------------------------
CREATE TABLE patient_visits (
visit_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
appointment_id NUMBER NOT NULL,
patient_id NUMBER NOT NULL,
doctor_id NUMBER NOT NULL,
visit_date DATE DEFAULT SYSDATE NOT NULL,
symptoms VARCHAR2(1000),
diagnosis VARCHAR2(1000),
notes VARCHAR2(2000),
follow_up_date DATE,

CONSTRAINT pk_patient_visits
PRIMARY KEY (visit_id),

CONSTRAINT uq_visit_appointment
UNIQUE (appointment_id),

CONSTRAINT fk_visit_appointment
FOREIGN KEY (appointment_id)
REFERENCES appointments(appointment_id),

CONSTRAINT fk_visit_patient
FOREIGN KEY (patient_id)
REFERENCES patients(patient_id),

CONSTRAINT fk_visit_doctor
FOREIGN KEY (doctor_id)
REFERENCES doctors(doctor_id)
);
--------------------------------------------------------------------------------------------------
CREATE TABLE prescriptions (
prescription_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
visit_id NUMBER NOT NULL,
patient_id NUMBER NOT NULL,
doctor_id NUMBER NOT NULL,
prescription_date DATE DEFAULT SYSDATE NOT NULL,
notes VARCHAR2(1000),

CONSTRAINT pk_prescriptions
PRIMARY KEY (prescription_id),

CONSTRAINT uq_prescription_visit
UNIQUE (visit_id),

CONSTRAINT fk_prescription_visit
FOREIGN KEY (visit_id)
REFERENCES patient_visits(visit_id),

CONSTRAINT fk_prescription_patient
FOREIGN KEY (patient_id)
REFERENCES patients(patient_id),

CONSTRAINT fk_prescription_doctor
FOREIGN KEY (doctor_id)
REFERENCES doctors(doctor_id)
);
--------------------------------------------------------------------------------------------------
CREATE TABLE prescription_items (
prescription_item_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
prescription_id NUMBER NOT NULL,
medicine_id NUMBER NOT NULL,
dosage VARCHAR2(100) NOT NULL,
frequency VARCHAR2(100) NOT NULL,
duration_days NUMBER NOT NULL,
instructions VARCHAR2(500),

CONSTRAINT pk_prescription_items
PRIMARY KEY (prescription_item_id),

CONSTRAINT fk_item_prescription
FOREIGN KEY (prescription_id)
REFERENCES prescriptions(prescription_id)
ON DELETE CASCADE,

CONSTRAINT fk_item_medicine
FOREIGN KEY (medicine_id)
REFERENCES medicines(medicine_id),

CONSTRAINT chk_item_duration
CHECK (duration_days > 0)
);
--------------------------------------------------------------------------------------------------
CREATE TABLE rooms (
room_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
room_no VARCHAR2(20) NOT NULL,
room_type VARCHAR2(30) NOT NULL,
daily_rate NUMBER(10,2) DEFAULT 0 NOT NULL,
status VARCHAR2(20) DEFAULT 'Available' NOT NULL,

CONSTRAINT pk_rooms
PRIMARY KEY (room_id),

CONSTRAINT uq_room_no
UNIQUE (room_no),

CONSTRAINT chk_room_type
CHECK (room_type IN ('General', 'Private', 'ICU')),

CONSTRAINT chk_room_rate
CHECK (daily_rate >= 0),

CONSTRAINT chk_room_status
CHECK (status IN ('Available', 'Occupied', 'Maintenance'))
);
--------------------------------------------------------------------------------------------------
CREATE TABLE admissions (
admission_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
patient_id NUMBER NOT NULL,
doctor_id NUMBER NOT NULL,
room_id NUMBER NOT NULL,
admission_date DATE DEFAULT SYSDATE NOT NULL,
discharge_date DATE,
admission_reason VARCHAR2(1000) NOT NULL,
status VARCHAR2(20) DEFAULT 'Admitted' NOT NULL,

CONSTRAINT pk_admissions
PRIMARY KEY (admission_id),

CONSTRAINT fk_admission_patient
FOREIGN KEY (patient_id)
REFERENCES patients(patient_id),

CONSTRAINT fk_admission_doctor
FOREIGN KEY (doctor_id)
REFERENCES doctors(doctor_id),

CONSTRAINT fk_admission_room
FOREIGN KEY (room_id)
REFERENCES rooms(room_id),

CONSTRAINT chk_admission_status
CHECK (status IN ('Admitted', 'Discharged')),

CONSTRAINT chk_discharge_date
CHECK (
status = 'Admitted'
OR discharge_date IS NOT NULL
)
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
INSERT INTO departments (department_name, floor_no, status)
VALUES ('Cardiology', 2, 'Active');

INSERT INTO departments (department_name, floor_no, status)
VALUES ('Pediatrics', 3, 'Active');

INSERT INTO departments (department_name, floor_no, status)
VALUES ('Emergency', 1, 'Active');

INSERT INTO departments (department_name, floor_no, status)
VALUES ('Surgery', 4, 'Active');

INSERT INTO departments (department_name, floor_no, status)
VALUES ('Internal Medicine', 2, 'Active');

---------------------------------------------------------------------

INSERT INTO doctor_specialties (specialty_name, status)
VALUES ('Cardiologist', 'Active');

INSERT INTO doctor_specialties (specialty_name, status)
VALUES ('Pediatrician', 'Active');

INSERT INTO doctor_specialties (specialty_name, status)
VALUES ('Emergency Physician', 'Active');

INSERT INTO doctor_specialties (specialty_name, status)
VALUES ('Surgeon', 'Active');

INSERT INTO doctor_specialties (specialty_name, status)
VALUES ('Internal Medicine Specialist', 'Active');

---------------------------------------------------------------------

INSERT INTO medicine_categories (category_name, status)
VALUES ('Antibiotic', 'Active');

INSERT INTO medicine_categories (category_name, status)
VALUES ('Painkiller', 'Active');

INSERT INTO medicine_categories (category_name, status)
VALUES ('Diabetes', 'Active');

INSERT INTO medicine_categories (category_name, status)
VALUES ('Cardiovascular', 'Active');

INSERT INTO medicine_categories (category_name, status)
VALUES ('Vitamins', 'Active');

---------------------------------------------------------------------

INSERT INTO appointment_statuses (status_name)
VALUES ('Scheduled');

INSERT INTO appointment_statuses (status_name)
VALUES ('Completed');

INSERT INTO appointment_statuses (status_name)
VALUES ('Cancelled');

INSERT INTO appointment_statuses (status_name)
VALUES ('No Show');

---------------------------------------------------------------------

COMMIT;
Loading
Loading