Changes between Version 1 and Version 2 of Ph1


Ignore:
Timestamp:
07/01/26 19:30:59 (6 days ago)
Author:
233149
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ph1

    v1 v2  
     1== Концептуален дизајн - ЕР Дијаграм и податочни побарувања
    12
     3=== ЕР Дијаграм
    24
    3 # Концептуален дизајн - ЕР Дијаграм и податочни барања
     5 [[Image(FINKI_ER_Diagram.png)]]
    46
    5 Below is the full ER documentation for your university/faculty database schema, modeled after the format you provided.
     7=== Податочни барања
    68
    7 ---
     9==== Ентитети
    810
    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)
    1022
    11 ![image1](image1)
     23 '''high_school''' – ентитет кој чува податоци за средношколското образование на студентот
     24 * user_id* (integer, unique)
     25 * gpa (float)
     26 * type (enum: strucen, gimnazija)
    1227
    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)
    1435
    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)
    1744
    18 ---
     45 '''active_semesters''' – ентитет кој чува податоци за активните (тековните) семестри
     46 * id (integer)
     47 * year_ (integer)
     48 * type (enum: summer, winter)
    1949
    20 ## Податочни барања
     50 '''semesters_subjects''' – ентитет кој чува податоци за предметите запишани во определен семестар
     51 * id (integer)
     52 * signature (bool)
    2153
    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)
    2360
    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)
    3564
    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)
    4069
    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)
    4875
    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)
    6081
    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)
    6586
    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)
    7391
    74 7. **Subjects** – ентитет кој чува податоци за предметите
    75    - __id__ (integer, PK)
    76    - name (varchar, unique)
    77    - code (varchar, unique)
    78    - awarded_credits (integer)
    79    - dependency_credit (integer)
     92==== Релации
    8093
    81 8. **Major** – ентитет кој чува податоци за студиските програми (смерови)
    82    - __id__ (integer, PK)
    83    - name (varchar)
     94 '''has_hs''' (users ↔ high_school, 1:1)
     95 Секој корисник (студент) има поврзани средношколски податоци.
    8496
    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 Секој корисник има поврзани контакт податоци.
    9099
    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 Корисникот може да има повеќе токени за автентикација.
    96102
    97 11. **Documents** – ентитет кој чува податоци за документите достапни во системот
    98     - __id__ (integer, PK)
    99     - type (varchar)
    100     - body (text)
    101     - cost (integer)
     103 '''submits''' (users ↔ enrolled_semesters, 1:N)
     104 Корисникот може да запише повеќе семестри.
    102105
    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 Секој запишан семестар припаѓа на определена студиска програма.
    106108
    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 Секој запишан семестар се одвива во рамки на определен активен семестар.
    113111
    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 Корисникот има информации за упис на студиска програма.
    120114
    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 Информациите за упис се однесуваат на определена студиска програма.
    127117
    128 16. **DependencySubject** – ентитет кој чува зависности помеѓу предметите (предуслови)
    129     - subject_id (integer, FK → Subjects.id)
    130     - dependency_id (integer, FK → Subjects.id)
     118 '''pays''' (users ↔ Payment, 1:N)
     119 Корисникот може да изврши повеќе уплати.
    131120
    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 Секоја уплата се однесува на определен запишан семестар.
    136123
    137 ---
     124 '''contains''' (enrolled_semesters ↔ semesters_subjects, 1:N)
     125 Секој запишан семестар содржи повеќе предмети.
    138126
    139 ## Релации
     127 '''enrolled_by''' (users ↔ semesters_subjects, 1:N)
     128 Секој запишан предмет во семестар припаѓа на определен студент.
    140129
    141 1. **has_high_school** (Users ↔ HighSchool, 1:1)
    142    Секој корисник може да има точно еден запис за средно образование.
     130 '''taken_in''' (subjects ↔ semesters_subjects, 1:N)
     131 Секој предмет може да се слуша во рамки на повеќе запишани семестри.
    143132
    144 2. **has_contact** (Users ↔ Contact, 1:1)
    145    Секој корисник може да има точно еден запис за контакт информации.
     133 '''teaches''' (users ↔ semesters_subjects, 1:N)
     134 Професорот предава определен предмет во определен семестар.
    146135
    147 3. **enrolls_in** (Users ↔ EnrolledSemesters, 1:N)
    148    Еден корисник (студент) може да биде запишан во повеќе семестри.
     136 '''results_in''' (semesters_subjects ↔ passed_subjects, 1:1)
     137 Запишаниот предмет резултира со положен предмет.
    149138
    150 4. **belongs_to_major** (EnrolledSemesters ↔ Major, N:1)
    151    Секое запишување е поврзано со точно една студиска програма.
     139 '''owns''' (users ↔ documents, N:M)
     140 Корисникот може да поседува/бара повеќе документи, а еден документ може да припаѓа на повеќе корисници.
    152141
    153 5. **in_active_semester** (EnrolledSemesters ↔ ActiveSemesters, N:1)
    154    Секое запишување е поврзано со точно еден активен семестар.
     142 '''includes''' (major ↔ subjects, N:M)
     143 Студиската програма вклучува предмети, при што за секој предмет се чуваат задолжителен семестар (manditory_semester) и акредитација (akreditacija).
    155144
    156 6. **takes_subject** (Users ↔ SemestersSubjects, 1:N)
    157    Еден студент може да запише повеќе предмети во семестри.
     145 '''requires''' (subjects ↔ subjects, N:M)
     146 Предметот може да има предуслови, односно да зависи од положени други предмети.
    158147
    159 7. **taught_by** (SemestersSubjects ↔ Users, N:1)
    160    Секој запишан предмет има точно еден задолжен професор.
     148 '''teaches_subject''' (users ↔ subjects ↔ active_semesters, тернарна)
     149 Професорот предава определен предмет во определен активен семестар.
    161150
    162 8. **semester_has_subject** (SemestersSubjects ↔ Subjects, N:1)
    163    Секој запис во SemestersSubjects се однесува на точно еден предмет.
     151==== Историјат
    164152
    165 9. **enrolled_in_semester** (SemestersSubjects ↔ EnrolledSemesters, N:1)
    166    Секој запис за предмет е поврзан со точно едно запишување на семестар.
     153 '''Верзија 1''' - Почетна верзија
    167154
    168 10. **passed** (SemestersSubjects ↔ PassedSubjects, 1:1)
    169     Секој запишан предмет може да има најмногу еден запис за положување.
     155 '''Верзија 2'''
     156 * Додадени се средношколски (high_school) и контакт (contact) податоци како посебни ентитети поврзани 1:1 со корисникот.
     157 * Воведени се токени (token) за безбедна автентикација на корисникот.
    170158
    171 11. **major_includes** (Major ↔ MajorSubjects, 1:N)
    172     Една студиска програма вклучува повеќе предмети.
     159 '''Верзија 3'''
     160 * Раздвоени се информациите за упис (enrollment_info) од запишаните семестри (enrolled_semesters).
     161 * Додаден е ентитет за уплати (Payment) поврзан со запишаните семестри.
    173162
    174 12. **subject_in_major** (Subjects ↔ MajorSubjects, 1:N)
    175     Еден предмет може да биде дел од повеќе студиски програми.
     163 '''Верзија 4'''
     164 * Воведена е зависност меѓу предмети (requires) за моделирање на предусловите.
     165 * Доделувањето на професор на предмет е моделирано како тернарна релација (teaches_subject) меѓу корисник, предмет и активен семестар.
     166 * Секој запишан предмет во семестар (semesters_subjects) дополнително се поврзува со студентот преку релацијата enrolled_by.
    176167
    177 13. **depends_on** (Subjects ↔ Subjects, N:M — преку DependencySubject)
    178     Еден предмет може да има повеќе предуслови (зависности) и може да биде предуслов за повеќе други предмети. Само-референцирачка релација.
     168=== Статус
    179169
    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, Завршено )]] '''