source: sql/schema_creation.sql@ 1b20b22

Last change on this file since 1b20b22 was 1b20b22, checked in by Stefan-Saveski <stefansaveski19@…>, 8 days ago
  • ready for presentation
  • Property mode set to 100644
File size: 5.1 KB
Line 
1DROP SCHEMA IF EXISTS project CASCADE;
2CREATE SCHEMA project;
3
4SET search_path TO project;
5
6CREATE TYPE user_role AS ENUM ('student', 'prof', 'admin');
7CREATE TYPE hs_type AS ENUM ('strucen', 'gimnazija');
8CREATE TYPE quota_type AS ENUM ('privatna', 'drzavna', 'stipendija');
9CREATE TYPE semester_type AS ENUM ('summer', 'winter');
10CREATE TYPE grade_type AS ENUM ('6', '7', '8', '9', '10');
11
12CREATE TABLE users (
13 id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
14 name VARCHAR(100) NOT NULL,
15 embg VARCHAR(13),
16 surname VARCHAR(100) NOT NULL,
17 "index" VARCHAR(20),
18 bday TIMESTAMP,
19 email VARCHAR(150) NOT NULL UNIQUE,
20 password VARCHAR(255) NOT NULL,
21 role user_role NOT NULL,
22 quota quota_type,
23 enrollment_year INTEGER,
24 created_at TIMESTAMP NOT NULL DEFAULT now()
25);
26
27CREATE TABLE high_school (
28 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
29 user_id INTEGER NOT NULL UNIQUE REFERENCES users (id),
30 gpa REAL NOT NULL,
31 type hs_type NOT NULL
32);
33
34CREATE TABLE contact (
35 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
36 user_id INTEGER NOT NULL UNIQUE REFERENCES users (id),
37 city VARCHAR(100) NOT NULL,
38 municipality VARCHAR(100) NOT NULL,
39 address VARCHAR(150) NOT NULL,
40 number VARCHAR(20) NOT NULL,
41 microsoft_email VARCHAR(150)
42);
43
44CREATE TABLE major (
45 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
46 name VARCHAR(150) NOT NULL
47);
48
49CREATE TABLE active_semesters (
50 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
51 year INTEGER NOT NULL,
52 type semester_type NOT NULL,
53 UNIQUE (year, type)
54);
55
56CREATE TABLE subjects (
57 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
58 name VARCHAR(150) NOT NULL UNIQUE,
59 code VARCHAR(30) NOT NULL UNIQUE,
60 awarded_credits INTEGER NOT NULL,
61 dependency_credit INTEGER
62);
63
64CREATE TABLE enrolled_semesters (
65 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
66 user_id INTEGER NOT NULL REFERENCES users (id),
67 quota quota_type NOT NULL,
68 major_id INTEGER NOT NULL REFERENCES major (id),
69 note VARCHAR(255),
70 student_comment VARCHAR(255),
71 created_at TIMESTAMP NOT NULL DEFAULT now(),
72 last_change TIMESTAMP,
73 completed TIMESTAMP,
74 semester_id INTEGER NOT NULL REFERENCES active_semesters (id),
75 UNIQUE (user_id, semester_id)
76);
77
78CREATE TABLE semesters_subjects (
79 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
80 enrolled_semesters_id INTEGER NOT NULL REFERENCES enrolled_semesters (id),
81 subjects_id INTEGER NOT NULL REFERENCES subjects (id),
82 professor_id INTEGER NOT NULL REFERENCES users (id),
83 signature BOOLEAN NOT NULL DEFAULT FALSE,
84 UNIQUE (enrolled_semesters_id, subjects_id)
85);
86
87CREATE TABLE passed_subjects (
88 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
89 enrolled_id INTEGER NOT NULL UNIQUE REFERENCES semesters_subjects (id),
90 grade grade_type NOT NULL,
91 date_passed TIMESTAMP NOT NULL
92);
93
94CREATE TABLE documents (
95 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
96 type VARCHAR(100) NOT NULL,
97 body TEXT NOT NULL,
98 cost INTEGER NOT NULL
99);
100
101CREATE TABLE user_documents (
102 user_id INTEGER NOT NULL REFERENCES users (id),
103 document_id INTEGER NOT NULL REFERENCES documents (id),
104 PRIMARY KEY (user_id, document_id)
105);
106
107CREATE TABLE token (
108 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
109 user_id INTEGER NOT NULL REFERENCES users (id),
110 token VARCHAR(255) NOT NULL,
111 expires_at TIMESTAMP NOT NULL,
112 is_valid BOOLEAN NOT NULL DEFAULT TRUE
113);
114
115CREATE TABLE payment (
116 id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
117 user_id INTEGER NOT NULL REFERENCES users (id),
118 enrollment_id INTEGER NOT NULL REFERENCES enrolled_semesters (id),
119 amount INTEGER NOT NULL
120);
121
122CREATE TABLE major_subjects (
123 major_id INTEGER NOT NULL REFERENCES major (id),
124 subject_id INTEGER NOT NULL REFERENCES subjects (id),
125 mandatory_semester INTEGER NOT NULL,
126 PRIMARY KEY (major_id, subject_id)
127);
128
129CREATE TABLE dependency_subject (
130 subject_id INTEGER NOT NULL REFERENCES subjects (id),
131 dependency_id INTEGER NOT NULL REFERENCES subjects (id),
132 PRIMARY KEY (subject_id, dependency_id),
133 CHECK (subject_id <> dependency_id)
134);
135
136CREATE TABLE professour_subjects (
137 prof_id INTEGER NOT NULL REFERENCES users (id),
138 active_semester_id INTEGER NOT NULL REFERENCES active_semesters (id),
139 subject_id INTEGER NOT NULL REFERENCES subjects (id),
140 PRIMARY KEY (prof_id, active_semester_id, subject_id)
141);
Note: See TracBrowser for help on using the repository browser.