forked from CS2102Team6/cs2102-modulemanager
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathschemas.sql
More file actions
126 lines (108 loc) · 4.03 KB
/
schemas.sql
File metadata and controls
126 lines (108 loc) · 4.03 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
CREATE TABLE webusers (
id varchar(100) PRIMARY KEY,
password varchar(100) NOT NULL,
is_super boolean DEFAULT False NOT NULL
);
CREATE TABLE WebAdmins (
id varchar(100) PRIMARY KEY,
name varchar(100),
contact varchar(100), -- Can display relevant people in-charge
FOREIGN KEY (id) REFERENCES webusers ON DELETE CASCADE
);
CREATE TABLE Students (
id varchar(100) PRIMARY KEY,
name varchar(100) NOT NULL,
--Remove cap, it's hard to calculate. cap numeric DEFAULT 0 ,
enroll DATE NOT NULL,
FOREIGN KEY (id) REFERENCES webusers ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Exchanges (
id varchar(100) PRIMARY KEY,
home_country varchar(100) NOT NULL,
FOREIGN KEY (id) REFERENCES Students ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Faculties (
fname varchar(100) PRIMARY KEY
);
CREATE TABLE Minors (
min_name varchar(100) PRIMARY KEY,
fname varchar(100) DEFAULT 'NUS' NOT NULL REFERENCES Faculties ON DELETE SET DEFAULT -- minor belongs to
);
CREATE TABLE Majors (
maj_name varchar(100) PRIMARY KEY,
fname varchar(100) DEFAULT 'NUS' NOT NULL REFERENCES Faculties ON DELETE SET DEFAULT -- major belongs to
);
--Has minor
CREATE TABLE Minoring (
id varchar(100) NOT NULL REFERENCES Students ON DELETE CASCADE ON UPDATE CASCADE,
min_name varchar(100) NOT NULL REFERENCES Minors ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (id,min_name)
);
--Has major trigger needed to ensure that each student has a major
CREATE TABLE Majoring (
id varchar(100) NOT NULL REFERENCES Students ON DELETE CASCADE ON UPDATE CASCADE
DEFERRABLE INITIALLY DEFERRED,
maj_name varchar(100) NOT NULL REFERENCES Majors ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (id,maj_name)
);
CREATE TABLE Modules (
modcode varchar(100) PRIMARY KEY,
modname varchar(100) NOT NULL,
descriptions text,
fname varchar(100) DEFAULT 'NUS' NOT NULL REFERENCES Faculties ON DELETE SET DEFAULT, -- faculty owns a module,
workload int NOT NULL
);
CREATE TABLE Lectures (
lnum int NOT NULL,
modcode varchar(100) NOT NULL REFERENCES Modules ON DELETE CASCADE, -- module covers the slot
deadline timestamp with time zone NOT NULL,
quota int DEFAULT 100 NOT NULL,
PRIMARY KEY(lnum,modcode)
);
-- Weak entity Slots created to represent the time slots for each lecture slot.
CREATE TYPE mood AS ENUM ('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday');
CREATE TABLE Slots (
lnum integer,
modcode varchar(100),
d varchar(10),
t_start time,
t_end time,
FOREIGN KEY (lnum, modcode) REFERENCES Lectures,
PRIMARY KEY(lnum, modcode, d),
CHECK (t_start < t_end)
);
-- make sure that mood is defined
CREATE TABLE Prerequisites(
want varchar(100) NOT NULL REFERENCES Modules ON DELETE CASCADE,
need varchar(100) NOT NULL REFERENCES Modules ON DELETE CASCADE CHECK(want <> need),
PRIMARY KEY(want,need)
);
CREATE TABLE Preclusions(
modcode varchar(100) NOT NULL REFERENCES Modules ON DELETE CASCADE,
precluded varchar(100) NOT NULL REFERENCES Modules ON DELETE CASCADE CHECK(precluded <> modcode),
PRIMARY KEY(modcode,precluded)
); -- trigger here to add preclusion in opposite direction
CREATE TABLE Bids(
id varchar(100) NOT NULL REFERENCES Students,
id_req varchar(100) NOT NULL REFERENCES webusers,
modcode varchar(100) NOT NULL,
lnum int NOT NULL,
bid_time timestamp with time zone,
status boolean DEFAULT True,
remark varchar(100) DEFAULT 'Successful bid!',
PRIMARY KEY(id, id_req, modcode,lnum,bid_time),
FOREIGN KEY (lnum,modcode) REFERENCES Lectures ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Gets(
modcode varchar(100),
lnum int,
id varchar(100) REFERENCES Students ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY(id,modcode,lnum),
FOREIGN KEY (lnum,modcode) REFERENCES Lectures ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE Completions(
id varchar(100) NOT NULL,
modcode varchar(100) NOT NULL REFERENCES Modules ON UPDATE CASCADE,
PRIMARY KEY(id, modcode)
);
INSERT INTO webusers VALUES ('sample','sample');