source: sql/iknow.dbml@ c42181c

Last change on this file since c42181c was c42181c, checked in by Stefan-Saveski <stefansaveski19@…>, 7 days ago

Refactor payment model to remove redundant user_id, addressing BCNF violation in Phase 5 normalization

  • Property mode set to 100644
File size: 5.4 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 enrollment_id integer [not null]
153 amount integer [not null]
154}
155
156Table project.major_subjects {
157 major_id integer [not null]
158 subject_id integer [not null]
159 mandatory_semester integer [not null]
160
161 indexes {
162 (major_id, subject_id) [pk]
163 }
164}
165
166Table project.dependency_subject {
167 subject_id integer [not null]
168 dependency_id integer [not null]
169
170 indexes {
171 (subject_id, dependency_id) [pk]
172 }
173}
174
175Table project.professour_subjects {
176 prof_id integer [not null]
177 active_semester_id integer [not null]
178 subject_id integer [not null]
179
180 indexes {
181 (prof_id, active_semester_id, subject_id) [pk]
182 }
183}
184
185// ---------- Relationships ----------
186Ref: project.high_school.user_id - project.users.id // has_hs (1:1)
187Ref: project.contact.user_id - project.users.id // has_contact (1:1)
188Ref: project.token.user_id > project.users.id // has_token
189Ref: project.payment.enrollment_id > project.enrolled_semesters.id // for_enrollment
190Ref: project.enrolled_semesters.user_id > project.users.id // submits
191Ref: project.enrolled_semesters.major_id > project.major.id // for_major
192Ref: project.enrolled_semesters.semester_id > project.active_semesters.id // during
193Ref: project.semesters_subjects.enrolled_semesters_id > project.enrolled_semesters.id // contains
194Ref: project.semesters_subjects.subjects_id > project.subjects.id // taken_in
195Ref: project.semesters_subjects.professor_id > project.users.id // teaches
196Ref: project.passed_subjects.enrolled_id - project.semesters_subjects.id // results_in (1:1)
197Ref: project.user_documents.user_id > project.users.id // owns
198Ref: project.user_documents.document_id > project.documents.id // owns
199Ref: project.major_subjects.major_id > project.major.id // includes
200Ref: project.major_subjects.subject_id > project.subjects.id // includes
201Ref: project.dependency_subject.subject_id > project.subjects.id // requires (dependent)
202Ref: project.dependency_subject.dependency_id > project.subjects.id // requires (prerequisite)
203Ref: project.professour_subjects.prof_id > project.users.id // teaches_subject
204Ref: project.professour_subjects.active_semester_id > project.active_semesters.id // teaches_subject
205Ref: project.professour_subjects.subject_id > project.subjects.id // teaches_subject
Note: See TracBrowser for help on using the repository browser.