Changes between Initial Version and Version 1 of Ph1


Ignore:
Timestamp:
02/25/26 13:53:18 (3 weeks ago)
Author:
233188
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ph1

    v1 v1  
     1
     2
     3# Концептуален дизајн - ЕР Дијаграм и податочни барања
     4
     5Below is the full ER documentation for your university/faculty database schema, modeled after the format you provided.
     6
     7---
     8
     9## ЕР Дијаграм
     10
     11![image1](image1)
     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
     241. **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
     362. **HighSchool** – ентитет кој чува податоци за средното образование на корисникот
     37   - __user_id*__ (integer, FK → Users.id, unique)
     38   - gpa (float) — просек вклучувајќи матура
     39   - type (enum: 'strucen', 'gimnazija')
     40
     413. **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
     494. **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
     615. **ActiveSemesters** – ентитет кој чува податоци за активните семестри (академска година и тип)
     62   - __id__ (integer, PK)
     63   - year_ (integer)
     64   - type (enum: 'summer', 'winter')
     65
     666. **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
     747. **Subjects** – ентитет кој чува податоци за предметите
     75   - __id__ (integer, PK)
     76   - name (varchar, unique)
     77   - code (varchar, unique)
     78   - awarded_credits (integer)
     79   - dependency_credit (integer)
     80
     818. **Major** – ентитет кој чува податоци за студиските програми (смерови)
     82   - __id__ (integer, PK)
     83   - name (varchar)
     84
     859. **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
     9110. **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
     9711. **Documents** – ентитет кој чува податоци за документите достапни во системот
     98    - __id__ (integer, PK)
     99    - type (varchar)
     100    - body (text)
     101    - cost (integer)
     102
     10312. **UserDocuments** – ентитет кој ги поврзува корисниците со побараните документи
     104    - __user_id*__ (integer, FK → Users.id, PK)
     105    - __document_id*__ (integer, FK → Documents.id, PK)
     106
     10713. **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
     11414. **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
     12115. **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
     12816. **DependencySubject** – ентитет кој чува зависности помеѓу предметите (предуслови)
     129    - subject_id (integer, FK → Subjects.id)
     130    - dependency_id (integer, FK → Subjects.id)
     131
     13217. **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
     1411. **has_high_school** (Users ↔ HighSchool, 1:1)
     142   Секој корисник може да има точно еден запис за средно образование.
     143
     1442. **has_contact** (Users ↔ Contact, 1:1)
     145   Секој корисник може да има точно еден запис за контакт информации.
     146
     1473. **enrolls_in** (Users ↔ EnrolledSemesters, 1:N)
     148   Еден корисник (студент) може да биде запишан во повеќе семестри.
     149
     1504. **belongs_to_major** (EnrolledSemesters ↔ Major, N:1)
     151   Секое запишување е поврзано со точно една студиска програма.
     152
     1535. **in_active_semester** (EnrolledSemesters ↔ ActiveSemesters, N:1)
     154   Секое запишување е поврзано со точно еден активен семестар.
     155
     1566. **takes_subject** (Users ↔ SemestersSubjects, 1:N)
     157   Еден студент може да запише повеќе предмети во семестри.
     158
     1597. **taught_by** (SemestersSubjects ↔ Users, N:1)
     160   Секој запишан предмет има точно еден задолжен професор.
     161
     1628. **semester_has_subject** (SemestersSubjects ↔ Subjects, N:1)
     163   Секој запис во SemestersSubjects се однесува на точно еден предмет.
     164
     1659. **enrolled_in_semester** (SemestersSubjects ↔ EnrolledSemesters, N:1)
     166   Секој запис за предмет е поврзан со точно едно запишување на семестар.
     167
     16810. **passed** (SemestersSubjects ↔ PassedSubjects, 1:1)
     169    Секој запишан предмет може да има најмногу еден запис за положување.
     170
     17111. **major_includes** (Major ↔ MajorSubjects, 1:N)
     172    Една студиска програма вклучува повеќе предмети.
     173
     17412. **subject_in_major** (Subjects ↔ MajorSubjects, 1:N)
     175    Еден предмет може да биде дел од повеќе студиски програми.
     176
     17713. **depends_on** (Subjects ↔ Subjects, N:M — преку DependencySubject)
     178    Еден предмет може да има повеќе предуслови (зависности) и може да биде предуслов за повеќе други предмети. Само-референцирачка релација.
     179
     18014. **requests_document** (Users ↔ Documents, N:M — преку UserDocuments)
     181    Корисниц��те можат да побараат повеќе документи, и еден документ може да биде побаран од повеќе корисници.
     182
     18315. **has_token** (Users ↔ Token, 1:N)
     184    Еден корисник може да има повеќе автентикациски токени.
     185
     18616. **makes_payment** (Users ↔ Payment, 1:N)
     187    Еден корисник може да изврши повеќе уплати.
     188
     18917. **payment_for_enrollment** (Payment ↔ EnrolledSemesters, N:1)
     190    Секоја уплата е поврзана со точно едно запишување на семестар.
     191
     19218. **enrollment_history** (Users ↔ EnrollmentInfo, 1:N)
     193    Еден корисник може да има повеќе записи за историја на запишување.
     194
     19519. **enrollment_info_major** (EnrollmentInfo ↔ Major, N:1)
     196    Секој запис за запишување е поврзан со точно една студиска програма.
     197
     19820. **professor_teaches** (Users ↔ ProfessourSubjects, 1:N)
     199    Еден професор може да предава повеќе предмети во различни семестри.
     200
     20121. **prof_subject_semester** (ProfessourSubjects ↔ ActiveSemesters, N:1)
     202    Секој запис за предавање е поврзан со точно еден активен семестар.
     203
     20422. **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** е одделна табела што експлицитно го дефинира распоредот на професори по предмети и семестри, независно од студентските записи.