wiki:Ph1

# Концептуален дизајн - ЕР Дијаграм и податочни барања

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) ---

---

## Податочни барања

## Ентитети

  1. 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())
  1. HighSchool – ентитет кој чува податоци за средното образование на корисникот
    • user_id* (integer, FK → Users.id, unique)
    • gpa (float) — просек вклучувајќи матура
    • type (enum: 'strucen', 'gimnazija')
  1. Contact – ентитет кој чува контакт информации за корисникот
    • user_id* (integer, FK → Users.id, unique)
    • city (varchar)
    • municipality (varchar)
    • address (varchar)
    • number (varchar)
    • microsoft_email (varchar)
  1. 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)
  1. ActiveSemesters – ентитет кој чува податоци за активните семестри (академска година и тип)
    • id (integer, PK)
    • year_ (integer)
    • type (enum: 'summer', 'winter')
  1. 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)
  1. Subjects – ентитет кој чува податоци за предметите
    • id (integer, PK)
    • name (varchar, unique)
    • code (varchar, unique)
    • awarded_credits (integer)
    • dependency_credit (integer)
  1. Major – ентитет кој чува податоци за студиските програми (смерови)
    • id (integer, PK)
    • name (varchar)
  1. MajorSubjects – ентитет кој ги поврзува студиските програми со предметите и одредува задолжителен семестар
    • major_id* (integer, FK → Major.id, PK)
    • subject_id* (integer, FK → Subjects.id, PK)
    • manditory_semester (int)
    • akreditacija (int)
  1. PassedSubjects – ентитет кој чува податоци за положените предмети
    • passed_id (integer, PK)
    • enrolled_id (integer, FK → SemestersSubjects.id)
    • grade (enum: '6', '7', '8', '9', '10')
    • date_passed (timestamp)
  1. Documents – ентитет кој чува податоци за документите достапни во системот
    • id (integer, PK)
    • type (varchar)
    • body (text)
    • cost (integer)
  1. UserDocuments – ентитет кој ги поврзува корисниците со побараните документи
    • user_id* (integer, FK → Users.id, PK)
    • document_id* (integer, FK → Documents.id, PK)
  1. Token – ентитет кој чува автентикациски токени за корисниците
    • id (integer, PK)
    • user_id (integer, FK → Users.id, PK)
    • token (varchar)
    • expires_at (timestamp)
    • is_valid (bool)
  1. Payment – ентитет кој чува податоци за уплатите поврзани со запишување семестри
    • id (integer, PK)
    • user_id (integer, FK → Users.id, PK)
    • enrollment_id (integer, FK → EnrolledSemesters.id, PK)
    • amount (int)
    • ukim (int)
  1. EnrollmentInfo – ентитет кој чува историски податоци за запишување на студентот
    • id (integer, PK)
    • user_id (integer, FK → Users.id)
    • quota (enum: 'privatna', 'drzavna')
    • major_id (integer, FK → Major.id)
    • enrollment_year (integer)
  1. DependencySubject – ентитет кој чува зависности помеѓу предметите (предуслови)
    • subject_id (integer, FK → Subjects.id)
    • dependency_id (integer, FK → Subjects.id)
  1. ProfessourSubjects – ентитет кој чува информации за тоа кој професор предава кој предмет во кој активен семестар
    • prof_id (integer, FK → Users.id)
    • active_semester_id (integer, FK → ActiveSemesters.id)
    • subject_id (integer, FK → Subjects.id)

---

## Релации

  1. has_high_school (Users ↔ HighSchool, 1:1) Секој корисник може да има точно еден запис за средно образование.
  1. has_contact (Users ↔ Contact, 1:1) Секој корисник може да има точно еден запис за контакт информации.
  1. enrolls_in (Users ↔ EnrolledSemesters, 1:N) Еден корисник (студент) може да биде запишан во повеќе семестри.
  1. belongs_to_major (EnrolledSemesters ↔ Major, N:1) Секое запишување е поврзано со точно една студиска програма.
  1. in_active_semester (EnrolledSemestersActiveSemesters, N:1) Секое запишување е поврзано со точно еден активен семестар.
  1. takes_subject (Users ↔ SemestersSubjects, 1:N) Еден студент може да запише повеќе предмети во семестри.
  1. taught_by (SemestersSubjects ↔ Users, N:1) Секој запишан предмет има точно еден задолжен професор.
  1. semester_has_subject (SemestersSubjects ↔ Subjects, N:1) Секој запис во SemestersSubjects се однесува на точно еден предмет.
  1. enrolled_in_semester (SemestersSubjectsEnrolledSemesters, N:1) Секој запис за предмет е поврзан со точно едно запишување на семестар.
  1. passed (SemestersSubjectsPassedSubjects, 1:1)

Секој запишан предмет може да има најмногу еден запис за положување.

  1. major_includes (Major ↔ MajorSubjects, 1:N)

Една студиска програма вклучува повеќе предмети.

  1. subject_in_major (Subjects ↔ MajorSubjects, 1:N)

Еден предмет може да биде дел од повеќе студиски програми.

  1. depends_on (Subjects ↔ Subjects, N:M — преку DependencySubject)

Еден предмет може да има повеќе предуслови (зависности) и може да биде предуслов за повеќе други предмети. Само-референцирачка релација.

  1. requests_document (Users ↔ Documents, N:M — преку UserDocuments)

Корисниц��те можат да побараат повеќе документи, и еден документ може да биде побаран од повеќе корисници.

  1. has_token (Users ↔ Token, 1:N)

Еден корисник може да има повеќе автентикациски токени.

  1. makes_payment (Users ↔ Payment, 1:N)

Еден корисник може да изврши повеќе уплати.

  1. payment_for_enrollment (Payment ↔ EnrolledSemesters, N:1)

Секоја уплата е поврзана со точно едно запишување на семестар.

  1. enrollment_history (Users ↔ EnrollmentInfo, 1:N)

Еден корисник може да има повеќе записи за историја на запишување.

  1. enrollment_info_major (EnrollmentInfo ↔ Major, N:1)

Секој запис за запишување е поврзан со точно една студиска програма.

  1. professor_teaches (Users ↔ ProfessourSubjects, 1:N)

Еден професор може да предава повеќе предмети во различни семестри.

  1. prof_subject_semester (ProfessourSubjectsActiveSemesters, N:1)

Секој запис за предавање е поврзан со точно еден активен семестар.

  1. prof_subject (ProfessourSubjects ↔ Subjects, N:1)

Секој запис за предавање се однесува на точно еден предмет.

---

## Забелешки

  • Ентитетот Users служи како генерален ентитет за сите типови корисници (студенти, професори, администратори), разликувани преку атрибутот role.
  • HighSchool и Contact се во 1:1 релација со Users (секој корисник има најмногу еден запис).
  • DependencySubject претставува само-референцирачка N:M релација врз ентитетот Subjects за дефинирање на предуслови.
  • SemestersSubjects е централна асоцијативна табела која го поврзува студентот, запишаниот семестар, предметот и професорот.
  • ProfessourSubjects е одделна табела што експлицитно го дефинира распоредот на професори по предмети и семестри, независно од студентските записи.
Last modified 3 weeks ago Last modified on 02/25/26 13:53:18
Note: See TracWiki for help on using the wiki.