1
DROP TABLE users CASCADE;
1
-- We need a users database to do authorization, manage groups, &c
6
DROP TABLE group_members;
2
10
CREATE TABLE users (
3
login VARCHAR UNIQUE NOT NULL,
4
loginid SERIAL PRIMARY KEY NOT NULL,
7
studentid VARCHAR -- may be null
11
login varchar(80) PRIMARY KEY, -- login id
10
DROP TABLE groups CASCADE;
11
15
CREATE TABLE groups (
12
groupnm VARCHAR NOT NULL,
13
groupid SERIAL PRIMARY KEY NOT NULL,
14
offeringid INT4 REFERENCES offerings (offeringid),
16
UNIQUE (offeringid, groupnm)
19
DROP TABLE group_invitations CASCADE;
20
CREATE TABLE group_invitations (
21
loginid INT4 REFERENCES users (loginid),
22
groupid INT4 REFERENCES groups (groupid),
23
UNIQUE (loginid,groupid)
26
DROP TABLE group_members CASCADE;
16
groupid varchar(18) PRIMARY KEY, -- group name Y^4-S^9-G^3
17
nick varchar(80), -- group nickname
18
subject varchar(9), -- subject code
19
year varchar(4) -- when
27
22
CREATE TABLE group_members (
28
loginid INT4 REFERENCES users (loginid),
29
groupid INT4 REFERENCES groups (groupid),
30
projectid INT4 REFERENCES projects (projectid),
31
UNIQUE (loginid,projectid),
32
PRIMARY KEY (loginid,groupid)
23
login varchar(80) REFERENCES users (login),
24
groupid varchar(18) REFERENCES groups (groupid)
35
DROP TABLE enrolment CASCADE;
36
27
CREATE TABLE enrolment (
37
loginid INT4 REFERENCES users (loginid),
38
offeringid INT4 REFERENCES offerings (offeringid),
42
PRIMARY KEY (loginid,offeringid)
28
login varchar(80) REFERENCES users (login),
45
DROP TABLE roles CASCADE;
46
33
CREATE TABLE roles (
47
loginid INT4 PRIMARY KEY REFERENCES users (loginid),
51
DROP TABLE projects CASCADE;
52
CREATE TABLE projects (
53
projectid SERIAL PRIMARY KEY NOT NULL,
56
offeringid INT4 REFERENCES offerings (offeringid) NOT NULL,
60
DROP TABLE project_extension CASCADE;
61
CREATE TABLE project_extension (
62
loginid INT4 REFERENCES users (loginid),
63
groupid INT4 REFERENCES groups (groupid),
64
projectid INT4 REFERENCES projects (projectid) NOT NULL,
65
deadline TIMESTAMP NOT NULL,
66
approver INT4 REFERENCES users (loginid) NOT NULL,
68
-- exactly one of loginid and groupid must be non-null
69
CHECK ((loginid IS NOT NULL AND groupid IS NULL)
70
OR (loginid IS NULL AND groupid IS NOT NULL))
73
DROP TABLE project_mark CASCADE;
74
CREATE TABLE project_mark (
75
loginid INT4 REFERENCES users (loginid),
76
groupid INT4 REFERENCES groups (groupid),
77
projectid INT4 REFERENCES projects (projectid) NOT NULL,
79
marker INT4 REFERENCES users (loginid) NOT NULL,
84
-- exactly one of loginid and groupid must be non-null
85
CHECK ((loginid IS NOT NULL AND groupid IS NULL)
86
OR (loginid IS NULL AND groupid IS NOT NULL))
89
DROP TABLE problem CASCADE;
90
CREATE TABLE problem (
91
problemid SERIAL PRIMARY KEY NOT NULL,
95
DROP TABLE problem_tags CASCADE;
96
CREATE TABLE problem_tags (
97
problemid INT4 REFERENCES tutorial_problem (problemid),
99
added_by INT4 REFERENCES users (loginid) NOT NULL,
100
date TIMESTAMP NOT NULL,
101
PRIMARY KEY (problemid,added_by,tag)
104
DROP TABLE problem_test_case CASCADE;
105
CREATE TABLE problem_test_case (
106
problemid INT4 REFERENCES problem (problemid) NOT NULL,
107
testcaseid SERIAL UNIQUE NOT NULL,
110
visibility VARCHAR CHECK (visibility in ('public', 'protected', 'private'))
113
DROP TABLE problem_test_case_tags CASCADE;
114
CREATE TABLE problem_test_case_tags (
115
testcaseid INT4 REFERENCES problem_test_case (testcaseid) NOT NULL,
116
tag VARCHAR NOT NULL,
118
added_by INT4 REFERENCES users (loginid) NOT NULL,
119
date TIMESTAMP NOT NULL,
120
PRIMARY KEY (testcaseid,added_by,tag)
123
DROP TABLE problem_attempt CASCADE;
124
CREATE TABLE problem_attempt (
125
problemid INT4 REFERENCES problem (problemid) NOT NULL,
126
loginid INT4 REFERENCES users (loginid) NOT NULL,
127
date TIMESTAMP NOT NULL,
128
attempt VARCHAR NOT NULL,
129
complete BOOLEAN NOT NULL,
130
PRIMARY KEY (problemid,loginid,date)
133
DROP INDEX problem_attempt_index;
134
CREATE INDEX problem_attempt_index ON problem_attempt (problemid, login);
136
DROP TABLE problem_attempt_breakdown CASCADE;
137
CREATE TABLE problem_attempt_breakdown (
138
problemid INT4 REFERENCES problem (problemid) NOT NULL,
139
testcaseid INT4 REFERENCES problem_test_case (testcaseid) NOT NULL,
140
loginid INT4 REFERENCES users (loginid) NOT NULL,
141
date TIMESTAMP NOT NULL,
145
DROP TABLE problem_prerequisites CASCADE;
146
CREATE TABLE problem_prerequisites (
147
parent INT4 REFERENCES problem (problemid) NOT NULL,
148
child INT4 REFERENCES problem (problemid) NOT NULL,
149
PRIMARY KEY (parent,child)
34
login varchar(80) REFERENCES users (login),
38
INSERT INTO users (login,nick) values ('conway', 'Tom');
39
INSERT INTO roles (login,role) values ('conway', 'student');
40
INSERT INTO users (login,nick) values ('apeel', 'Andrew');
41
INSERT INTO roles (login,role) values ('apeel', 'student');
42
INSERT INTO users (login,nick) values ('mgiuca', 'Matt');
43
INSERT INTO roles (login,role) values ('mgiuca', 'tutor');
44
INSERT INTO users (login,nick) values ('sb', 'Steven');
45
INSERT INTO roles (login,role) values ('sb', 'lecturer');
46
INSERT INTO users (login,nick) values ('mpp', 'Mike');
47
INSERT INTO roles (login,role) values ('mpp', 'student');
48
INSERT INTO users (login,nick) values ('ivo', 'Ivo');
49
INSERT INTO roles (login,role) values ('ivo', 'admin');
51
INSERT INTO groups (groupid, nick, subject, year) values ('2007-INFO10001-321', 'Purple Alert', 'INFO10001', '2008');
52
INSERT INTO groups (groupid, nick, subject, year) values ('2007-INFO10001-322', 'Blind Illuminati', 'INFO10001', '2008');
54
INSERT INTO group_members (login,groupid) values ('conway', '2007-INFO10001-321');
55
INSERT INTO group_members (login,groupid) values ('apeel', '2007-INFO10001-321');
56
INSERT INTO group_members (login,groupid) values ('mgiuca', '2007-INFO10001-321');
57
INSERT INTO group_members (login,groupid) values ('sb', '2007-INFO10001-321');
58
INSERT INTO group_members (login,groupid) values ('mpp', '2007-INFO10001-322');
59
INSERT INTO group_members (login,groupid) values ('ivo', '2007-INFO10001-322');
61
INSERT INTO enrolment (login,subject,year) values ('conway' , 'INFO10001', '2008');
62
INSERT INTO enrolment (login,subject,year) values ('apeel' , 'INFO10001', '2008');
63
INSERT INTO enrolment (login,subject,year) values ('mgiuca' , 'INFO10001', '2008');
64
INSERT INTO enrolment (login,subject,year) values ('sb' , 'INFO10001', '2008');
65
INSERT INTO enrolment (login,subject,year) values ('mpp' , 'INFO10001', '2008');
66
INSERT INTO enrolment (login,subject,year) values ('ivo' , 'INFO10001', '2008');