4
DROP TABLE group_members;
1
DROP TABLE users CASCADE;
9
login varchar(80) PRIMARY KEY, -- login id
3
login VARCHAR UNIQUE NOT NULL,
4
loginid SERIAL PRIMARY KEY NOT NULL,
7
studentid VARCHAR -- may be null
10
DROP TABLE offerings CASCADE;
11
CREATE TABLE offerings (
12
offeringid SERIAL PRIMARY KEY NOT NULL,
13
subj_name VARCHAR NOT NULL,
14
subj_code VARCHAR NOT NULL,
15
year CHAR(4) NOT NULL,
19
DROP TABLE groups CASCADE;
13
20
CREATE TABLE groups (
14
groupid varchar(18) PRIMARY KEY, -- group name Y^4-S^9-G^3
15
nick varchar(80), -- group nickname
16
subject varchar(9), -- subject code
17
year varchar(4) -- when
21
groupnm VARCHAR NOT NULL,
22
groupid SERIAL PRIMARY KEY NOT NULL,
23
offeringid INT4 REFERENCES offerings (offeringid),
25
UNIQUE (offeringid, groupnm)
28
DROP TABLE group_invitations CASCADE;
29
CREATE TABLE group_invitations (
30
loginid INT4 REFERENCES users (loginid),
31
groupid INT4 REFERENCES groups (groupid),
32
UNIQUE (loginid,groupid)
35
DROP TABLE group_members CASCADE;
20
36
CREATE TABLE group_members (
21
login varchar(80) REFERENCES users (login),
22
groupid varchar(18) REFERENCES groups (groupid)
37
loginid INT4 REFERENCES users (loginid),
38
groupid INT4 REFERENCES groups (groupid),
39
projectid INT4 REFERENCES projects (projectid),
40
UNIQUE (loginid,projectid),
41
PRIMARY KEY (loginid,groupid)
44
DROP TABLE enrolment CASCADE;
25
45
CREATE TABLE enrolment (
26
login varchar(80) REFERENCES users (login),
46
loginid INT4 REFERENCES users (loginid),
47
offeringid INT4 REFERENCES offerings (offeringid),
51
PRIMARY KEY (loginid,offeringid)
54
DROP TABLE roles CASCADE;
31
55
CREATE TABLE roles (
32
login varchar(80) REFERENCES users (login),
36
INSERT INTO users (login,nick) values ('conway', 'Tom');
37
INSERT INTO roles (login,role) values ('conway', 'student');
38
INSERT INTO users (login,nick) values ('apeel', 'Andrew');
39
INSERT INTO roles (login,role) values ('apeel', 'student');
40
INSERT INTO users (login,nick) values ('mgiuca', 'Matt');
41
INSERT INTO roles (login,role) values ('mgiuca', 'tutor');
42
INSERT INTO users (login,nick) values ('sb', 'Steven');
43
INSERT INTO roles (login,role) values ('sb', 'lecturer');
44
INSERT INTO users (login,nick) values ('mpp', 'Mike');
45
INSERT INTO roles (login,role) values ('mpp', 'student');
46
INSERT INTO users (login,nick) values ('ivo', 'Ivo');
47
INSERT INTO roles (login,role) values ('ivo', 'admin');
49
INSERT INTO groups (groupid, nick, subject, year) values ('2007-INFO10001-321', 'Purple Alert', 'INFO10001', '2008');
50
INSERT INTO groups (groupid, nick, subject, year) values ('2007-INFO10001-322', 'Blind Illuminati', 'INFO10001', '2008');
52
INSERT INTO group_members (login,groupid) values ('conway', '2007-INFO10001-321');
53
INSERT INTO group_members (login,groupid) values ('apeel', '2007-INFO10001-321');
54
INSERT INTO group_members (login,groupid) values ('mgiuca', '2007-INFO10001-321');
55
INSERT INTO group_members (login,groupid) values ('sb', '2007-INFO10001-321');
56
INSERT INTO group_members (login,groupid) values ('mpp', '2007-INFO10001-322');
57
INSERT INTO group_members (login,groupid) values ('ivo', '2007-INFO10001-322');
59
INSERT INTO enrolment (login,subject,year) values ('conway' , 'INFO10001', '2008');
60
INSERT INTO enrolment (login,subject,year) values ('apeel' , 'INFO10001', '2008');
61
INSERT INTO enrolment (login,subject,year) values ('mgiuca' , 'INFO10001', '2008');
62
INSERT INTO enrolment (login,subject,year) values ('sb' , 'INFO10001', '2008');
63
INSERT INTO enrolment (login,subject,year) values ('mpp' , 'INFO10001', '2008');
64
INSERT INTO enrolment (login,subject,year) values ('ivo' , 'INFO10001', '2008');
56
loginid INT4 PRIMARY KEY REFERENCES users (loginid),
60
DROP TABLE projects CASCADE;
61
CREATE TABLE projects (
62
projectid SERIAL PRIMARY KEY NOT NULL,
65
offeringid INT4 REFERENCES offerings (offeringid) NOT NULL,
69
DROP TABLE project_extension CASCADE;
70
CREATE TABLE project_extension (
71
loginid INT4 REFERENCES users (loginid),
72
groupid INT4 REFERENCES groups (groupid),
73
projectid INT4 REFERENCES projects (projectid) NOT NULL,
74
deadline TIMESTAMP NOT NULL,
75
approver INT4 REFERENCES users (loginid) NOT NULL,
77
-- exactly one of loginid and groupid must be non-null
78
CHECK ((loginid IS NOT NULL AND groupid IS NULL)
79
OR (loginid IS NULL AND groupid IS NOT NULL))
82
DROP TABLE project_mark CASCADE;
83
CREATE TABLE project_mark (
84
loginid INT4 REFERENCES users (loginid),
85
groupid INT4 REFERENCES groups (groupid),
86
projectid INT4 REFERENCES projects (projectid) NOT NULL,
88
marker INT4 REFERENCES users (loginid) NOT NULL,
93
-- exactly one of loginid and groupid must be non-null
94
CHECK ((loginid IS NOT NULL AND groupid IS NULL)
95
OR (loginid IS NULL AND groupid IS NOT NULL))
98
DROP TABLE problem CASCADE;
99
CREATE TABLE problem (
100
problemid SERIAL PRIMARY KEY NOT NULL,
104
DROP TABLE problem_tags CASCADE;
105
CREATE TABLE problem_tags (
106
problemid INT4 REFERENCES tutorial_problem (problemid),
107
tag VARCHAR NOT NULL,
108
added_by INT4 REFERENCES users (loginid) NOT NULL,
109
date TIMESTAMP NOT NULL,
110
PRIMARY KEY (problemid,added_by,tag)
113
DROP TABLE problem_test_case CASCADE;
114
CREATE TABLE problem_test_case (
115
problemid INT4 REFERENCES problem (problemid) NOT NULL,
116
testcaseid SERIAL UNIQUE NOT NULL,
119
visibility VARCHAR CHECK (visibility in ('public', 'protected', 'private'))
122
DROP TABLE problem_test_case_tags CASCADE;
123
CREATE TABLE problem_test_case_tags (
124
testcaseid INT4 REFERENCES problem_test_case (testcaseid) NOT NULL,
125
tag VARCHAR NOT NULL,
127
added_by INT4 REFERENCES users (loginid) NOT NULL,
128
date TIMESTAMP NOT NULL,
129
PRIMARY KEY (testcaseid,added_by,tag)
132
DROP TABLE problem_attempt CASCADE;
133
CREATE TABLE problem_attempt (
134
problemid INT4 REFERENCES problem (problemid) NOT NULL,
135
loginid INT4 REFERENCES users (loginid) NOT NULL,
136
date TIMESTAMP NOT NULL,
137
attempt VARCHAR NOT NULL,
138
complete BOOLEAN NOT NULL,
139
PRIMARY KEY (problemid,loginid,date)
142
DROP INDEX problem_attempt_index;
143
CREATE INDEX problem_attempt_index ON problem_attempt (problemid, loginid);
145
DROP TABLE problem_attempt_breakdown CASCADE;
146
CREATE TABLE problem_attempt_breakdown (
147
problemid INT4 REFERENCES problem (problemid) NOT NULL,
148
testcaseid INT4 REFERENCES problem_test_case (testcaseid) NOT NULL,
149
loginid INT4 REFERENCES users (loginid) NOT NULL,
150
date TIMESTAMP NOT NULL,
154
DROP TABLE problem_prerequisites CASCADE;
155
CREATE TABLE problem_prerequisites (
156
parent INT4 REFERENCES problem (problemid) NOT NULL,
157
child INT4 REFERENCES problem (problemid) NOT NULL,
158
PRIMARY KEY (parent,child)