-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTableCreation.sql
More file actions
178 lines (133 loc) · 4.77 KB
/
Copy pathTableCreation.sql
File metadata and controls
178 lines (133 loc) · 4.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
--CLEANING UP EVERYTHING:
/*
EDITING A FEW THINGS:
1. REMOVING THE CYCLIC CONNECTION BETWEEN APPOINTMENTS, PATIENTS AND BILLING, MEDICAL RECORDS
2. DOCTORS ARE A MEMBER OF STAFFS THEIR IDS SHOULD ALSO BE IN STAFF TABLE
NOTE FOR FUTURE:
1. PRESCRIPTION'S DATA HAVE TO BE IN COMMAS OR ANY DELIMITER SO THAT IT CAN BE EXTRACTED COMPARED IN INVENTORY AND BILING CAN BE PERFORMED
2. A DOCTOR CANNOT HAVE 2 APPOINTMENT AT THE SAME TIME, TO CREATE APPOINTMENT PREVIOUS APPOINTMENT HAVE TO BE CHECKED, GIVEN IT TAKE HALF HOUR TO TREAT A PATIENT
3. ADD AUDIT TABLE
*/
USE DBMS_PROJECT;
Go
IF OBJECT_ID('dbo.Audit', 'U') IS NOT NULL DROP TABLE dbo.Audit;
IF OBJECT_ID('dbo.Users', 'U') IS NOT NULL DROP TABLE dbo.Users;
IF OBJECT_ID('dbo.Billing', 'U') IS NOT NULL DROP TABLE dbo.Billing;
IF OBJECT_ID('dbo.Inventory', 'U') IS NOT NULL DROP TABLE dbo.Inventory;
IF OBJECT_ID('dbo.MedicalRecords', 'U') IS NOT NULL DROP TABLE dbo.MedicalRecords;
IF OBJECT_ID('dbo.Appointments', 'U') IS NOT NULL DROP TABLE dbo.Appointments;
IF OBJECT_ID('dbo.Doctors', 'U') IS NOT NULL DROP TABLE dbo.Doctors;
IF OBJECT_ID('dbo.Staff', 'U') IS NOT NULL DROP TABLE dbo.Staff;
IF OBJECT_ID('dbo.Patients', 'U') IS NOT NULL DROP TABLE dbo.Patients;
--CREATING TABLES:
-- TABLE 1: PATIENTS
CREATE TABLE Patients (
PatientID INT NOT NULL,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
DateOfBirth DATE NOT NULL,
Gender CHAR(1) NOT NULL,
ContactNumber VARCHAR(20) NOT NULL,
Address VARCHAR(255) NOT NULL,
EmergencyContact VARCHAR(20) NOT NULL,
BloodType CHAR(3) NOT NULL,
CONSTRAINT PK_PATIENT PRIMARY KEY (PatientID)
);
SELECT * FROM Patients;
--TABLE 2: STAFF
CREATE TABLE Staff (
StaffID INT NOT NULL,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Role VARCHAR(50) NOT NULL,
Department VARCHAR(50) NOT NULL,
ContactNumber VARCHAR(20) NULL,
Email VARCHAR(100) NULL,
DateHired DATE NOT NULL,
CONSTRAINT PK_STAFF PRIMARY KEY (StaffID)
);
SELECT * FROM Staff;
-- TABLE 3: DOCTORS
CREATE TABLE Doctors (
DoctorID INT NOT NULL,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Specialization VARCHAR(100) NOT NULL,
LicenseNumber VARCHAR(50) NOT NULL,
CONSTRAINT FK_DOCTOR_ID FOREIGN KEY (DoctorID) REFERENCES STAFF(StaffID),
CONSTRAINT PK_DOCTOR PRIMARY KEY (DoctorID)
);
SELECT * FROM Doctors;
--TABLE 4: APPOINTMENTS
CREATE TABLE Appointments (
AppointmentID INT NOT NULL,
PatientID INT NOT NULL,
DoctorID INT NOT NULL,
AppointmentDate DATE NOT NULL,
AppointmentTime TIME NOT NULL,
Purpose VARCHAR(100) NOT NULL,
Status VARCHAR(50) NOT NULL,
CONSTRAINT UNQ_PA_APPOINTMENT UNIQUE (PatientID,AppointmentID),
CONSTRAINT UNQ_PDAD_APPOINTMENT UNIQUE (PatientID,DoctorID,AppointmentDate),
CONSTRAINT PK_APPOINTMENTS PRIMARY KEY (AppointmentID),
CONSTRAINT FK_PATIENT_APPOINTMENT FOREIGN KEY (PatientID) REFERENCES Patients(PatientID),
CONSTRAINT FK_ FOREIGN KEY (DoctorID) REFERENCES Doctors(DoctorID)
);
SELECT * FROM Appointments;
--TABLE 5: MEDICAL RECORDS
CREATE TABLE MedicalRecords (
RecordID INT NOT NULL,
PatientID INT NOT NULL,
DoctorID INT NOT NULL,
VisitDate DATE NULL,
Diagnosis VARCHAR(50) NULL,
Prescription TEXT NULL,
Notes TEXT NULL,
CONSTRAINT FK_PATIENT_DOCTOR_REF FOREIGN KEY(PatientID,DoctorID,VisitDate) REFERENCES Appointments(PatientID,DoctorID,AppointmentDate),
CONSTRAINT PK_MEDICAL_RECORDS PRIMARY KEY(RecordID)
);
SELECT * FROM MedicalRecords;
--TABLE 6: INVENTORY
CREATE TABLE Inventory (
ItemID INT NOT NULL PRIMARY KEY,
ItemName VARCHAR(100) NOT NULL,
Category VARCHAR(50) NOT NULL,
Quantity INT NOT NULL,
UnitPrice MONEY NOT NULL,
ExpiryDate DATE NULL,
Supplier VARCHAR(100) NOT NULL
);
SELECT * FROM Inventory;
--TABLE 7: BILLINGS
CREATE TABLE Billing (
BillID INT NOT NULL,
PatientID INT NOT NULL,
AppointmentID INT NOT NULL,
TotalAmount DECIMAL(10, 2) NOT NULL,
PaymentStatus CHAR(10) NOT NULL,
PaymentDate DATETIME NULL,
CONSTRAINT PK_BILLID PRIMARY KEY (BillID),
CONSTRAINT FK_PA_BILLING FOREIGN KEY (PatientID,AppointmentID) REFERENCES Appointments(PatientID,AppointmentID)
);
SELECT * FROM Billing;
--TABLE 9: Users
CREATE TABLE Users (
UserID INT NOT NULL PRIMARY KEY,
Username VARCHAR(50) NOT NULL,
PasswordHash VARCHAR(255) NOT NULL,
Salt CHAR(5) NOT NULL,
Role VARCHAR(25) NOT NULL,
LastLogin DATETIME NULL,
AccountStatus CHAR(10) NOT NULL
);
SELECT * FROM Users;
--TABLE 10: AUDIT
CREATE TABLE Audit(
AuditId INT NOT NULL PRIMARY KEY,
TableName VARCHAR(20) NOT NULL,
RecordID INT NOT NULL,
Action VARCHAR(10) NOT NULL,
AffectedColumns TEXT NOT NULL,
ActionDateTime DATETIME NOT NULL
)
SELECT * FROM Audit;