4
DROP TABLE group_members;
9
login VARCHAR UNIQUE NOT NULL,
10
loginid SERIAL PRIMARY KEY NOT NULL,
13
studentid VARCHAR, -- may be null
17
group VARCHAR NOT NULL,
18
groupid SERIAL PRIMARY KEY NOT NULL,
19
offeringid INT4 REFERENCES offerings (offeringid),
21
UNIQUE (offeringid, group)
24
CREATE TABLE group_invitations (
25
loginid INT4 REFERENCES users (loginid),
26
groupid INT4 REFERENCES groups (groupid),
27
UNIQUE (loginid,groupid)
30
CREATE TABLE group_members (
31
loginid INT4 REFERENCES users (loginid),
32
groupid INT4 REFERENCES groups (groupid),
33
projectid INT4 REFERENCES projects (projectid),
34
UNIQUE (loginid,projectid),
35
PRIMARY KEY (loginid,groupid)
38
CREATE TABLE enrolment (
39
loginid INT4 REFERENCES users (loginid),
40
offeringid INT4 REFERENCES offerings (offeringid),
44
PRIMARY KEY (loginid,offeringid)
48
loginid INT4 PRIMARY KEY REFERENCES users (loginid),
52
CREATE TABLE projects (
53
projectid SERIAL PRIMARY KEY NOT NULL,
56
offeringid INT4 REFERENCES offerings (offeringid) NOT NULL,
60
CREATE TABLE project_extension (
62
projectid INT4 REFERENCES projects (projectid) NOT NULL,
63
deadline TIMESTAMP NOT NULL,
64
approver INT4 REFERENCES users (loginid) NOT NULL,
68
CREATE TABLE project_mark (
70
projectid INT4 REFERENCES projects (projectid) NOT NULL,
72
marker INT4 REFERENCES users (loginid) NOT NULL,
77
PRIMARY KEY (loginid/groupid, projectid, componentid)
80
CREATE TABLE problem (
81
problemid SERIAL PRIMARY KEY NOT NULL,
85
CREATE TABLE problem_tags (
86
problemid INT4 REFERENCES tutorial_problem (problemid),
88
added_by INT4 REFERENCES users (loginid) NOT NULL,
89
when TIMESTAMP NOT NULL,
90
PRIMARY KEY (problemid,added_by,tag)
93
CREATE TABLE problem_test_case (
94
problemid INT4 REFERENCES problem (problemid) NOT NULL,
95
testcaseid SERIAL UNIQUE NOT NULL,
98
visibility VARCHAR CHECK (visibility in ('public', 'protected', 'private'))
101
CREATE TABLE problem_test_case_tags (
102
testcaseid INT4 REFERENCES problem_test_case (testcaseid) NOT NULL,
103
tag VARCHAR NOT NULL,
105
added_by INT4 REFERENCES users (loginid) NOT NULL,
106
when TIMESTAMP NOT NULL,
107
PRIMARY KEY (testcaseid,added_by,tag)
110
CREATE TABLE problem_attempt (
111
problemid INT4 REFERENCES problem (problemid) NOT NULL,
112
loginid INT4 REFERENCES users (loginid) NOT NULL,
113
when TIMESTAMP NOT NULL,
114
attempt VARCHAR NOT NULL,
115
complete BOOLEAN NOT NULL,
116
PRIMARY KEY (problemid,loginid,when)
119
CREATE INDEX indexname ON problem_attempt (problemid, login);
121
CREATE TABLE problem_attempt_breakdown (
122
problemid INT4 REFERENCES problem (problemid) NOT NULL,
123
testcaseid INT4 REFERENCES problem_test_case (testcaseid) NOT NULL,
124
loginid INT4 REFERENCES users (loginid) NOT NULL,
125
when TIMESTAMP NOT NULL,
129
CREATE TABLE problem_prerequisites (
130
parent INT4 REFERENCES problem (problemid) NOT NULL,
131
child INT4 REFERENCES problem (problemid) NOT NULL,
132
PRIMARY KEY (parent,child)