== Концептуален дизајн - ЕР Дијаграм и податочни побарувања === ЕР Дијаграм [[Image(FINKI_ER_Diagram.png)]] === Податочни барања ==== Ентитети '''users''' – ентитет кој чува податоци за секаков тип корисници на системот (студент, професор, администратор) * id (integer) * name (varchar) * embg (integer) * surname (varchar) * index (varchar) * bday (timestamp) * email (varchar, not null, unique) * password (varchar, not null) * role (enum: student, prof, admin) * created_at (timestamp) '''high_school''' – ентитет кој чува податоци за средношколското образование на студентот * user_id* (integer, unique) * gpa (float) * type (enum: strucen, gimnazija) '''contact''' – ентитет кој чува контакт податоци за корисникот * user_id* (integer, unique) * city (varchar) * municipality (varchar) * address (varchar) * number (varchar) * microsoft_email (varchar) '''enrolled_semesters''' – ентитет кој чува податоци за запишани семестри од страна на студентот * id (integer) * quota (enum: privatna, drzavna) * note_ (varchar) * student_comment (varchar) * created_at (timestamp) * last_change (timestamp) * completed (timestamp) '''active_semesters''' – ентитет кој чува податоци за активните (тековните) семестри * id (integer) * year_ (integer) * type (enum: summer, winter) '''semesters_subjects''' – ентитет кој чува податоци за предметите запишани во определен семестар * id (integer) * signature (bool) '''subjects''' – ентитет кој чува податоци за предметите * id (integer) * name (varchar, not null, unique) * code (varchar, not null, unique) * awarded_credits (integer) * dependency_credit (integer) '''major''' – ентитет кој чува податоци за студиските програми * id (integer) * name (varchar) '''passed_subjects''' – ентитет кој чува податоци за положените предмети * passed_id (integer) * grade (enum: 6, 7, 8, 9, 10) * date_passed (timestamp) '''documents''' – ентитет кој чува податоци за официјалните документи * id (integer) * type (varchar) * body (text) * cost (integer) '''token''' – ентитет кој чува податоци за токените за автентикација на корисникот * id (integer) * token (varchar) * expires_at (timestamp) * is_valid (bool) '''Payment''' – ентитет кој чува податоци за уплатите на корисникот * id (integer) * amount (int) * ukim (int) '''enrollment_info''' – ентитет кој чува податоци за уписот на корисникот * id (integer) * quota (enum: privatna, drzavna) * enrollment_year (integer) ==== Релации '''has_hs''' (users ↔ high_school, 1:1) Секој корисник (студент) има поврзани средношколски податоци. '''has_contact''' (users ↔ contact, 1:1) Секој корисник има поврзани контакт податоци. '''has_token''' (users ↔ token, 1:N) Корисникот може да има повеќе токени за автентикација. '''submits''' (users ↔ enrolled_semesters, 1:N) Корисникот може да запише повеќе семестри. '''for_major''' (enrolled_semesters ↔ major, N:1) Секој запишан семестар припаѓа на определена студиска програма. '''during''' (enrolled_semesters ↔ active_semesters, N:1) Секој запишан семестар се одвива во рамки на определен активен семестар. '''registers''' (users ↔ enrollment_info, 1:N) Корисникот има информации за упис на студиска програма. '''chosen_in''' (enrollment_info ↔ major, N:1) Информациите за упис се однесуваат на определена студиска програма. '''pays''' (users ↔ Payment, 1:N) Корисникот може да изврши повеќе уплати. '''for_enrollment''' (Payment ↔ enrolled_semesters, N:1) Секоја уплата се однесува на определен запишан семестар. '''contains''' (enrolled_semesters ↔ semesters_subjects, 1:N) Секој запишан семестар содржи повеќе предмети. '''enrolled_by''' (users ↔ semesters_subjects, 1:N) Секој запишан предмет во семестар припаѓа на определен студент. '''taken_in''' (subjects ↔ semesters_subjects, 1:N) Секој предмет може да се слуша во рамки на повеќе запишани семестри. '''teaches''' (users ↔ semesters_subjects, 1:N) Професорот предава определен предмет во определен семестар. '''results_in''' (semesters_subjects ↔ passed_subjects, 1:1) Запишаниот предмет резултира со положен предмет. '''owns''' (users ↔ documents, N:M) Корисникот може да поседува/бара повеќе документи, а еден документ може да припаѓа на повеќе корисници. '''includes''' (major ↔ subjects, N:M) Студиската програма вклучува предмети, при што за секој предмет се чуваат задолжителен семестар (manditory_semester) и акредитација (akreditacija). '''requires''' (subjects ↔ subjects, N:M) Предметот може да има предуслови, односно да зависи од положени други предмети. '''teaches_subject''' (users ↔ subjects ↔ active_semesters, тернарна) Професорот предава определен предмет во определен активен семестар. ==== Историјат '''Верзија 1''' - Почетна верзија '''Верзија 2''' * Додадени се средношколски (high_school) и контакт (contact) податоци како посебни ентитети поврзани 1:1 со корисникот. * Воведени се токени (token) за безбедна автентикација на корисникот. '''Верзија 3''' * Раздвоени се информациите за упис (enrollment_info) од запишаните семестри (enrolled_semesters). * Додаден е ентитет за уплати (Payment) поврзан со запишаните семестри. '''Верзија 4''' * Воведена е зависност меѓу предмети (requires) за моделирање на предусловите. * Доделувањето на професор на предмет е моделирано како тернарна релација (teaches_subject) меѓу корисник, предмет и активен семестар. * Секој запишан предмет во семестар (semesters_subjects) дополнително се поврзува со студентот преку релацијата enrolled_by. === Статус ''' [[span(style=color: #008000, Завршено )]] '''