-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCreateDB.sql
More file actions
224 lines (201 loc) · 6.02 KB
/
Copy pathCreateDB.sql
File metadata and controls
224 lines (201 loc) · 6.02 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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
-- create database "Sanay3y_DB" then run this script in the query tool. this will create all the tables.
CREATE TABLE Client (
Client_ID SERIAL PRIMARY KEY,
FullName VARCHAR(45) NOT NULL,
Email VARCHAR(45) NOT NULL,
Address VARCHAR(45) NOT NULL,
Password VARCHAR(45) NOT NULL,
type CHAR(1) NOT NULL CHECK (type = 'c' OR type = 't' OR type = 'a'),
Phone_Number CHAR(11) NOT NULL
);
CREATE TABLE service(
service_ID SERIAL PRIMARY KEY,
Name VARCHAR(45) NOT NULL
);
CREATE TABLE Point_System(
Percentage INT PRIMARY KEY,
Req_points INT NOT NULL
);
CREATE TABLE Customer(
Customer_ID INT PRIMARY KEY REFERENCES Client(Client_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
Points INT DEFAULT 0
);
CREATE TABLE Admin(
Admin_ID INT PRIMARY KEY REFERENCES Client(Client_ID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Technician(
Tech_ID INT PRIMARY KEY REFERENCES Client(Client_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
service_ID INT NOT NULL REFERENCES service(service_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
Rating INT CHECK (Rating > 0 AND Rating < 6)
);
CREATE TABLE orders(
order_id SERIAL PRIMARY KEY,
order_status CHAR (1) NOT NULL CHECK (order_status = 'P' OR order_status= 'U' OR order_status = 'F' OR order_status = 'C') DEFAULT 'P',
order_type CHAR(1) NOT NULL CHECK (order_type = 'R' OR order_type = 'B' OR order_type = 'O') DEFAULT 'R',
order_DATE DATE DEFAULT CURRENT_DATE,
order_exec_date DATE,
Customer_ID INT REFERENCES Customer(Customer_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
highlighted BOOLEAN DEFAULT false
);
CREATE TABLE Feedback(
Feedback_ID SERIAL PRIMARY KEY,
Content TEXT NOT NULL,
Feedback_DATE DATE DEFAULT CURRENT_DATE,
Reporter_ID INT REFERENCES Client(Client_ID)
ON DELETE SET NULL
ON UPDATE CASCADE,
Reviewer_ID INT REFERENCES Admin(Admin_ID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Reward(
Reward_ID SERIAL PRIMARY KEY,
Customer_ID INT NOT NULL REFERENCES Customer(Customer_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
Percentage INT NOT NULL REFERENCES Point_System(Percentage)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Complaint(
Complaint_ID SERIAL PRIMARY KEY,
Content TEXT NOT NULL,
Complaint_DATE DATE DEFAULT CURRENT_DATE,
Customer_ID INT NOT NULL REFERENCES Customer(Customer_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
Reviewer_ID INT REFERENCES Admin(Admin_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
order_id INT NOT NULL REFERENCES orders(order_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Offer(
Offer_ID SERIAL PRIMARY KEY,
Header VARCHAR(45),
Description TEXT,
Prev_price INT,
New_price INT,
Tech_ID INT REFERENCES Technician(Tech_ID)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE Review(
Review_ID SERIAL PRIMARY KEY,
Rating INT CHECK (Rating > 0 AND Rating < 6),
order_id INT NOT NULL REFERENCES orders(order_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
Customer_ID INT NOT NULL REFERENCES Customer(Customer_ID)
ON DELETE SET NULL
ON UPDATE CASCADE,
Content TEXT
);
CREATE TABLE Bundle(
Bundle_ID SERIAL PRIMARY KEY,
Header VARCHAR(50),
Description TEXT,
Creator_ID INT NOT NULL REFERENCES Admin(Admin_ID)
ON DELETE SET NULL
ON UPDATE CASCADE,
Expiry_date DATE,
Total_price INT NOT NULL,
tech_id1 INT REFERENCES technician(tech_id)
ON DELETE SET NULL
ON UPDATE CASCADE,
tech_id2 INT REFERENCES technician(tech_id)
ON DELETE SET NULL
ON UPDATE CASCADE,
tech_id3 INT REFERENCES technician(tech_id)
ON DELETE SET NULL
ON UPDATE CASCADE
);
CREATE TABLE Notification(
Notification_ID SERIAL PRIMARY KEY,
Content TEXT NOT NULL,
Notification_DATE DATE DEFAULT CURRENT_DATE,
Notified_ID INT NOT NULL REFERENCES Client(Client_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
order_id INT NOT NULL REFERENCES orders(order_id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
CREATE TABLE IsBundle(
order_id INT REFERENCES orders(order_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
Bundle_ID INT REFERENCES Bundle(Bundle_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY (order_id, Bundle_ID)
);
CREATE TABLE RegularOrder(
order_id INT REFERENCES orders(order_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
Header VARCHAR(50),
Description TEXT,
tech_id INT REFERENCES technician(tech_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
Price INT NOT NULL
);
CREATE TABLE IsOffer(
order_id INT REFERENCES orders(order_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
Offer_ID INT REFERENCES Offer(Offer_ID)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY (order_id, Offer_ID)
);
CREATE PROCEDURE InsertComplaint (character varying, int, int)
LANGUAGE 'plpgsql'
AS $$
BEGIN
INSERT INTO complaint(content, customer_id, order_id) VALUES ($1, $2, $3);
END;
$$;
CREATE PROCEDURE InsertFeedback(character varying, int)
LANGUAGE 'plpgsql'
AS $$
BEGIN
INSERT INTO feedback (content, reporter_id) VALUES ($1, $2);
END;
$$;
CREATE PROCEDURE InsertService(character varying)
LANGUAGE 'plpgsql'
AS $$
BEGIN
INSERT INTO service (name) VALUES ($1);
END;
$$;
CREATE PROCEDURE InsertOffer(character varying, character varying, int, int, int)
LANGUAGE 'plpgsql'
AS $$
BEGIN
INSERT INTO offer (header, description, prev_price, new_price, tech_id)
VALUES ($1, $2, $3, $4, $5);
END;
$$;
CREATE PROCEDURE InsertNotification(character varying, int, int)
LANGUAGE 'plpgsql'
AS $$
BEGIN
INSERT INTO notification (content, notified_id, order_id) VALUES ($1, $2, $3);
END;
$$;
alter table technician drop column rating;
alter table technician add column rating float check (rating >= 0 AND rating <= 5) default 0;