Changes between Version 1 and Version 2 of Ph1
- Timestamp:
- 07/01/26 19:30:59 (6 days ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ph1
v1 v2 1 == Концептуален дизајн - ЕР Дијаграм и податочни побарувања 1 2 3 === ЕР Дијаграм 2 4 3 # Концептуален дизајн - ЕР Дијаграм и податочни барања 5 [[Image(FINKI_ER_Diagram.png)]] 4 6 5 Below is the full ER documentation for your university/faculty database schema, modeled after the format you provided. 7 === Податочни барања 6 8 7 --- 9 ==== Ентитети 8 10 9 ## ЕР Дијаграм 11 '''users''' – ентитет кој чува податоци за секаков тип корисници на системот (студент, професор, администратор) 12 * id (integer) 13 * name (varchar) 14 * embg (integer) 15 * surname (varchar) 16 * index (varchar) 17 * bday (timestamp) 18 * email (varchar, not null, unique) 19 * password (varchar, not null) 20 * role (enum: student, prof, admin) 21 * created_at (timestamp) 10 22 11  23 '''high_school''' – ентитет кој чува податоци за средношколското образование на студентот 24 * user_id* (integer, unique) 25 * gpa (float) 26 * type (enum: strucen, gimnazija) 12 27 13 *(The ER diagram above represents the reference example. Your schema's conceptual ER diagram is described textually below.)* 28 '''contact''' – ентитет кој чува контакт податоци за корисникот 29 * user_id* (integer, unique) 30 * city (varchar) 31 * municipality (varchar) 32 * address (varchar) 33 * number (varchar) 34 * microsoft_email (varchar) 14 35 15 ### Conceptual ER Diagram (Textual Description) 16 --- 36 '''enrolled_semesters''' – ентитет кој чува податоци за запишани семестри од страна на студентот 37 * id (integer) 38 * quota (enum: privatna, drzavna) 39 * note_ (varchar) 40 * student_comment (varchar) 41 * created_at (timestamp) 42 * last_change (timestamp) 43 * completed (timestamp) 17 44 18 --- 45 '''active_semesters''' – ентитет кој чува податоци за активните (тековните) семестри 46 * id (integer) 47 * year_ (integer) 48 * type (enum: summer, winter) 19 49 20 ## Податочни барања 50 '''semesters_subjects''' – ентитет кој чува податоци за предметите запишани во определен семестар 51 * id (integer) 52 * signature (bool) 21 53 22 ## Ентитети 54 '''subjects''' – ентитет кој чува податоци за предметите 55 * id (integer) 56 * name (varchar, not null, unique) 57 * code (varchar, not null, unique) 58 * awarded_credits (integer) 59 * dependency_credit (integer) 23 60 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()) 61 '''major''' – ентитет кој чува податоци за студиските програми 62 * id (integer) 63 * name (varchar) 35 64 36 2. **HighSchool** – ентитет кој чува податоци за средното образование на корисникот 37 - __user_id*__ (integer, FK → Users.id, unique)38 - gpa (float) — просек вклучувајќи матура39 - type (enum: 'strucen', 'gimnazija')65 '''passed_subjects''' – ентитет кој чува податоци за положените предмети 66 * passed_id (integer) 67 * grade (enum: 6, 7, 8, 9, 10) 68 * date_passed (timestamp) 40 69 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) 70 '''documents''' – ентитет кој чува податоци за официјалните документи 71 * id (integer) 72 * type (varchar) 73 * body (text) 74 * cost (integer) 48 75 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) 76 '''token''' – ентитет кој чува податоци за токените за автентикација на корисникот 77 * id (integer) 78 * token (varchar) 79 * expires_at (timestamp) 80 * is_valid (bool) 60 81 61 5. **ActiveSemesters** – ентитет кој чува податоци за активните семестри (академска година и тип) 62 - __id__ (integer, PK)63 - year_ (integer)64 - type (enum: 'summer', 'winter')82 '''Payment''' – ентитет кој чува податоци за уплатите на корисникот 83 * id (integer) 84 * amount (int) 85 * ukim (int) 65 86 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) 87 '''enrollment_info''' – ентитет кој чува податоци за уписот на корисникот 88 * id (integer) 89 * quota (enum: privatna, drzavna) 90 * enrollment_year (integer) 73 91 74 7. **Subjects** – ентитет кој чува податоци за предметите 75 - __id__ (integer, PK) 76 - name (varchar, unique) 77 - code (varchar, unique) 78 - awarded_credits (integer) 79 - dependency_credit (integer) 92 ==== Релации 80 93 81 8. **Major** – ентитет кој чува податоци за студиските програми (смерови) 82 - __id__ (integer, PK) 83 - name (varchar) 94 '''has_hs''' (users ↔ high_school, 1:1) 95 Секој корисник (студент) има поврзани средношколски податоци. 84 96 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) 97 '''has_contact''' (users ↔ contact, 1:1) 98 Секој корисник има поврзани контакт податоци. 90 99 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) 100 '''has_token''' (users ↔ token, 1:N) 101 Корисникот може да има повеќе токени за автентикација. 96 102 97 11. **Documents** – ентитет кој чува податоци за документите достапни во системот 98 - __id__ (integer, PK) 99 - type (varchar) 100 - body (text) 101 - cost (integer) 103 '''submits''' (users ↔ enrolled_semesters, 1:N) 104 Корисникот може да запише повеќе семестри. 102 105 103 12. **UserDocuments** – ентитет кој ги поврзува корисниците со побараните документи 104 - __user_id*__ (integer, FK → Users.id, PK) 105 - __document_id*__ (integer, FK → Documents.id, PK) 106 '''for_major''' (enrolled_semesters ↔ major, N:1) 107 Секој запишан семестар припаѓа на определена студиска програма. 106 108 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) 109 '''during''' (enrolled_semesters ↔ active_semesters, N:1) 110 Секој запишан семестар се одвива во рамки на определен активен семестар. 113 111 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) 112 '''registers''' (users ↔ enrollment_info, 1:N) 113 Корисникот има информации за упис на студиска програма. 120 114 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) 115 '''chosen_in''' (enrollment_info ↔ major, N:1) 116 Информациите за упис се однесуваат на определена студиска програма. 127 117 128 16. **DependencySubject** – ентитет кој чува зависности помеѓу предметите (предуслови) 129 - subject_id (integer, FK → Subjects.id) 130 - dependency_id (integer, FK → Subjects.id) 118 '''pays''' (users ↔ Payment, 1:N) 119 Корисникот може да изврши повеќе уплати. 131 120 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) 121 '''for_enrollment''' (Payment ↔ enrolled_semesters, N:1) 122 Секоја уплата се однесува на определен запишан семестар. 136 123 137 --- 124 '''contains''' (enrolled_semesters ↔ semesters_subjects, 1:N) 125 Секој запишан семестар содржи повеќе предмети. 138 126 139 ## Релации 127 '''enrolled_by''' (users ↔ semesters_subjects, 1:N) 128 Секој запишан предмет во семестар припаѓа на определен студент. 140 129 141 1. **has_high_school** (Users ↔ HighSchool, 1:1)142 Секој корисник може да има точно еден запис за средно образование.130 '''taken_in''' (subjects ↔ semesters_subjects, 1:N) 131 Секој предмет може да се слуша во рамки на повеќе запишани семестри. 143 132 144 2. **has_contact** (Users ↔ Contact, 1:1)145 Секој корисник може да има точно еден запис за контакт информации.133 '''teaches''' (users ↔ semesters_subjects, 1:N) 134 Професорот предава определен предмет во определен семестар. 146 135 147 3. **enrolls_in** (Users ↔ EnrolledSemesters, 1:N)148 Еден корисник (студент) може да биде запишан во повеќе семестри.136 '''results_in''' (semesters_subjects ↔ passed_subjects, 1:1) 137 Запишаниот предмет резултира со положен предмет. 149 138 150 4. **belongs_to_major** (EnrolledSemesters ↔ Major, N:1)151 Секое запишување е поврзано со точно една студиска програма.139 '''owns''' (users ↔ documents, N:M) 140 Корисникот може да поседува/бара повеќе документи, а еден документ може да припаѓа на повеќе корисници. 152 141 153 5. **in_active_semester** (EnrolledSemesters ↔ ActiveSemesters, N:1)154 Секое запишување е поврзано со точно еден активен семестар.142 '''includes''' (major ↔ subjects, N:M) 143 Студиската програма вклучува предмети, при што за секој предмет се чуваат задолжителен семестар (manditory_semester) и акредитација (akreditacija). 155 144 156 6. **takes_subject** (Users ↔ SemestersSubjects, 1:N)157 Еден студент може да запише повеќе предмети во семестри.145 '''requires''' (subjects ↔ subjects, N:M) 146 Предметот може да има предуслови, односно да зависи од положени други предмети. 158 147 159 7. **taught_by** (SemestersSubjects ↔ Users, N:1)160 Секој запишан предмет има точно еден задолжен професор.148 '''teaches_subject''' (users ↔ subjects ↔ active_semesters, тернарна) 149 Професорот предава определен предмет во определен активен семестар. 161 150 162 8. **semester_has_subject** (SemestersSubjects ↔ Subjects, N:1) 163 Секој запис во SemestersSubjects се однесува на точно еден предмет. 151 ==== Историјат 164 152 165 9. **enrolled_in_semester** (SemestersSubjects ↔ EnrolledSemesters, N:1) 166 Секој запис за предмет е поврзан со точно едно запишување на семестар. 153 '''Верзија 1''' - Почетна верзија 167 154 168 10. **passed** (SemestersSubjects ↔ PassedSubjects, 1:1) 169 Секој запишан предмет може да има најмногу еден запис за положување. 155 '''Верзија 2''' 156 * Додадени се средношколски (high_school) и контакт (contact) податоци како посебни ентитети поврзани 1:1 со корисникот. 157 * Воведени се токени (token) за безбедна автентикација на корисникот. 170 158 171 11. **major_includes** (Major ↔ MajorSubjects, 1:N) 172 Една студиска програма вклучува повеќе предмети. 159 '''Верзија 3''' 160 * Раздвоени се информациите за упис (enrollment_info) од запишаните семестри (enrolled_semesters). 161 * Додаден е ентитет за уплати (Payment) поврзан со запишаните семестри. 173 162 174 12. **subject_in_major** (Subjects ↔ MajorSubjects, 1:N) 175 Еден предмет може да биде дел од повеќе студиски програми. 163 '''Верзија 4''' 164 * Воведена е зависност меѓу предмети (requires) за моделирање на предусловите. 165 * Доделувањето на професор на предмет е моделирано како тернарна релација (teaches_subject) меѓу корисник, предмет и активен семестар. 166 * Секој запишан предмет во семестар (semesters_subjects) дополнително се поврзува со студентот преку релацијата enrolled_by. 176 167 177 13. **depends_on** (Subjects ↔ Subjects, N:M — преку DependencySubject) 178 Еден предмет може да има повеќе предуслови (зависности) и може да биде предуслов за повеќе други предмети. Само-референцирачка релација. 168 === Статус 179 169 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** е одделна табела што експлицитно го дефинира распоредот на професори по предмети и семестри, независно од студентските записи. 170 ''' [[span(style=color: #008000, Завршено )]] '''
