DatabaseCreation: DDL_VP.sql

File DDL_VP.sql, 14.1 KB (added by 231082, 4 days ago)

DDL generated automatically from the diagrams in Visual Paradigm.

Line 
1CREATE TABLE Academic_program (
2 code varchar(255) NOT NULL,
3 name varchar(255) NOT NULL,
4 created_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
5 updated_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
6 PRIMARY KEY (code))
7;
8
9CREATE TABLE Aggregated_Course_Edition_Results (
10 id SERIAL NOT NULL,
11 TeachesTeacherMemberid int4 NOT NULL,
12 TeachesCourse_Editionid int4 NOT NULL,
13 exported_at timestamp NOT NULL,
14 data_jsonb int4 NOT NULL,
15 PRIMARY KEY (id))
16;
17
18CREATE TABLE Announcement (
19 id int4 NOT NULL,
20 TeachesTeacherMemberid2 int4 NOT NULL,
21 TeachesCourse_Editionid int4 NOT NULL,
22 message varchar(255) NOT NULL,
23 sent_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
24 PRIMARY KEY (id,
25 TeachesTeacherMemberid2,
26 TeachesCourse_Editionid))
27;
28
29CREATE TABLE Announcement_Replies (
30 Announcementid int4 NOT NULL,
31 Announcementid2 int4 NOT NULL,
32 AnnouncementTeachesTeacherMemberid22 int4 NOT NULL,
33 AnnouncementTeachesTeacherMemberid23 int4 NOT NULL,
34 AnnouncementTeachesCourse_Editionid int4 NOT NULL,
35 AnnouncementTeachesCourse_Editionid2 int4 NOT NULL,
36 PRIMARY KEY (Announcementid,
37 Announcementid2,
38 AnnouncementTeachesTeacherMemberid22,
39 AnnouncementTeachesTeacherMemberid23,
40 AnnouncementTeachesCourse_Editionid,
41 AnnouncementTeachesCourse_Editionid2))
42;
43
44CREATE TABLE Course (
45 code varchar(255) NOT NULL,
46 name varchar(255) NOT NULL,
47 credits int4 NOT NULL CHECK(credits > 0),
48 created_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
49 PRIMARY KEY (code))
50;
51
52CREATE TABLE Course_Edition (
53 id SERIAL NOT NULL,
54 Coursecode varchar(255) NOT NULL,
55 academic_year int4 NOT NULL,
56 semester int4 NOT NULL,
57 PRIMARY KEY (id))
58;
59
60CREATE TABLE Course_Enrollment (
61 id SERIAL NOT NULL,
62 Semester_Enrollmentid int4 NOT NULL,
63 Course_Editionid int4 NOT NULL,
64 PRIMARY KEY (id))
65;
66
67CREATE TABLE Course_Equivalence (
68 Coursecode varchar(255) NOT NULL,
69 Coursecode2 varchar(255) NOT NULL,
70 PRIMARY KEY (Coursecode,
71 Coursecode2))
72;
73
74CREATE TABLE Course_Prerequisite (
75 Coursecode varchar(255) NOT NULL,
76 Coursecode2 varchar(255) NOT NULL,
77 PRIMARY KEY (Coursecode,
78 Coursecode2),
79 CONSTRAINT COURSE_CANNOT_BE_ITS_OWN_PREREQUISITE
80 CHECK (course_code <> prerequisite_code))
81;
82
83COMMENT ON CONSTRAINT COURSE_CANNOT_BE_ITS_OWN_PREREQUISITE ON Course_Prerequisite IS 'A course cannot be its own prerequisite.'
84;
85
86CREATE TABLE Curriculum (
87 Academic_programcode varchar(255) NOT NULL,
88 Coursecode varchar(255) NOT NULL,
89 semester int4 NOT NULL CHECK(semester BETWEEN 1 AND 8),
90 mandatory bytea DEFAULT 'FALSE' NOT NULL,
91 PRIMARY KEY (Academic_programcode,
92 Coursecode))
93;
94
95CREATE TABLE Exam (
96 id SERIAL NOT NULL,
97 Course_Editionid int4 NOT NULL,
98 scheduled_at date,
99 duration_minutes int4 CHECK(duration_minutes > 0),
100 PRIMARY KEY (id))
101;
102
103CREATE TABLE Exam_Attempt (
104 attempt_number int4 NOT NULL CHECK(attempt_number > 0),
105 Examid int4 NOT NULL,
106 Course_Enrollmentid int4 NOT NULL,
107 total_points float4 CHECK(total_points >= 0),
108 submitted_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
109 PRIMARY KEY (attempt_number,
110 Examid,
111 Course_Enrollmentid))
112;
113
114CREATE TABLE Exam_Problem (
115 pid int4 NOT NULL,
116 Examid int4 NOT NULL,
117 description varchar(255) NOT NULL,
118 expected varchar(255) NOT NULL,
119 points float4 NOT NULL CHECK(points > 0),
120 PRIMARY KEY (pid,
121 Examid))
122;
123
124CREATE TABLE Exam_Results (
125 id SERIAL NOT NULL,
126 Examid int4 NOT NULL,
127 TeachesTeacherMemberid int4 NOT NULL,
128 TeachesCourse_Editionid int4 NOT NULL,
129 exported_at timestamp NOT NULL,
130 data_jsonb int4 NOT NULL,
131 PRIMARY KEY (id))
132;
133
134CREATE TABLE Exercise (
135 id SERIAL NOT NULL,
136 Course_Editionid int4 NOT NULL,
137 title varchar(255) NOT NULL,
138 task varchar(255) NOT NULL,
139 expected_result varchar(255) NOT NULL,
140 deadline date,
141 max_grade int4 DEFAULT 5 NOT NULL CHECK(max_grade > 0),
142 created_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
143 PRIMARY KEY (id))
144;
145
146CREATE TABLE Exercise_Submission (
147 id int4 NOT NULL,
148 Exerciseid int4 NOT NULL,
149 Course_Enrollmentid int4 NOT NULL,
150 content varchar(255) NOT NULL,
151 grade int4 CHECK(grade BETWEEN 1 AND 10),
152 submitted_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
153 graded_at date,
154 PRIMARY KEY (id,
155 Exerciseid,
156 Course_Enrollmentid))
157;
158
159CREATE TABLE Lecture (
160 id SERIAL NOT NULL,
161 Course_Editionid int4 NOT NULL,
162 title varchar(255) NOT NULL,
163 content_url varchar(255),
164 created_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
165 PRIMARY KEY (id))
166;
167
168CREATE TABLE Member (
169 id SERIAL NOT NULL,
170 name varchar(255) NOT NULL,
171 surname varchar(255) NOT NULL,
172 username varchar(255) NOT NULL,
173 password_hash varchar(255) NOT NULL,
174 date_birth date NOT NULL,
175 created_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
176 updated_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
177 PRIMARY KEY (id))
178;
179
180CREATE TABLE Member_Message (
181 id SERIAL NOT NULL,
182 message varchar(255) NOT NULL,
183 sent_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
184 Memberid int4 NOT NULL,
185 Memberid2 int4 NOT NULL,
186 PRIMARY KEY (id))
187;
188
189CREATE TABLE Program_Enrollment (
190 id SERIAL NOT NULL,
191 StudentMemberid int4 NOT NULL UNIQUE,
192 Academic_programcode varchar(255) NOT NULL UNIQUE,
193 date_enrollment date NOT NULL UNIQUE,
194 date_disenrollment date,
195 PRIMARY KEY (id),
196 CONSTRAINT CNS_disenrollment_after_enrollment
197 CHECK (date_enrollment < date_disenrollment))
198;
199
200COMMENT ON CONSTRAINT CNS_disenrollment_after_enrollment ON Program_Enrollment IS 'Date of disenrollment has to be after the date of enrollment (for a specific academic program).'
201;
202
203COMMENT ON TABLE Program_Enrollment IS 'date_enrollment is a part of primary key, because e.g. a student may enroll in program A, then disenroll from it (change program), and then enroll in program A again (only the dates are different).'
204;
205
206CREATE TABLE Semester_Enrollment (
207 id SERIAL NOT NULL,
208 Program_Enrollmentid int4 NOT NULL,
209 academic_year int4 NOT NULL CHECK(academic_year >= 2000),
210 semester int4 NOT NULL CHECK(semester BETWEEN 1 AND 2),
211 prev_hash varchar(255),
212 current_hash varchar(255) DEFAULT '' NOT NULL,
213 PRIMARY KEY (id))
214;
215
216CREATE TABLE Student (
217 Memberid int4 NOT NULL,
218 "index" varchar(255) NOT NULL UNIQUE,
219 PRIMARY KEY (Memberid))
220;
221
222CREATE TABLE Student_Answer (
223 answer varchar(255) NOT NULL,
224 points_acquired float4 NOT NULL CHECK(points_acquired >= 0),
225 Exam_Problempid int4 NOT NULL,
226 Exam_Attemptattempt_number int4 NOT NULL,
227 Exam_AttemptCourse_Enrollmentid int4 NOT NULL,
228 Exam_AttemptExamid2 int4 NOT NULL,
229 PRIMARY KEY (Exam_Problempid,
230 Exam_Attemptattempt_number,
231 Exam_AttemptCourse_Enrollmentid,
232 Exam_AttemptExamid2))
233;
234
235CREATE TABLE Student_Grade (
236 grade int4 NOT NULL CHECK(grade BETWEEN 6 AND 10),
237 graded_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
238 Course_Enrollmentid int4 NOT NULL,
239 Aggregated_Course_Edition_Resultsid int4 NOT NULL,
240 PRIMARY KEY (Course_Enrollmentid))
241;
242
243CREATE TABLE Survey (
244 id SERIAL NOT NULL,
245 Course_Editionid int4 NOT NULL,
246 title varchar(255) NOT NULL,
247 open_until date,
248 PRIMARY KEY (id))
249;
250
251CREATE TABLE Survey_Option (
252 "option" varchar(255) NOT NULL,
253 Surveyid int4 NOT NULL,
254 capacity int4 CHECK(capacity > 0),
255 PRIMARY KEY ("option",
256 Surveyid))
257;
258
259CREATE TABLE Survey_Response (
260 option_text varchar(255) NOT NULL,
261 Surveyid int4 NOT NULL,
262 Course_Enrollmentid int4 NOT NULL,
263 responded_at date DEFAULT CURRENT_TIMESTAMP NOT NULL,
264 PRIMARY KEY (option_text,
265 Surveyid,
266 Course_Enrollmentid))
267;
268
269CREATE TABLE Teacher (
270 Memberid int4 NOT NULL,
271 date_registration date DEFAULT CURRENT_DATE NOT NULL,
272 PRIMARY KEY (Memberid))
273;
274
275CREATE TABLE Teaches (
276 TeacherMemberid int4 NOT NULL,
277 Course_Editionid int4 NOT NULL,
278 PRIMARY KEY (TeacherMemberid,
279 Course_Editionid))
280;
281
282CREATE TABLE Teaching_Assistant (
283 id int4 NOT NULL,
284 StudentMemberid int4 NOT NULL,
285 TeacherMemberid int4 NOT NULL,
286 PRIMARY KEY (id,
287 StudentMemberid,
288 TeacherMemberid))
289;
290
291ALTER TABLE Student ADD CONSTRAINT FKStudent782306 FOREIGN KEY (Memberid) REFERENCES Member (id)
292;
293
294ALTER TABLE Teacher ADD CONSTRAINT FKTeacher351553 FOREIGN KEY (Memberid) REFERENCES Member (id)
295;
296
297ALTER TABLE Teaches ADD CONSTRAINT FKTeaches706203 FOREIGN KEY (TeacherMemberid) REFERENCES Teacher (Memberid)
298;
299
300ALTER TABLE Teaches ADD CONSTRAINT FKTeaches334626 FOREIGN KEY (Course_Editionid) REFERENCES Course_Edition (id)
301;
302
303ALTER TABLE Course_Enrollment ADD CONSTRAINT FKCourse_Enr486954 FOREIGN KEY (Course_Editionid) REFERENCES Course_Edition (id)
304;
305
306ALTER TABLE Member_Message ADD CONSTRAINT FKMember_Mes36195 FOREIGN KEY (Memberid) REFERENCES Member (id)
307;
308
309ALTER TABLE Member_Message ADD CONSTRAINT FKMember_Mes61215 FOREIGN KEY (Memberid2) REFERENCES Member (id)
310;
311
312ALTER TABLE Program_Enrollment ADD CONSTRAINT FKProgram_En889357 FOREIGN KEY (StudentMemberid) REFERENCES Student (Memberid)
313;
314
315ALTER TABLE Program_Enrollment ADD CONSTRAINT FKProgram_En384401 FOREIGN KEY (Academic_programcode) REFERENCES Academic_program (code)
316;
317
318ALTER TABLE Course_Equivalence ADD CONSTRAINT FKCourse_Equ56181 FOREIGN KEY (Coursecode) REFERENCES Course (code)
319;
320
321ALTER TABLE Course_Equivalence ADD CONSTRAINT FKCourse_Equ535651 FOREIGN KEY (Coursecode2) REFERENCES Course (code)
322;
323
324ALTER TABLE Announcement ADD CONSTRAINT FKAnnounceme407182 FOREIGN KEY (TeachesTeacherMemberid2, TeachesCourse_Editionid) REFERENCES Teaches (TeacherMemberid, Course_Editionid)
325;
326
327ALTER TABLE Exam_Results ADD CONSTRAINT FKExam_Resul860551 FOREIGN KEY (Examid) REFERENCES Exam (id)
328;
329
330ALTER TABLE Exam_Results ADD CONSTRAINT FKExam_Resul975811 FOREIGN KEY (TeachesTeacherMemberid, TeachesCourse_Editionid) REFERENCES Teaches (TeacherMemberid, Course_Editionid)
331;
332
333ALTER TABLE Aggregated_Course_Edition_Results ADD CONSTRAINT FKAggregated438385 FOREIGN KEY (TeachesTeacherMemberid, TeachesCourse_Editionid) REFERENCES Teaches (TeacherMemberid, Course_Editionid)
334;
335
336ALTER TABLE Student_Grade ADD CONSTRAINT FKStudent_Gr234275 FOREIGN KEY (Aggregated_Course_Edition_Resultsid) REFERENCES Aggregated_Course_Edition_Results (id)
337;
338
339ALTER TABLE Student_Answer ADD CONSTRAINT answers FOREIGN KEY (Exam_Attemptattempt_number, Exam_AttemptExamid2, Exam_AttemptCourse_Enrollmentid) REFERENCES Exam_Attempt (attempt_number, Examid, Course_Enrollmentid)
340;
341
342ALTER TABLE Student_Answer ADD CONSTRAINT answers FOREIGN KEY (Exam_Problempid, Exam_AttemptExamid2) REFERENCES Exam_Problem (pid, Examid)
343;
344
345ALTER TABLE Teaching_Assistant ADD CONSTRAINT assists FOREIGN KEY (TeacherMemberid) REFERENCES Teacher (Memberid)
346;
347
348ALTER TABLE Teaching_Assistant ADD CONSTRAINT assists FOREIGN KEY (StudentMemberid) REFERENCES Student (Memberid)
349;
350
351ALTER TABLE Exam_Attempt ADD CONSTRAINT attempts FOREIGN KEY (Course_Enrollmentid) REFERENCES Course_Enrollment (id)
352;
353
354ALTER TABLE Exam_Attempt ADD CONSTRAINT attempts FOREIGN KEY (Examid) REFERENCES Exam (id)
355;
356
357ALTER TABLE Curriculum ADD CONSTRAINT "contains" FOREIGN KEY (Academic_programcode) REFERENCES Academic_program (code)
358;
359
360ALTER TABLE Curriculum ADD CONSTRAINT "contains" FOREIGN KEY (Coursecode) REFERENCES Course (code)
361;
362
363ALTER TABLE Exam_Problem ADD CONSTRAINT "contains" FOREIGN KEY (Examid) REFERENCES Exam (id)
364;
365
366ALTER TABLE Student_Grade ADD CONSTRAINT "graded in" FOREIGN KEY (Course_Enrollmentid) REFERENCES Course_Enrollment (id)
367;
368
369ALTER TABLE Course_Edition ADD CONSTRAINT "has edition" FOREIGN KEY (Coursecode) REFERENCES Course (code)
370;
371
372ALTER TABLE Semester_Enrollment ADD CONSTRAINT "has enrollment" FOREIGN KEY (Program_Enrollmentid) REFERENCES Program_Enrollment (id)
373;
374
375ALTER TABLE Exam ADD CONSTRAINT "has exam" FOREIGN KEY (Course_Editionid) REFERENCES Course_Edition (id)
376;
377
378ALTER TABLE Exercise ADD CONSTRAINT "has exercise" FOREIGN KEY (Course_Editionid) REFERENCES Course_Edition (id)
379;
380
381ALTER TABLE Lecture ADD CONSTRAINT "has lecture" FOREIGN KEY (Course_Editionid) REFERENCES Course_Edition (id)
382;
383
384ALTER TABLE Survey_Option ADD CONSTRAINT "has option" FOREIGN KEY (Surveyid) REFERENCES Survey (id)
385;
386
387ALTER TABLE Announcement_Replies ADD CONSTRAINT "has reply" FOREIGN KEY (Announcementid, AnnouncementTeachesTeacherMemberid22, AnnouncementTeachesCourse_Editionid) REFERENCES Announcement (id, TeachesTeacherMemberid2, TeachesCourse_Editionid)
388;
389
390ALTER TABLE Survey_Response ADD CONSTRAINT "has response" FOREIGN KEY (Surveyid) REFERENCES Survey (id)
391;
392
393ALTER TABLE Survey ADD CONSTRAINT "has survey" FOREIGN KEY (Course_Editionid) REFERENCES Course_Edition (id)
394;
395
396ALTER TABLE Course_Enrollment ADD CONSTRAINT includes FOREIGN KEY (Semester_Enrollmentid) REFERENCES Semester_Enrollment (id)
397;
398
399ALTER TABLE Announcement_Replies ADD CONSTRAINT "replies to" FOREIGN KEY (Announcementid2, AnnouncementTeachesTeacherMemberid23, AnnouncementTeachesCourse_Editionid2) REFERENCES Announcement (id, TeachesTeacherMemberid2, TeachesCourse_Editionid)
400;
401
402ALTER TABLE Course_Prerequisite ADD CONSTRAINT required FOREIGN KEY (Coursecode2) REFERENCES Course (code)
403;
404
405ALTER TABLE Course_Prerequisite ADD CONSTRAINT requires FOREIGN KEY (Coursecode) REFERENCES Course (code)
406;
407
408ALTER TABLE Survey_Response ADD CONSTRAINT "responded to" FOREIGN KEY (Course_Enrollmentid) REFERENCES Course_Enrollment (id)
409;
410
411ALTER TABLE Exercise_Submission ADD CONSTRAINT submits FOREIGN KEY (Course_Enrollmentid) REFERENCES Course_Enrollment (id)
412;
413
414ALTER TABLE Exercise_Submission ADD CONSTRAINT "submitted for" FOREIGN KEY (Exerciseid) REFERENCES Exercise (id)
415;
416