= Резиме на поправки и напредок = == DB_P1: Концептуален модел (ERD) == '''Статус:''' Прелиминарно во ред, со мала формална забелешка. '''Забелешка од евалуацијата:''' > „Прелиминарно е во ред, мала формална забелешка — концептот на надворешен клуч не постои во ЕРД, да се отстранат." '''Што е поправено:''' * Отстранети се сите ознаки за надворешен клуч (FK) од ER дијаграмот. * Во концептуалниот модел се прикажуваат само ентитети, атрибути и релации (врски) — без надворешни клучеви, бидејќи тие припаѓаат на логичкиот/физичкиот модел, не на концептуалниот. * Релациите меѓу ентитетите се претставени преку врски со кардиналност (1:1, 1:N, M:N), што е правилна нотација за ЕРД. '''Резултат:''' Концептуалниот модел е формално исправен и подготвен за одобрување. == DB_P2: Логички и физички дизајн, креирање на база (DDL) == '''Статус:''' Прелиминарно во ред, потребно е поставување на базата на факултетскиот сервер. '''Забелешка од евалуацијата:''' > „Прелиминарно во ред, за одобрување да се постави базата на факултетскиот сервер." '''Што е направено:''' * Логичкиот модел е изведен од концептуалниот и е целосно нормализиран (во BCNF). * Физичкиот дизајн е дефиниран со сите табели, колони, типови на податоци, примарни и надворешни клучеви. * DDL скриптата е креирана и успешно извршена локално. * Базата е поставена на факултетскиот сервер (develop.finki.ukim.mk) и е достапна за натамошна работа. * Сите 20 табели се креирани и populate-ирани со тест податоци. '''Резултат:''' Базата е поставена на факултетскиот сервер, што е предуслов за одобрување на фазата P2. == DB_P5: Нормализација == '''Статус:''' Поправено според барањата од евалуацијата. '''Забелешка од евалуацијата:''' > „Недостасува формална проверка дека примарниот клуч е навистина кандидат-клуч и дека нема друг кандидат-клуч, пред да биде прогласен за примарен клуч." '''Што е поправено:''' * Додаден е формален доказ дека избраниот примарен клуч е кандидат-клуч (уникатност + минималност). * Додаден е формален доказ дека не постои друг кандидат-клуч. * Додаден е алгоритмот за attribute closure за пресметка на затворање на атрибути. * Додаден е canonical cover на множеството функционални зависности. * За секоја табела (R1–R20) се експлицитно наведени: ФЗ што важат, кандидат-клуч, примарен клуч, нормална форма, lossless join тест и preservation of FDs. * Додадена е проверка во која нормална форма е денормализираната релација (1NF, но не 2NF). * Додадена е глобална проверка за preservation of FDs и lossless join. '''Резултат:''' Нормализацијата е формално комплетна и ги задоволува сите барања од InstructionsP5. == DB_P6: Комплексни извештаи од базата == '''Статус:''' Поправено според барањата од евалуацијата. '''Забелешка од евалуацијата:''' > „Во ред е, но се очекуваат значително покомплексни прашалници, со повеќе нивоа на вгнездување потпрашалници." '''Што е поправено:''' * Постоечките 8 извештаи (AdvancedReport1–8) се задржани како основни аналитички извештаи. * Додадени се 6 нови напредни извештаи (AdvancedReport9–14) со најмалку 3 нивоа на вгнездување: * AdvancedReport9 — Прогноза за потрошувачка на состојки (3 нивоа, CTE, IN (SELECT ... HAVING ... (SELECT AVG ...))) * AdvancedReport10 — Ефикасни келнери + топ производ (4 нивоа, 2 корелациони потпрашалници, потпрашалник во потпрашалник) * AdvancedReport11 — Анализа на кошничка (3 нивоа, self-join, IN (SELECT ... HAVING ...)) * AdvancedReport12 — Year-over-year споредба (3 нивоа, CTE, RANK, LEFT JOIN со поместување) * AdvancedReport13 — Аномалии во нарачки (3 нивоа, STDDEV, z-score, корелационен потпрашалник) * AdvancedReport14 — Прогноза на приходи (3 нивоа, REGR_SLOPE, REGR_INTERCEPT, generate_series, LEFT JOIN) * Сите функции се имплементирани како SQL функции (LANGUAGE sql) за да се избегнат проблеми со PL/pgSQL variable shadowing. * Сите функции се тестирани во DBeaver и работат со реалните податоци од базата. * За секој нов извештај е напишана и релациона алгебра. '''Резултат:''' Напредните извештаи целосно го адресираат барањето за покомплексни прашања со повеќе нивоа на вгнездување. == DB_P7: Напреден развој на датабаза (SQL DDL) == '''Статус:''' Поправено според барањата од евалуацијата. '''Забелешка од евалуацијата:''' > „Trigger - ок > Stored Procedures - ок > Views - ок > Domains - /" '''Што е поправено:''' * Тригерите (Triggers) се веќе имплементирани и оценети како „ок". * Складираните процедури и функции (Stored Procedures) се веќе имплементирани и оценети како „ок". * Погледите (Views) се веќе имплементирани и оценети како „ок". * Додадени се 8 кориснички дефинирани домени (Custom Domains): * positive_money — парични вредности со деловни граници (0 до 1.000.000) * vat_percentage — ДДВ само со законски дозволени стапки (0, 5, 10, 18) * table_status — статус на маса (СЛОБОДНА, ЗАФАТЕНА, РЕЗЕРВИРАНА, НЕДОСТАПНА) * order_status — статус на нарачка (НОВА, ПОРАЧАНО, ПОДГОТВЕНО, СЕРВИРАНО, ПЛАТЕНА, ОТКАЖАНА) * inventory_operation — тип на инвентарна операција (ПОЧЕТНА, ПРИЕМ, ПРОДАЖБА, ОТПИС, КОРЕКЦИЈА) * valid_email — комплексна email валидација (regex + должина + без последователни точки) * mkd_phone — македонски мобилен телефонски број во 3 формати * password_hash — bcrypt password hash валидација * Домените се применети на постоечките колони со ALTER TABLE. * Сите домени се тестирани со валидни и невалидни вредности. '''Резултат:''' Сите 4 барања од фазата P7 (Triggers, Stored Procedures, Views, Domains) се целосно имплементирани. == Заклучок == Сите забелешки од евалуациите за фазите P1, P2, P5, P6 и P7 се адресирани: || '''Фаза''' || '''Забелешка''' || '''Статус''' || || P1 || Надворешен клуч не постои во ЕРД || Поправено — отстранети FK ознаки || || P2 || Постави база на факултетски сервер || Направено — базата е поставена || || P5 || Формална проверка на кандидат-клуч || Поправено — додаден формален доказ || || P6 || Покомплексни прашалници со вгнездување || Поправено — додадени 6 нови извештаи || || P7 || Domains недостасуваа || Поправено — додадени 8 кориснички дефинирани домени ||