== Логички и физички дизајн - Креирање база податоци (со SQL DDL) === Релациско мапирање ==== Ознаки * Примарните клучеви се означени со bold и underline '''__PK__''' * Надворешните клучеви се означени со FK* за кои во заграда () е напишана табелата која ја референцираат. * Задолжителните атрибути се болдирани. ==== Табели * users ('''__id__''', '''name''', embg, '''surname''', index, bday, '''email''', '''password''', '''role''', quota, enrollment_year, created_at) * high_school ('''__id__''', '''user_id'''*(users), '''gpa''', '''type''') * contact ('''__id__''', '''user_id'''*(users), '''city''', '''municipality''', '''address''', '''number''', microsoft_email) * major ('''__id__''', '''name''') * active_semesters ('''__id__''', '''year''', '''type''') * subjects ('''__id__''', '''name''', '''code''', '''awarded_credits''', dependency_credit) * enrolled_semesters ('''__id__''', '''user_id'''*(users), '''quota''', '''major_id'''*(major), note, student_comment, created_at, last_change, completed, '''semester_id'''*(active_semesters)) * semesters_subjects ('''__id__''', '''enrolled_semesters_id'''*(enrolled_semesters), '''subjects_id'''*(subjects), '''professor_id'''*(users), '''signature''') * passed_subjects ('''__id__''', '''enrolled_id'''*(semesters_subjects), '''grade''', '''date_passed''') * documents ('''__id__''', '''type''', '''body''', '''cost''') * user_documents ('''__user_id__'''*(users), '''__document_id__'''*(documents)) * token ('''__id__''', '''user_id'''*(users), '''token''', '''expires_at''', '''is_valid''') * payment ('''__id__''', '''user_id'''*(users), '''enrollment_id'''*(enrolled_semesters), '''amount''') * major_subjects ('''__major_id__'''*(major), '''__subject_id__'''*(subjects), '''manditory_semester''') * dependency_subject ('''__subject_id__'''*(subjects), '''__dependency_id__'''*(subjects)) * professour_subjects ('''__prof_id__'''*(users), '''__active_semester_id__'''*(active_semesters), '''__subject_id__'''*(subjects)) === DDL скрипта за бришење на табелите и креирање на табелите [attachment:ddl.2.sql] === DML скрипта за полнење на табелите со податоци [attachment:dml.2.sql] === dbdiagram.io (DBML) код [attachment:iknow.dbml] === Релациски дијаграм [[Image(Iknow (1).png, width=100%)]] === Историјат '''Верзија 1''' - Почетна верзија '''Верзија 2''' * Додадени се табелите high_school и contact поврзани 1:1 со users. * Додадена е табелата token за чување на токени за автентикација. '''Верзија 3''' * Раздвоени се табелите enrollment_info и enrolled_semesters. * Додадена е табелата Payment со надворешни клучеви кон users и enrolled_semesters. '''Верзија 4''' * Додадена е табелата dependency_subject за моделирање на предуслови меѓу предмети. * Додадена е табелата professour_subjects (професор ↔ предмет ↔ активен семестар). '''Верзија 5''' * Отстранета е табелата enrollment_info; нејзините атрибути quota и enrollment_year се преместени во табелата users. * Отстранет е надворешниот клуч user_id од semesters_subjects – студентот се добива преку enrolled_semesters.user_id. * Отстранет е атрибутот ukim од payment и akreditacija од major_subjects. * Табелите high_school и contact добиваат сопствен id како примарен клуч, а user_id останува UNIQUE NOT NULL надворешен клуч (1:1). * Преименувани колони заради усогласување со ЕР дијаграмот: year_ → year, note_ → note, passed_subjects.passed_id → id. * Додадени се ограничувања за интегритет: UNIQUE (user_id, semester_id) во enrolled_semesters, UNIQUE на passed_subjects.enrolled_id (1:1 со semesters_subjects), UNIQUE (year, type) во active_semesters и CHECK (subject_id <> dependency_id) во dependency_subject. === Статус ''' [[span(style=color: #008000, Завршено )]] '''