source: sql/iknow.dbml@ a12988e

Last change on this file since a12988e was ea40556, checked in by Stefan-Saveski <stefansaveski19@…>, 8 days ago
  • ready for presentation
  • Property mode set to 100644
File size: 5.5 KB
Line 
1// IKnow / FINKI - dbdiagram.io (DBML) source
2// Generated from schema_creation.sql, which is the source of truth.
3// Paste into https://dbdiagram.io to render the relational diagram.
4
5Enum project.user_role {
6 student
7 prof
8 admin
9}
10
11Enum project.hs_type {
12 strucen
13 gimnazija
14}
15
16Enum project.quota_type {
17 privatna
18 drzavna
19 stipendija
20}
21
22Enum project.semester_type {
23 summer
24 winter
25}
26
27Enum project.grade_type {
28 "6"
29 "7"
30 "8"
31 "9"
32 "10"
33}
34
35Table project.users {
36 id integer [pk, increment]
37 name varchar(100) [not null]
38 embg varchar(13)
39 surname varchar(100) [not null]
40 index varchar(20)
41 bday timestamp
42 email varchar(150) [not null, unique]
43 password varchar(255) [not null]
44 role project.user_role [not null]
45 quota project.quota_type
46 enrollment_year integer
47 created_at timestamp [not null, default: `now()`]
48}
49
50Table project.high_school {
51 id integer [pk, increment]
52 user_id integer [not null, unique]
53 gpa real [not null]
54 type project.hs_type [not null]
55}
56
57Table project.contact {
58 id integer [pk, increment]
59 user_id integer [not null, unique]
60 city varchar(100) [not null]
61 municipality varchar(100) [not null]
62 address varchar(150) [not null]
63 number varchar(20) [not null]
64 microsoft_email varchar(150)
65}
66
67Table project.major {
68 id integer [pk, increment]
69 name varchar(150) [not null]
70}
71
72Table project.active_semesters {
73 id integer [pk, increment]
74 year integer [not null]
75 type project.semester_type [not null]
76
77 indexes {
78 (year, type) [unique]
79 }
80}
81
82Table project.subjects {
83 id integer [pk, increment]
84 name varchar(150) [not null, unique]
85 code varchar(30) [not null, unique]
86 awarded_credits integer [not null]
87 dependency_credit integer
88}
89
90Table project.enrolled_semesters {
91 id integer [pk, increment]
92 user_id integer [not null]
93 quota project.quota_type [not null]
94 major_id integer [not null]
95 note varchar(255)
96 student_comment varchar(255)
97 created_at timestamp [not null, default: `now()`]
98 last_change timestamp
99 completed timestamp
100 semester_id integer [not null]
101
102 indexes {
103 (user_id, semester_id) [unique]
104 }
105}
106
107Table project.semesters_subjects {
108 id integer [pk, increment]
109 enrolled_semesters_id integer [not null]
110 subjects_id integer [not null]
111 professor_id integer [not null]
112 signature boolean [not null, default: false]
113
114 indexes {
115 (enrolled_semesters_id, subjects_id) [unique]
116 }
117}
118
119Table project.passed_subjects {
120 id integer [pk, increment]
121 enrolled_id integer [not null, unique]
122 grade project.grade_type [not null]
123 date_passed timestamp [not null]
124}
125
126Table project.documents {
127 id integer [pk, increment]
128 type varchar(100) [not null]
129 body text [not null]
130 cost integer [not null]
131}
132
133Table project.user_documents {
134 user_id integer [not null]
135 document_id integer [not null]
136
137 indexes {
138 (user_id, document_id) [pk]
139 }
140}
141
142Table project.token {
143 id integer [pk, increment]
144 user_id integer [not null]
145 token varchar(255) [not null]
146 expires_at timestamp [not null]
147 is_valid boolean [not null, default: true]
148}
149
150Table project.payment {
151 id integer [pk, increment]
152 user_id integer [not null]
153 enrollment_id integer [not null]
154 amount integer [not null]
155}
156
157Table project.major_subjects {
158 major_id integer [not null]
159 subject_id integer [not null]
160 mandatory_semester integer [not null]
161
162 indexes {
163 (major_id, subject_id) [pk]
164 }
165}
166
167Table project.dependency_subject {
168 subject_id integer [not null]
169 dependency_id integer [not null]
170
171 indexes {
172 (subject_id, dependency_id) [pk]
173 }
174}
175
176Table project.professour_subjects {
177 prof_id integer [not null]
178 active_semester_id integer [not null]
179 subject_id integer [not null]
180
181 indexes {
182 (prof_id, active_semester_id, subject_id) [pk]
183 }
184}
185
186// ---------- Relationships ----------
187Ref: project.high_school.user_id - project.users.id // has_hs (1:1)
188Ref: project.contact.user_id - project.users.id // has_contact (1:1)
189Ref: project.token.user_id > project.users.id // has_token
190Ref: project.payment.user_id > project.users.id // pays
191Ref: project.payment.enrollment_id > project.enrolled_semesters.id // for_enrollment
192Ref: project.enrolled_semesters.user_id > project.users.id // submits
193Ref: project.enrolled_semesters.major_id > project.major.id // for_major
194Ref: project.enrolled_semesters.semester_id > project.active_semesters.id // during
195Ref: project.semesters_subjects.enrolled_semesters_id > project.enrolled_semesters.id // contains
196Ref: project.semesters_subjects.subjects_id > project.subjects.id // taken_in
197Ref: project.semesters_subjects.professor_id > project.users.id // teaches
198Ref: project.passed_subjects.enrolled_id - project.semesters_subjects.id // results_in (1:1)
199Ref: project.user_documents.user_id > project.users.id // owns
200Ref: project.user_documents.document_id > project.documents.id // owns
201Ref: project.major_subjects.major_id > project.major.id // includes
202Ref: project.major_subjects.subject_id > project.subjects.id // includes
203Ref: project.dependency_subject.subject_id > project.subjects.id // requires (dependent)
204Ref: project.dependency_subject.dependency_id > project.subjects.id // requires (prerequisite)
205Ref: project.professour_subjects.prof_id > project.users.id // teaches_subject
206Ref: project.professour_subjects.active_semester_id > project.active_semesters.id // teaches_subject
207Ref: project.professour_subjects.subject_id > project.subjects.id // teaches_subject
Note: See TracBrowser for help on using the repository browser.