== Креирање и пополнување на базата == === Опис === Во оваа фаза релациониот модел е имплементиран како физичка база на податоци во '''PostgreSQL'''. Чекорот се состои од две активности: 1. '''Креирање на структурата (DDL)''' — табели, ограничувања, индекси, погледи и програмски рутини. 2. '''Внес на податоци (DML)''' — пополнување на базата со податоци за тестирање на функционалноста. Поделбата на сектори/модули е опишана во [attachment:RelationalModel.txt RelationalModel] и не се повторува овде. === DDL — креирање на структурата === DDL скриптата (`idontknow_script.sql`) е напишана за PostgreSQL и креира: * '''119 табели''' — секоја со суроген примарен клуч `id` (од секвенца преку `nextval`) и `unique` ограничувања таму каде е потребно * '''11 индекси''' — секундарни B-tree индекси за чести пребарувања (на пр. `idx_korisnici_username`, `idx_studenti_indeks`) * '''9 погледи (`vw_`)''' — `vw_aktivni_upisani_kursevi`, `vw_ispitni_prijavi`, `vw_istorija_naplati`, `vw_otvoreni_finansiski_obvrski`, `vw_pregled_plati_period`, `vw_raspredelba_nastaven_kadar`, `vw_studentski_oceni`, `vw_vraboteni_karieren_pat`, `vw_vraboteni_prekrsoci_kvalifikacii` * '''3 функции (`fn_`)''' — `fn_otvoren_dolg`, `fn_prosek_student`, `fn_slobodni_mesta` * '''3 процедури (`pr_`)''' — `pr_generiraj_obvrski_za_semestar`, `pr_registriraj_naplata`, `pr_zapisi_student_na_kurs` * '''3 trigger функции (`trgf_`)''' — `trgf_azuriraj_otvorena_suma`, `trgf_kapacitet_kurs`, `trgf_validna_ocena` Користени типови на податоци: `int4`, `varchar`, `numeric(14,2)` за парични износи, `timestamp(6)`, `date`, `bool`, `text`. '''Опфат на DDL скриптата (важно):''' * Нема `FOREIGN KEY` ограничувања — релациите се изведени преку колоните `*_id`, без наметнат референцијален интегритет на ниво на база. * Секвенците (`*_id_seq`) се користат преку `nextval(...)`, но нивните `CREATE SEQUENCE` дефиниции не се дел од скриптата. * Дефинирани се trigger функциите (`trgf_`), но нема `CREATE TRIGGER` врзувања за табелите. * Скриптата не содржи `INSERT` — внесот на податоци е целосно одвоен во DML скриптата. === Внес на податоци (DML) === По креирањето на структурата, базата се пополнува со податоци преку DML скрипта. Бидејќи структурата нема foreign key ограничувања, редоследот на внес е одговорност на скриптата; за конзистентни идентификатори податоците се внесуваат по слоеви на зависност: 1. '''Шифрарници''' (без зависности) — типови, статуси, валути, држави, академски степени, `tip_atribut` 2. '''Основни ентитети''' — `gradovi` → `lice` → `korisnici`, организациски единици, банкарски/трансакциски сметки 3. '''Оперативни податоци''' — работни позиции и ангажмани, предмети, акредитации, смерови, академски години и семестри, студенти 4. '''Трансакциски/тест податоци''' — уписи, оценки, испити, финансиски обврски, наплати и плати '''Забелешка:''' Табелата `tmp_salary_truth` е помошна (привремена) табела без примарен клуч, со индекс `idx_truth_mapping`. Во неа се чуваат очекуваните вредности за платите (`true_bruto`, `true_odbivki`, `true_danok`) и служи за валидација на пресметката во потсистемот за плати при тестирањето. Не е дел од продукцискиот модел. === Скрипти === || '''Тип''' || '''Опис''' || '''Линк''' || || DDL || Структура на базата (табели, индекси, погледи, функции, процедури, trigger функции) || [attachment:idontknow_script.sql DDL скрипта] || || DML || Податоци за пополнување и тестирање на базата || [attachment:idontknow_dml.sql DML скрипта] ||