| | 1 | |
| | 2 | |
| | 3 | # Концептуален дизајн - ЕР Дијаграм и податочни барања |
| | 4 | |
| | 5 | Below is the full ER documentation for your university/faculty database schema, modeled after the format you provided. |
| | 6 | |
| | 7 | --- |
| | 8 | |
| | 9 | ## ЕР Дијаграм |
| | 10 | |
| | 11 |  |
| | 12 | |
| | 13 | *(The ER diagram above represents the reference example. Your schema's conceptual ER diagram is described textually below.)* |
| | 14 | |
| | 15 | ### Conceptual ER Diagram (Textual Description) |
| | 16 | --- |
| | 17 | |
| | 18 | --- |
| | 19 | |
| | 20 | ## Податочни барања |
| | 21 | |
| | 22 | ## Ентитети |
| | 23 | |
| | 24 | 1. **Users** – ентитет кој чува информации за секаков тип корисници на апликацијата (студенти, професори, администратори) |
| | 25 | - __id__ (integer, PK) |
| | 26 | - name (varchar, not null) |
| | 27 | - embg (integer, not null) |
| | 28 | - surname (varchar, not null) |
| | 29 | - index (varchar) |
| | 30 | - bday (timestamp) |
| | 31 | - email (varchar, not null, unique) |
| | 32 | - password (varchar, not null) |
| | 33 | - role (enum: 'student', 'prof', 'admin') |
| | 34 | - created_at (timestamp, default: now()) |
| | 35 | |
| | 36 | 2. **HighSchool** – ентитет кој чува податоци за средното образование на корисникот |
| | 37 | - __user_id*__ (integer, FK → Users.id, unique) |
| | 38 | - gpa (float) — просек вклучувајќи матура |
| | 39 | - type (enum: 'strucen', 'gimnazija') |
| | 40 | |
| | 41 | 3. **Contact** – ентитет кој чува контакт информации за корисникот |
| | 42 | - __user_id*__ (integer, FK → Users.id, unique) |
| | 43 | - city (varchar) |
| | 44 | - municipality (varchar) |
| | 45 | - address (varchar) |
| | 46 | - number (varchar) |
| | 47 | - microsoft_email (varchar) |
| | 48 | |
| | 49 | 4. **EnrolledSemesters** – ентитет кој чува податоци за семестрите во кои е запишан студентот |
| | 50 | - __id__ (integer, PK) |
| | 51 | - user_id (integer, FK → Users.id) |
| | 52 | - quota (enum: 'privatna', 'drzavna') |
| | 53 | - major_id (integer, FK → Major.id) |
| | 54 | - note_ (varchar) |
| | 55 | - student_comment (varchar) |
| | 56 | - created_at (timestamp) |
| | 57 | - last_change (timestamp) |
| | 58 | - completed (timestamp) |
| | 59 | - semeser_id (integer, FK → ActiveSemesters.id) |
| | 60 | |
| | 61 | 5. **ActiveSemesters** – ентитет кој чува податоци за активните семестри (академска година и тип) |
| | 62 | - __id__ (integer, PK) |
| | 63 | - year_ (integer) |
| | 64 | - type (enum: 'summer', 'winter') |
| | 65 | |
| | 66 | 6. **SemestersSubjects** – ентитет кој чува податоци за предметите запишани од студентот во одреден семестар |
| | 67 | - __id__ (integer, PK) |
| | 68 | - user_id (integer, FK → Users.id) |
| | 69 | - enrolled_semesters_id (integer, FK → EnrolledSemesters.id, PK) |
| | 70 | - subjects_id (integer, FK → Subjects.id, PK) |
| | 71 | - professor_id (integer, FK → Users.id) |
| | 72 | - signature (bool) |
| | 73 | |
| | 74 | 7. **Subjects** – ентитет кој чува податоци за предметите |
| | 75 | - __id__ (integer, PK) |
| | 76 | - name (varchar, unique) |
| | 77 | - code (varchar, unique) |
| | 78 | - awarded_credits (integer) |
| | 79 | - dependency_credit (integer) |
| | 80 | |
| | 81 | 8. **Major** – ентитет кој чува податоци за студиските програми (смерови) |
| | 82 | - __id__ (integer, PK) |
| | 83 | - name (varchar) |
| | 84 | |
| | 85 | 9. **MajorSubjects** – ентитет кој ги поврзува студиските програми со предметите и одредува задолжителен семестар |
| | 86 | - __major_id*__ (integer, FK → Major.id, PK) |
| | 87 | - __subject_id*__ (integer, FK → Subjects.id, PK) |
| | 88 | - manditory_semester (int) |
| | 89 | - akreditacija (int) |
| | 90 | |
| | 91 | 10. **PassedSubjects** – ентитет кој чува податоци за положените предмети |
| | 92 | - __passed_id__ (integer, PK) |
| | 93 | - enrolled_id (integer, FK → SemestersSubjects.id) |
| | 94 | - grade (enum: '6', '7', '8', '9', '10') |
| | 95 | - date_passed (timestamp) |
| | 96 | |
| | 97 | 11. **Documents** – ентитет кој чува податоци за документите достапни во системот |
| | 98 | - __id__ (integer, PK) |
| | 99 | - type (varchar) |
| | 100 | - body (text) |
| | 101 | - cost (integer) |
| | 102 | |
| | 103 | 12. **UserDocuments** – ентитет кој ги поврзува корисниците со побараните документи |
| | 104 | - __user_id*__ (integer, FK → Users.id, PK) |
| | 105 | - __document_id*__ (integer, FK → Documents.id, PK) |
| | 106 | |
| | 107 | 13. **Token** – ентитет кој чува автентикациски токени за корисниците |
| | 108 | - __id__ (integer, PK) |
| | 109 | - user_id (integer, FK → Users.id, PK) |
| | 110 | - token (varchar) |
| | 111 | - expires_at (timestamp) |
| | 112 | - is_valid (bool) |
| | 113 | |
| | 114 | 14. **Payment** – ентитет кој чува податоци за уплатите поврзани со запишување семестри |
| | 115 | - __id__ (integer, PK) |
| | 116 | - user_id (integer, FK → Users.id, PK) |
| | 117 | - enrollment_id (integer, FK → EnrolledSemesters.id, PK) |
| | 118 | - amount (int) |
| | 119 | - ukim (int) |
| | 120 | |
| | 121 | 15. **EnrollmentInfo** – ентитет кој чува историски податоци за запишување на студентот |
| | 122 | - __id__ (integer, PK) |
| | 123 | - user_id (integer, FK → Users.id) |
| | 124 | - quota (enum: 'privatna', 'drzavna') |
| | 125 | - major_id (integer, FK → Major.id) |
| | 126 | - enrollment_year (integer) |
| | 127 | |
| | 128 | 16. **DependencySubject** – ентитет кој чува зависности помеѓу предметите (предуслови) |
| | 129 | - subject_id (integer, FK → Subjects.id) |
| | 130 | - dependency_id (integer, FK → Subjects.id) |
| | 131 | |
| | 132 | 17. **ProfessourSubjects** – ентитет кој чува информации за тоа кој професор предава кој предмет во кој активен семестар |
| | 133 | - prof_id (integer, FK → Users.id) |
| | 134 | - active_semester_id (integer, FK → ActiveSemesters.id) |
| | 135 | - subject_id (integer, FK → Subjects.id) |
| | 136 | |
| | 137 | --- |
| | 138 | |
| | 139 | ## Релации |
| | 140 | |
| | 141 | 1. **has_high_school** (Users ↔ HighSchool, 1:1) |
| | 142 | Секој корисник може да има точно еден запис за средно образование. |
| | 143 | |
| | 144 | 2. **has_contact** (Users ↔ Contact, 1:1) |
| | 145 | Секој корисник може да има точно еден запис за контакт информации. |
| | 146 | |
| | 147 | 3. **enrolls_in** (Users ↔ EnrolledSemesters, 1:N) |
| | 148 | Еден корисник (студент) може да биде запишан во повеќе семестри. |
| | 149 | |
| | 150 | 4. **belongs_to_major** (EnrolledSemesters ↔ Major, N:1) |
| | 151 | Секое запишување е поврзано со точно една студиска програма. |
| | 152 | |
| | 153 | 5. **in_active_semester** (EnrolledSemesters ↔ ActiveSemesters, N:1) |
| | 154 | Секое запишување е поврзано со точно еден активен семестар. |
| | 155 | |
| | 156 | 6. **takes_subject** (Users ↔ SemestersSubjects, 1:N) |
| | 157 | Еден студент може да запише повеќе предмети во семестри. |
| | 158 | |
| | 159 | 7. **taught_by** (SemestersSubjects ↔ Users, N:1) |
| | 160 | Секој запишан предмет има точно еден задолжен професор. |
| | 161 | |
| | 162 | 8. **semester_has_subject** (SemestersSubjects ↔ Subjects, N:1) |
| | 163 | Секој запис во SemestersSubjects се однесува на точно еден предмет. |
| | 164 | |
| | 165 | 9. **enrolled_in_semester** (SemestersSubjects ↔ EnrolledSemesters, N:1) |
| | 166 | Секој запис за предмет е поврзан со точно едно запишување на семестар. |
| | 167 | |
| | 168 | 10. **passed** (SemestersSubjects ↔ PassedSubjects, 1:1) |
| | 169 | Секој запишан предмет може да има најмногу еден запис за положување. |
| | 170 | |
| | 171 | 11. **major_includes** (Major ↔ MajorSubjects, 1:N) |
| | 172 | Една студиска програма вклучува повеќе предмети. |
| | 173 | |
| | 174 | 12. **subject_in_major** (Subjects ↔ MajorSubjects, 1:N) |
| | 175 | Еден предмет може да биде дел од повеќе студиски програми. |
| | 176 | |
| | 177 | 13. **depends_on** (Subjects ↔ Subjects, N:M — преку DependencySubject) |
| | 178 | Еден предмет може да има повеќе предуслови (зависности) и може да биде предуслов за повеќе други предмети. Само-референцирачка релација. |
| | 179 | |
| | 180 | 14. **requests_document** (Users ↔ Documents, N:M — преку UserDocuments) |
| | 181 | Корисниц��те можат да побараат повеќе документи, и еден документ може да биде побаран од повеќе корисници. |
| | 182 | |
| | 183 | 15. **has_token** (Users ↔ Token, 1:N) |
| | 184 | Еден корисник може да има повеќе автентикациски токени. |
| | 185 | |
| | 186 | 16. **makes_payment** (Users ↔ Payment, 1:N) |
| | 187 | Еден корисник може да изврши повеќе уплати. |
| | 188 | |
| | 189 | 17. **payment_for_enrollment** (Payment ↔ EnrolledSemesters, N:1) |
| | 190 | Секоја уплата е поврзана со точно едно запишување на семестар. |
| | 191 | |
| | 192 | 18. **enrollment_history** (Users ↔ EnrollmentInfo, 1:N) |
| | 193 | Еден корисник може да има повеќе записи за историја на запишување. |
| | 194 | |
| | 195 | 19. **enrollment_info_major** (EnrollmentInfo ↔ Major, N:1) |
| | 196 | Секој запис за запишување е поврзан со точно една студиска програма. |
| | 197 | |
| | 198 | 20. **professor_teaches** (Users ↔ ProfessourSubjects, 1:N) |
| | 199 | Еден професор може да предава повеќе предмети во различни семестри. |
| | 200 | |
| | 201 | 21. **prof_subject_semester** (ProfessourSubjects ↔ ActiveSemesters, N:1) |
| | 202 | Секој запис за предавање е поврзан со точно еден активен семестар. |
| | 203 | |
| | 204 | 22. **prof_subject** (ProfessourSubjects ↔ Subjects, N:1) |
| | 205 | Секој запис за предавање се однесува на точно еден предмет. |
| | 206 | |
| | 207 | --- |
| | 208 | |
| | 209 | ## Забелешки |
| | 210 | |
| | 211 | - Ентитетот **Users** служи како генерален ентитет за сите типови корисници (студенти, професори, администратори), разликувани преку атрибутот `role`. |
| | 212 | - **HighSchool** и **Contact** се во 1:1 релација со Users (секој корисник има најмногу еден запис). |
| | 213 | - **DependencySubject** претставува само-референцирачка N:M релација врз ентитетот Subjects за дефинирање на предуслови. |
| | 214 | - **SemestersSubjects** е централна асоцијативна табела која го поврзува студентот, запишаниот семестар, предметот и професорот. |
| | 215 | - **ProfessourSubjects** е одделна табела што експлицитно го дефинира распоредот на професори по предмети и семестри, независно од студентските записи. |