4
DROP TABLE group_members;
9
login varchar(80) PRIMARY KEY, -- login id
2
login VARCHAR UNIQUE NOT NULL,
3
loginid SERIAL PRIMARY KEY NOT NULL,
6
studentid VARCHAR, -- may be null
13
9
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
10
group VARCHAR NOT NULL,
11
groupid SERIAL PRIMARY KEY NOT NULL,
12
offeringid INT4 REFERENCES offerings (offeringid),
14
UNIQUE (offeringid, group)
17
CREATE TABLE group_invitations (
18
loginid INT4 REFERENCES users (loginid),
19
groupid INT4 REFERENCES groups (groupid),
20
UNIQUE (loginid,groupid)
20
23
CREATE TABLE group_members (
21
login varchar(80) REFERENCES users (login),
22
groupid varchar(18) REFERENCES groups (groupid)
24
loginid INT4 REFERENCES users (loginid),
25
groupid INT4 REFERENCES groups (groupid),
26
projectid INT4 REFERENCES projects (projectid),
27
UNIQUE (loginid,projectid),
28
PRIMARY KEY (loginid,groupid)
25
31
CREATE TABLE enrolment (
26
login varchar(80) REFERENCES users (login),
32
loginid INT4 REFERENCES users (loginid),
33
offeringid INT4 REFERENCES offerings (offeringid),
37
PRIMARY KEY (loginid,offeringid)
31
40
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');
41
loginid INT4 PRIMARY KEY REFERENCES users (loginid),
45
CREATE TABLE projects (
46
projectid SERIAL PRIMARY KEY NOT NULL,
49
offeringid INT4 REFERENCES offerings (offeringid) NOT NULL,
53
CREATE TABLE project_extension (
55
projectid INT4 REFERENCES projects (projectid) NOT NULL,
56
deadline TIMESTAMP NOT NULL,
57
approver INT4 REFERENCES users (loginid) NOT NULL,
61
CREATE TABLE project_mark (
63
projectid INT4 REFERENCES projects (projectid) NOT NULL,
65
marker INT4 REFERENCES users (loginid) NOT NULL,
70
PRIMARY KEY (loginid/groupid, projectid, componentid)
73
CREATE TABLE problem (
74
problemid SERIAL PRIMARY KEY NOT NULL,
78
CREATE TABLE problem_tags (
79
problemid INT4 REFERENCES tutorial_problem (problemid),
81
added_by INT4 REFERENCES users (loginid) NOT NULL,
82
when TIMESTAMP NOT NULL,
83
PRIMARY KEY (problemid,added_by,tag)
86
CREATE TABLE problem_test_case (
87
problemid INT4 REFERENCES problem (problemid) NOT NULL,
88
testcaseid SERIAL UNIQUE NOT NULL,
91
visibility VARCHAR CHECK (visibility in ('public', 'protected', 'private'))
94
CREATE TABLE problem_test_case_tags (
95
testcaseid INT4 REFERENCES problem_test_case (testcaseid) NOT NULL,
98
added_by INT4 REFERENCES users (loginid) NOT NULL,
99
when TIMESTAMP NOT NULL,
100
PRIMARY KEY (testcaseid,added_by,tag)
103
CREATE TABLE problem_attempt (
104
problemid INT4 REFERENCES problem (problemid) NOT NULL,
105
loginid INT4 REFERENCES users (loginid) NOT NULL,
106
when TIMESTAMP NOT NULL,
107
attempt VARCHAR NOT NULL,
108
complete BOOLEAN NOT NULL,
109
PRIMARY KEY (problemid,loginid,when)
112
CREATE INDEX indexname ON problem_attempt (problemid, login);
114
CREATE TABLE problem_attempt_breakdown (
115
problemid INT4 REFERENCES problem (problemid) NOT NULL,
116
testcaseid INT4 REFERENCES problem_test_case (testcaseid) NOT NULL,
117
loginid INT4 REFERENCES users (loginid) NOT NULL,
118
when TIMESTAMP NOT NULL,
122
CREATE TABLE problem_prerequisites (
123
parent INT4 REFERENCES problem (problemid) NOT NULL,
124
child INT4 REFERENCES problem (problemid) NOT NULL,
125
PRIMARY KEY (parent,child)