# Концептуален дизајн - ЕР Дијаграм и податочни барања
Below is the full ER documentation for your university/faculty database schema, modeled after the format you provided.
---
## ЕР Дијаграм
[image1](image1)
*(The ER diagram above represents the reference example. Your schema's conceptual ER diagram is described textually below.)*
### Conceptual ER Diagram (Textual Description) ---
---
## Податочни барања
## Ентитети
- Users – ентитет кој чува информации за секаков тип корисници на апликацијата (студенти, професори, администратори)
- id (integer, PK)
- name (varchar, not null)
- embg (integer, not null)
- surname (varchar, not null)
- index (varchar)
- bday (timestamp)
- email (varchar, not null, unique)
- password (varchar, not null)
- role (enum: 'student', 'prof', 'admin')
- created_at (timestamp, default: now())
- HighSchool – ентитет кој чува податоци за средното образование на корисникот
- user_id* (integer, FK → Users.id, unique)
- gpa (float) — просек вклучувајќи матура
- type (enum: 'strucen', 'gimnazija')
- Contact – ентитет кој чува контакт информации за корисникот
- user_id* (integer, FK → Users.id, unique)
- city (varchar)
- municipality (varchar)
- address (varchar)
- number (varchar)
- microsoft_email (varchar)
- EnrolledSemesters – ентитет кој чува податоци за семестрите во кои е запишан студентот
- id (integer, PK)
- user_id (integer, FK → Users.id)
- quota (enum: 'privatna', 'drzavna')
- major_id (integer, FK → Major.id)
- note_ (varchar)
- student_comment (varchar)
- created_at (timestamp)
- last_change (timestamp)
- completed (timestamp)
- semeser_id (integer, FK → ActiveSemesters.id)
- ActiveSemesters – ентитет кој чува податоци за активните семестри (академска година и тип)
- id (integer, PK)
- year_ (integer)
- type (enum: 'summer', 'winter')
- SemestersSubjects – ентитет кој чува податоци за предметите запишани од студентот во одреден семестар
- id (integer, PK)
- user_id (integer, FK → Users.id)
- enrolled_semesters_id (integer, FK → EnrolledSemesters.id, PK)
- subjects_id (integer, FK → Subjects.id, PK)
- professor_id (integer, FK → Users.id)
- signature (bool)
- Subjects – ентитет кој чува податоци за предметите
- id (integer, PK)
- name (varchar, unique)
- code (varchar, unique)
- awarded_credits (integer)
- dependency_credit (integer)
- Major – ентитет кој чува податоци за студиските програми (смерови)
- id (integer, PK)
- name (varchar)
- MajorSubjects – ентитет кој ги поврзува студиските програми со предметите и одредува задолжителен семестар
- major_id* (integer, FK → Major.id, PK)
- subject_id* (integer, FK → Subjects.id, PK)
- manditory_semester (int)
- akreditacija (int)
- PassedSubjects – ентитет кој чува податоци за положените предмети
- passed_id (integer, PK)
- enrolled_id (integer, FK → SemestersSubjects.id)
- grade (enum: '6', '7', '8', '9', '10')
- date_passed (timestamp)
- Documents – ентитет кој чува податоци за документите достапни во системот
- id (integer, PK)
- type (varchar)
- body (text)
- cost (integer)
- UserDocuments – ентитет кој ги поврзува корисниците со побараните документи
- user_id* (integer, FK → Users.id, PK)
- document_id* (integer, FK → Documents.id, PK)
- Token – ентитет кој чува автентикациски токени за корисниците
- id (integer, PK)
- user_id (integer, FK → Users.id, PK)
- token (varchar)
- expires_at (timestamp)
- is_valid (bool)
- Payment – ентитет кој чува податоци за уплатите поврзани со запишување семестри
- id (integer, PK)
- user_id (integer, FK → Users.id, PK)
- enrollment_id (integer, FK → EnrolledSemesters.id, PK)
- amount (int)
- ukim (int)
- EnrollmentInfo – ентитет кој чува историски податоци за запишување на студентот
- id (integer, PK)
- user_id (integer, FK → Users.id)
- quota (enum: 'privatna', 'drzavna')
- major_id (integer, FK → Major.id)
- enrollment_year (integer)
- DependencySubject – ентитет кој чува зависности помеѓу предметите (предуслови)
- subject_id (integer, FK → Subjects.id)
- dependency_id (integer, FK → Subjects.id)
- ProfessourSubjects – ентитет кој чува информации за тоа кој професор предава кој предмет во кој активен семестар
- prof_id (integer, FK → Users.id)
- active_semester_id (integer, FK → ActiveSemesters.id)
- subject_id (integer, FK → Subjects.id)
---
## Релации
- has_high_school (Users ↔ HighSchool, 1:1) Секој корисник може да има точно еден запис за средно образование.
- has_contact (Users ↔ Contact, 1:1) Секој корисник може да има точно еден запис за контакт информации.
- enrolls_in (Users ↔ EnrolledSemesters, 1:N) Еден корисник (студент) може да биде запишан во повеќе семестри.
- belongs_to_major (EnrolledSemesters ↔ Major, N:1) Секое запишување е поврзано со точно една студиска програма.
- in_active_semester (EnrolledSemesters ↔ ActiveSemesters, N:1) Секое запишување е поврзано со точно еден активен семестар.
- takes_subject (Users ↔ SemestersSubjects, 1:N) Еден студент може да запише повеќе предмети во семестри.
- taught_by (SemestersSubjects ↔ Users, N:1) Секој запишан предмет има точно еден задолжен професор.
- semester_has_subject (SemestersSubjects ↔ Subjects, N:1) Секој запис во SemestersSubjects се однесува на точно еден предмет.
- enrolled_in_semester (SemestersSubjects ↔ EnrolledSemesters, N:1) Секој запис за предмет е поврзан со точно едно запишување на семестар.
- passed (SemestersSubjects ↔ PassedSubjects, 1:1)
Секој запишан предмет може да има најмногу еден запис за положување.
- major_includes (Major ↔ MajorSubjects, 1:N)
Една студиска програма вклучува повеќе предмети.
- subject_in_major (Subjects ↔ MajorSubjects, 1:N)
Еден предмет може да биде дел од повеќе студиски програми.
- depends_on (Subjects ↔ Subjects, N:M — преку DependencySubject)
Еден предмет може да има повеќе предуслови (зависности) и може да биде предуслов за повеќе други предмети. Само-референцирачка релација.
- requests_document (Users ↔ Documents, N:M — преку UserDocuments)
Корисниц��те можат да побараат повеќе документи, и еден документ може да биде побаран од повеќе корисници.
- has_token (Users ↔ Token, 1:N)
Еден корисник може да има повеќе автентикациски токени.
- makes_payment (Users ↔ Payment, 1:N)
Еден корисник може да изврши повеќе уплати.
- payment_for_enrollment (Payment ↔ EnrolledSemesters, N:1)
Секоја уплата е поврзана со точно едно запишување на семестар.
- enrollment_history (Users ↔ EnrollmentInfo, 1:N)
Еден корисник може да има повеќе записи за историја на запишување.
- enrollment_info_major (EnrollmentInfo ↔ Major, N:1)
Секој запис за запишување е поврзан со точно една студиска програма.
- professor_teaches (Users ↔ ProfessourSubjects, 1:N)
Еден професор може да предава повеќе предмети во различни семестри.
- prof_subject_semester (ProfessourSubjects ↔ ActiveSemesters, N:1)
Секој запис за предавање е поврзан со точно еден активен семестар.
- prof_subject (ProfessourSubjects ↔ Subjects, N:1)
Секој запис за предавање се однесува на точно еден предмет.
---
## Забелешки
- Ентитетот Users служи како генерален ентитет за сите типови корисници (студенти, професори, администратори), разликувани преку атрибутот
role. - HighSchool и Contact се во 1:1 релација со Users (секој корисник има најмногу еден запис).
- DependencySubject претставува само-референцирачка N:M релација врз ентитетот Subjects за дефинирање на предуслови.
- SemestersSubjects е централна асоцијативна табела која го поврзува студентот, запишаниот семестар, предметот и професорот.
- ProfessourSubjects е одделна табела што експлицитно го дефинира распоредот на професори по предмети и семестри, независно од студентските записи.
