= Нормализација = == Функциски зависности == **''R''**(id_admin, ime_admin, prezime_admin, email_admin, password_admin, id_nastavnik, ime_nastavnik, prezime_nastavnik, opis_nastavnik, email_nastavnik, password_nastavnik, telefonski_broj_nastavnik, id_ucenik, ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik, id_kvalifikacija, dokument_kvalifikacija, id_predmet, ime_predmet, id_cas, vreme_pocetok_cas, tema_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet) ---- Множество функциски зависности: F,,D,, = {\\ id_admin → (ime_admin, prezime_admin, email_admin, password_admin),\\ email_admin → id_admin,\\ id_nastavnik → (ime_nastavnik, prezime_nastavnik, opis_nastavnik, email_nastavnik, password_nastavnik, telefonski_broj_nastavnik),\\ email_nastavnik → id_nastavnik,\\ id_ucenik → (ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik),\\ email_ucenik → id_ucenik,\\ id_kvalifikacija → dokument_kvalifikacija,\\ id_predmet → ime_predmet,\\ ime_predmet → id_predmet, \\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ (ime_predmet, id_ucenik) → datum_zainteresiran,\\ id_cas → (vreme_pocetok_cas, tema_cas), \\ id_plakjanja → iznos,\\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → (id_plakjanja, id_ucenik, plateno),\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → (cena_po_cas, broj_casovi_po_dogovor)\\ } ---- Со примена на неколку чекори (Армстронгова аксиома за декомпозиција, отфрлање екстра атрибути и редундантни зависности), може да се добие следната канонична покривка (сите ф.з. се во нов ред):\\ F,,c,, = {\\ id_admin → ime_admin, \\ id_admin → prezime_admin, \\ id_admin → email_admin, \\ id_admin → password_admin,\\ email_admin → id_admin,\\ id_nastavnik → ime_nastavnik,\\ id_nastavnik → prezime_nastavnik,\\ id_nastavnik → opis_nastavnik,\\ id_nastavnik → email_nastavnik,\\ id_nastavnik → password_nastavnik,\\ id_nastavnik → telefonski_broj_nastavnik,\\ email_nastavnik → id_nastavnik,\\ id_ucenik → ime_ucenik,\\ id_ucenik → prezime_ucenik,\\ id_ucenik → opis_ucenik,\\ id_ucenik → email_ucenik,\\ id_ucenik → password_ucenik,\\ id_ucenik → telefonski_broj_ucenik,\\ email_ucenik → id_ucenik,\\ id_kvalifikacija → dokument_kvalifikacija,\\ id_predmet → ime_predmet,\\ ime_predmet → id_predmet, \\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ (ime_predmet, id_ucenik) → datum_zainteresiran,\\ id_cas → vreme_pocetok_cas,\\ id_cas → tema_cas, \\ id_plakjanja → iznos,\\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor\\ } == Нормална форма == Врз основа на горенаведените функциски зависности, нашиот актуелен дизајн се наоѓа во **1НФ**. Ако погледнеме еден од кандидат клучевите, на пример {id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_slusanje}, ќе забележиме дека подмножество од тој кандидат клуч покажува кон непримарен атрибут, односно постои парцијална зависност (id_admin, што претставува подможество од кандидат клучот, ги определува непримарните атрибути како ime_admin, prezime_admin, email_admin). Ваквиот тип на зависности е нарушување за повисоките нормални форми и според тоа доаѓаме до заклучок дека **''R''** е во 1НФ. == Декомпозиција до највисока можна нормална форма == При определување на кандидат клучевите, тргнуваме од најтривијалниот суперклуч составен од сите атрибути, чиј затворач ги содржи сите атрибути.\\ **id_admin, ime_admin, prezime_admin, email_admin, password_admin, id_nastavnik, ime_nastavnik, prezime_nastavnik, opis_nastavnik, email_nastavnik, password_nastavnik, telefonski_broj_nastavnik, id_ucenik, ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik, id_kvalifikacija, dokument_kvalifikacija, id_predmet, ime_predmet, id_cas, vreme_pocetok_cas, tema_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet+**={id_admin, ime_admin, prezime_admin, email_admin, password_admin, id_nastavnik, ime_nastavnik, prezime_nastavnik, opis_nastavnik, email_nastavnik, password_nastavnik, telefonski_broj_nastavnik, id_ucenik, ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik, id_kvalifikacija, dokument_kvalifikacija, id_predmet, ime_predmet, id_cas, vreme_pocetok_cas, tema_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet} ---- Постепено редуцираме и добиваме еден кандидат клуч:\\ **id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje+**={id_admin, ime_admin, prezime_admin, email_admin, password_admin, id_nastavnik, ime_nastavnik, prezime_nastavnik, opis_nastavnik, email_nastavnik, password_nastavnik, telefonski_broj_nastavnik, id_ucenik, ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik, id_kvalifikacija, dokument_kvalifikacija, id_predmet, ime_predmet, id_cas, vreme_pocetok_cas, tema_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet}\\ Примарни атрибути: id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje\\ Треба да се направи проверка дали има уште кандидат клучеви. Поради трите ф.з. ime_predmet → id_predmet; email_admin → id_admin; email_nastavnik → id_nastavnik, согледуваме дека постојат уште кандидат клучеви бидејќи десната страна од овие ф.з. е примарен атрибут.\\ Заменуваме, ја повторуваме истата постапка со редуцирањето на атрибути и добиваме уште неколку кандидат клучеви:\\ - **id_admin, id_nastavnik, id_kvalifikacija, ime_predmet, id_cas, id_domasno, id_plakanja, id_slusanje**\\ - **email_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje**\\ - **id_admin, email_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje**\\ - **email_admin, email_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje**\\ - **id_admin, email_nastavnik, id_kvalifikacija, ime_predmet, id_cas, id_domasno, id_plakanja, id_slusanje**\\ - **email_admin, id_nastavnik, id_kvalifikacija, ime_predmet, id_cas, id_domasno, id_plakanja, id_slusanje**\\ - **email_admin, email_nastavnik, id_kvalifikacija, ime_predmet, id_cas, id_domasno, id_plakanja, id_slusanje**\\ Вкупно 2^3^ кандидат клучеви, односно 8.\\ Од нив избираме еден за примарен клуч. Најоптимално во пракса би било за примарен клуч да биде избран клуч кој ќе овозможи побрзо пребарување (пр. составен од атрибути кои се цели броеви, наместо стрингови) и според тоа за примарен клуч го избираме клучот \\ **id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje**.\\ Во моментот има неколку ф.з. кои прават проблем. Тие се парцијални зависности (вистинско подмножество од к.к. определува непримарен атрибут) и со тоа е нарушена 2НФ. Да претпоставиме дека прва што прави проблем е ф.з. id_nastavnik → ime_nastavnik.\\\\ Првобитната релација R која е составена од сите атрибути, ја декомпонираме на R,,1,, и R,,2,,. Дел од R,,1,, мора да биде id_nastavnik, заедно со сите атрибути кои тој ги определува, додека пак останатите атрибути одат во R,,2,, (со тоа што за да може да се направи спојување без загуба, мора да има заеднички атрибут со R,,1,,, а тој атрибут би бил id_nastavnik).\\ ---- R,,1,,(id_nastavnik, prezime_nastavnik, opis_nastavnik, email_nastavnik, password_nastavnik, telefonski_broj_nastavnik)\\ F,,1,, = {\\ id_nastavnik → ime_nastavnik,\\ id_nastavnik → prezime_nastavnik,\\ id_nastavnik → opis_nastavnik,\\ id_nastavnik → email_nastavnik,\\ id_nastavnik → password_nastavnik,\\ id_nastavnik → telefonski_broj_nastavnik,\\ email_nastavnik → id_nastavnik\\ }\\ Кандидат клучеви: id_nastavnik, email_nastavnik.\\ Примарни атрибути: id_nastavnik, email_nastavnik.\\ **R,,1,,** се наоѓа во **BCNF**, бидејќи од секоја ф.з. во F,,1,,, левата страна е суперклуч, и понатаму не ја декомпонираме.\\ ---- R,,2,,(id_admin, ime_admin, prezime_admin, email_admin, password_admin, id_nastavnik, id_ucenik, ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik, id_kvalifikacija, dokument_kvalifikacija, id_predmet, ime_predmet, id_cas, vreme_pocetok_cas, tema_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet)\\ F,,2,, = { \\ id_admin → ime_admin, \\ id_admin → prezime_admin, \\ id_admin → email_admin, \\ id_admin → password_admin,\\ email_admin → id_admin,\\ id_ucenik → ime_ucenik,\\ id_ucenik → prezime_ucenik,\\ id_ucenik → opis_ucenik,\\ id_ucenik → email_ucenik,\\ id_ucenik → password_ucenik,\\ id_ucenik → telefonski_broj_ucenik,\\ email_ucenik → id_ucenik,\\ id_kvalifikacija → dokument_kvalifikacija,\\ id_predmet → ime_predmet,\\ ime_predmet → id_predmet, \\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ (ime_predmet, id_ucenik) → datum_zainteresiran,\\ id_cas → vreme_pocetok_cas,\\ id_cas → tema_cas, \\ id_plakjanja → iznos,\\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor\\ }\\ R,,2,, се' уште е во 1НФ поради парцијалните зависности. Една од повеќето ф.з. кои прават проблем е id_admin → ime_admin. id_admin ќе го ставиме во посебна релација R,,3,,, заедно со атрибутите кои тој ги определува. Се' останато оди во R,,4,,, заедно со id_admin кој е заеднички атрибут, за да се направи спојување без загуба на информации.\\ ---- R,,3,,(id_admin, ime_admin, prezime_admin, email_admin, password_admin)\\ F,,3,, = {\\ id_admin → ime_admin, \\ id_admin → prezime_admin, \\ id_admin → email_admin, \\ id_admin → password_admin,\\ email_admin → id_admin\\ }\\ Кандидат клучеви: id_admin, email_admin.\\ Примарни атрибути: id_admin, email_admin.\\ **R,,3,,** се наоѓа во **BCNF**, бидејќи од секоја ф.з. во F,,3,,, левата страна е суперклуч.\\ ---- R,,4,,(id_admin, id_nastavnik, id_ucenik, ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik, id_kvalifikacija, dokument_kvalifikacija, id_predmet, ime_predmet, id_cas, vreme_pocetok_cas, tema_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet) F,,4,, = {\\ id_ucenik → ime_ucenik,\\ id_ucenik → prezime_ucenik,\\ id_ucenik → opis_ucenik,\\ id_ucenik → email_ucenik,\\ id_ucenik → password_ucenik,\\ id_ucenik → telefonski_broj_ucenik,\\ email_ucenik → id_ucenik,\\ id_kvalifikacija → dokument_kvalifikacija,\\ id_predmet → ime_predmet,\\ ime_predmet → id_predmet, \\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ (ime_predmet, id_ucenik) → datum_zainteresiran,\\ id_cas → vreme_pocetok_cas,\\ id_cas → tema_cas, \\ id_plakjanja → iznos,\\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor\\ }\\ R,,4,, е во 1НФ поради парцијалните зависности. Една од повеќето ф.з. кои прават проблем е id_ucenik → ime_ucenik.\\ id_ucenik ќе го ставиме во посебна релација R,,5,,, заедно со атрибутите кои тој ги определува. Останатото во R,,6,,. ---- R,,5,,(id_ucenik, ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik)\\ F,,5,, = {\\ id_ucenik → ime_ucenik,\\ id_ucenik → prezime_ucenik,\\ id_ucenik → opis_ucenik,\\ id_ucenik → email_ucenik,\\ id_ucenik → password_ucenik,\\ id_ucenik → telefonski_broj_ucenik,\\ } Кандидат клуч: id_ucenik.\\ Примарни атрибути: id_ucenik.\\ **R,,5,,** се наоѓа во **BCNF**, бидејќи од секоја ф.з. во F,,5,,, левата страна е суперклуч. Оваа релација понатаму не ја декомпонираме.\\ ---- Да го разгледаме тоа што ни остана во R,,6,,. R,,6,,(id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, dokument_kvalifikacija, id_predmet, ime_predmet, id_cas, vreme_pocetok_cas, tema_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet)\\ F,,6,, = {\\ id_kvalifikacija → dokument_kvalifikacija,\\ id_predmet → ime_predmet,\\ ime_predmet → id_predmet, \\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ (ime_predmet, id_ucenik) → datum_zainteresiran,\\ id_cas → vreme_pocetok_cas,\\ id_cas → tema_cas, \\ id_plakjanja → iznos,\\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor }\\ Кандидат клучеви: (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje); \\ (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, ime_predmet, id_cas, id_domasno, id_plakanja, id_slusanje)\\ Примарни атрибути: id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje, ime_predmet.\\ R,,6,, е во 1НФ поради парцијалните зависности. Една од повеќето ф.з. кои прават проблем е id_kvalifikacija → dokument_kvalifikacija.\\ id_kvalifikacija ќе го ставиме во посебна релација R,,7,,, заедно со атрибутите кои тој ги определува. Останатото во R,,8,,. ---- R,,7,,(id_kvalifikacija, dokument_kvalifikacija)\\ F,,7,, = {\\ id_kvalifikacija → dokument_kvalifikacija\\ }\\ Кандидат клуч: id_kvalifikacija.\\ Примарни атрибути: id_kvalifikacija.\\ **R,,7,,** се наоѓа во **BCNF**, бидејќи има само една ф.з. и левата страна на таа ф.з. е суперклуч.\\ ---- R,,8,,(id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, ime_predmet, id_cas, vreme_pocetok_cas, tema_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet)\\ F,,8,, = {\\ id_predmet → ime_predmet,\\ ime_predmet → id_predmet, \\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ (ime_predmet, id_ucenik) → datum_zainteresiran,\\ id_cas → vreme_pocetok_cas,\\ id_cas → tema_cas, \\ id_plakjanja → iznos,\\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor\\ }\\ Кандидат клучеви: (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje);\\ (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, ime_predmet, id_cas, id_domasno, id_plakanja, id_slusanje)\\ Примарни атрибути: id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje, ime_predmet.\\ R,,8,, е во 1НФ поради парцијалните зависности. Една од повеќето ф.з. кои прават проблем е id_cas → vreme_pocetok_cas.\\ id_cas ќе го ставиме во посебна релација R,,9,,, заедно со атрибутите кои тој ги определува. Останатото во R,,10,,.\\ ---- R,,9,,(id_cas, vreme_pocetok_cas, tema_cas)\\ F,,9,, = {\\ id_cas → vreme_pocetok_cas,\\ id_cas → tema_cas, \\ }\\ Кандидат клучеви: id_cas.\\ Примарни атрибути: id_cas.\\ **R,,9,,** се наоѓа во **BCNF**, бидејќи левата страна на двете ф.з. е суперклуч.\\ ---- R,,10,,(id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, ime_predmet, id_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet)\\ F,,10,, = {\\ id_predmet → ime_predmet,\\ ime_predmet → id_predmet, \\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ (ime_predmet, id_ucenik) → datum_zainteresiran,\\ id_plakjanja → iznos,\\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor\\ }\\ Кандидат клучеви: (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje);\\ (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, ime_predmet, id_cas, id_domasno, id_plakanja, id_slusanje)\\ Примарни атрибути: id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje, ime_predmet.\\ R,,10,, е во 1НФ поради парцијалните зависности. Една од повеќето ф.з. кои прават проблем е id_predmet → ime_predmet.\\ id_predmet ќе го ставиме во посебна релација R,,11,,, заедно со атрибутите кои тој ги определува. Останатото во R,,12,,.\\ ---- R,,11,,(id_predmet, ime_predmet)\\ F,,11,, = {\\ id_predmet → ime_predmet,\\ ime_predmet → id_predmet, \\ }\\ Кандидат клучеви: id_predmet, ime_predmet.\\ Примарни атрибути: id_predmet, ime_predmet.\\ **R,,11,,** се наоѓа во **BCNF**, бидејќи левата страна на двете ф.з. е суперклуч.\\ ---- R,,12,,(id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, iznos, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet)\\ F,,12,, = {\\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ id_plakjanja → iznos,\\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor\\ }\\ Кандидат клучеви: (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje);\\ Примарни атрибути: id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje.\\ R,,12,, е во 1НФ поради парцијалните зависности. Една од повеќето ф.з. кои прават проблем е id_plakjanja → iznos.\\ id_plakjanja ќе го ставиме во посебна релација R,,13,,, заедно со атрибутите кои тој ги определува. Останатото во R,,14,,.\\ ---- R,,13,,(id_plakjanja, iznos)\\ F,,13,, = {\\ id_plakjanja → iznos\\ }\\ Кандидат клучеви: id_plakjanja.\\ Примарни атрибути: id_plakjanja.\\ **R,,13,,** се наоѓа во **BCNF**, бидејќи има само една ф.з. и левата страна на таа ф.з. е суперклуч.\\ ---- R,,14,,(id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, opis_domasno, datum_zainteresiran, id_plakanja, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet)\\ F,,14,, = {\\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ id_domasno → opis_domasno,\\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor\\ }\\ Кандидат клучеви: (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje);\\ Примарни атрибути: id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, id_plakanja, id_slusanje.\\ R,,14,, е во 1НФ поради парцијалните зависности. Една од повеќето ф.з. кои прават проблем е id_domasno → opis_domasno.\\ id_domasno ќе го ставиме во посебна релација R,,15,,, заедно со атрибутите кои тој ги определува. Останатото во R,,16,,.\\ ---- R,,15,,(id_domasno, opis_domasno)\\ F,,15,, = {\\ id_domasno → opis_domasno,\\ }\\ Кандидат клучеви: id_domasno.\\ Примарни атрибути: id_domasno.\\ **R,,15,,** се наоѓа во **BCNF**, бидејќи има само една ф.з. и левата страна на таа ф.з. е суперклуч.\\ ---- R,,16,,(id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_domasno, datum_zainteresiran, id_plakanja, id_slusanje, plateno, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet)\\ F,,16,, = {\\ (id_predmet, id_ucenik) → datum_zainteresiran, \\ (id_ucenik, id_domasno) → dali_zavrseno_domasno,\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ (id_nastavnik, id_ucenik) → cena_po_cas, \\ (id_nastavnik, id_ucenik) → broj_casovi_po_dogovor\\ }\\ Кандидат клуч: (id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_plakanja, id_slusanje).\\ Примарни атрибути: id_admin, id_nastavnik, id_ucenik, id_kvalifikacija, id_predmet, id_cas, id_plakanja, id_slusanje.\\ R,,16,, е во 1НФ поради парцијалните зависности. Една од повеќето ф.з. кои прават проблем е (id_cas, id_slusanje) → id_plakjanja.\\ Ја разделуваме релацијата на R,,17,, и R,,18,,. ---- R,,17,,(id_cas, id_slusanje, id_plakjanja, id_ucenik, plateno)\\ F,,17,, = {\\ (id_cas, id_slusanje) → id_plakjanja,\\ (id_cas, id_slusanje) → id_ucenik,\\ (id_cas, id_slusanje) → plateno,\\ }\\ Кандидат клуч: (id_cas, id_slusanje).\\ Примарни атрибути: id_cas, id_slusanje.\\ **R,,17,,** e во **BCNF** поради тоа што левата страна на сите ф.з. е суперклуч. ---- R,,18,,(id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, datum_zainteresiran, id_slusanje, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor, opis_predava_predmet)\\ F,,18,, = {\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ }\\ Кандидат клуч: (id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, datum_zainteresiran, id_slusanje, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor); \\ Примарни атрибути: id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, datum_zainteresiran, id_slusanje, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor\\ R,,18,, е во 1НФ бидејќи парцијалната зависност (id_nastavnik, id_predmet) → opis_predava_predmet прави проблем.\\ Мора да ја декомпонираме. За таа цел ги добиваме релациите R,,19,,(id_nastavnik, id_predmet, opis_predava_predmet) и R,,20,,(id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, datum_zainteresiran, id_slusanje, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor) ---- R,,19,,(id_nastavnik, id_predmet, opis_predava_predmet)\\ F,,19,, = {\\ (id_nastavnik, id_predmet) → opis_predava_predmet,\\ }\\ Кандидат клуч: (id_nastavnik, id_predmet) \\ Примарни атрибути: id_nastavnik, id_predmet\\ R,,19,, e во **BCNF**. ---- R,,20,,(id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, datum_zainteresiran, id_slusanje, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor)\\ F,,20,, = {} - празно множество - релацијата е во **BCNF**. ---- F,,1,,**U**F,,3,,**U**F,,5,,**U**F,,7,,**U**F,,9,,**U**F,,11,,**U**F,,13,,**U**F,,15,,**U**F,,17,,**U**F,,19,,**U**F,,20,, е еквивалентно со F,,c,,.\\ Декомпозицијата е без загуба на зависности односно сите првобитни зависности кои се наоѓаат во F,,c,,, се содржат во унијата од сите горенаведени множества ф.з.\\ Тргнувајќи од почетокот на декомпозицијата, помеѓу секои две релации има барем еден заеднички атрибут кој е кандидат клуч на барем една од релациите. Според тоа нема загуба на информации и може да се направи join. ---- Краен резултат од релациите добиени по декомпозицијата (сите се во BCNF):\\ **nastavnici**\\ R,,1,,(id_nastavnik, prezime_nastavnik, opis_nastavnik, email_nastavnik, password_nastavnik, telefonski_broj_nastavnik)\\ **admini**\\ R,,3,,(id_admin, ime_admin, prezime_admin, email_admin, password_admin)\\ **ucenici**\\ R,,5,,(id_ucenik, ime_ucenik, prezime_ucenik, opis_ucenik, email_ucenik, password_ucenik, telefonski_broj_ucenik)\\ **kvalifikacii**\\ R,,7,,(id_kvalifikacija, dokument_kvalifikacija)\\ **casovi**\\ R,,9,,(id_cas, vreme_pocetok_cas, tema_cas)\\ **predmeti**\\ R,,11,,(id_predmet, ime_predmet)\\ **plakjanja**\\ R,,13,,(id_plakjanja, iznos)\\ **domasni_zadaci**\\ R,,15,,(id_domasno, opis_domasno)\\ **plakanja_ucenik**\\ R,,17,,(id_cas, id_slusanje, id_plakjanja, id_ucenik, plateno)\\ **predava_predmet**\\ R,,19,,(id_nastavnik, id_predmet, opis_predava_predmet)\\ **evidencija**\\ R,,20,,(id_admin, id_nastavnik, id_kvalifikacija, id_predmet, id_cas, id_domasno, datum_zainteresiran, id_slusanje, dali_zavrseno_domasno, cena_po_cas, broj_casovi_po_dogovor)\\