forked from WeiXuanYap/TraceTheGather
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschema.sql
More file actions
108 lines (90 loc) · 2.78 KB
/
Copy pathschema.sql
File metadata and controls
108 lines (90 loc) · 2.78 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
DROP TABLE IF EXISTS Employees, Junior, Booker, Senior, Manager, Health_Declaration,
Departments, Meeting_Rooms, Updates, Joins, Books, Approves CASCADE;
/*
Should we add INITIALLY DEFERRABLE IMMEDIATE to our constraints?
*/
CREATE TABLE Departments (
did INTEGER PRIMARY KEY,
dname varchar(50)
);
CREATE TABLE Employees (
eid SERIAL,
ename VARCHAR(50),
email TEXT UNIQUE,
home_num VARCHAR(50),
mobile_num VARCHAR(50),
office_num VARCHAR(50),
resigned_date DATE,
role VARCHAR(50) NOT NULL CHECK(role IN ('Junior', 'Senior', 'Manager')),
did INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY (eid),
FOREIGN KEY (did) REFERENCES Departments (did) ON UPDATE CASCADE ON DELETE SET DEFAULT
);
CREATE TABLE Junior (
eid INTEGER PRIMARY KEY,
FOREIGN KEY (eid) REFERENCES Employees (eid) ON UPDATE CASCADE
);
CREATE TABLE Booker (
eid INTEGER PRIMARY KEY,
FOREIGN KEY (eid) REFERENCES Employees (eid) ON UPDATE CASCADE
);
CREATE TABLE Senior (
eid INTEGER PRIMARY KEY,
FOREIGN KEY (eid) REFERENCES Booker (eid) ON UPDATE CASCADE
);
CREATE TABLE Manager (
eid INTEGER PRIMARY KEY,
FOREIGN KEY (eid) REFERENCES Booker (eid) ON UPDATE CASCADE
);
CREATE TABLE Health_Declaration (
eid INTEGER REFERENCES Employees ON DELETE CASCADE,
date DATE,
temp NUMERIC CHECK (temp < 43 AND temp > 34),
fever BOOLEAN,
PRIMARY KEY (date, eid),
CONSTRAINT has_fever CHECK ((temp <= 37.5 AND fever = FALSE) OR (temp > 37.5 AND fever = TRUE))
);
CREATE TABLE Meeting_Rooms (
floor INTEGER,
room INTEGER,
rname varchar(50),
did INTEGER NOT NULL REFERENCES Departments,
PRIMARY KEY (room, floor)
);
CREATE TABLE Updates (
date DATE,
floor INTEGER,
room INTEGER,
new_cap INTEGER,
eid INTEGER REFERENCES Manager ON DELETE CASCADE,
PRIMARY KEY (date, room, floor),
FOREIGN KEY (room, floor) REFERENCES Meeting_Rooms (room, floor),
CONSTRAINT positive_capacity CHECK (new_cap > 0)
);
CREATE TABLE Books (
eid INTEGER NOT NULL REFERENCES Booker ON DELETE CASCADE,
date DATE,
time TIME,
floor INTEGER,
room INTEGER,
PRIMARY KEY(date, time, floor, room),
FOREIGN KEY (room, floor) REFERENCES Meeting_Rooms (room, floor) ON DELETE CASCADE
);
CREATE TABLE Joins (
eid INTEGER REFERENCES Employees ON DELETE CASCADE,
date DATE,
time TIME,
floor INTEGER,
room INTEGER,
PRIMARY KEY(eid, date, time, floor, room),
FOREIGN KEY (date, time, floor, room) REFERENCES Books (date, time, floor, room) ON DELETE CASCADE
);
CREATE TABLE Approves (
aid INTEGER REFERENCES Manager ON DELETE CASCADE,
date DATE,
time TIME,
floor INTEGER,
room INTEGER,
PRIMARY KEY(date, time, floor, room),
FOREIGN KEY (date, time, floor, room) REFERENCES Books (date, time, floor, room) ON DELETE CASCADE
);