You are on page 1of 4

U prvom koraku se vri transformacija polaznog skupa F u skup E.

Transformacija se sastoji iz postupka redukcije levih strana funkcionalnih zavisnosti skupa F. Leve strane u oznaci ovog algoritma su obeleene sa X, a oblik zavisnosti je X A. Skupovi obeleja A i X moraju biti podskupovi skupa U. U prvoj naredbi prvog koraka algoritma skup E poprima vrednost praznog skupa (POSTAVI E u E). Druga naredba je programska petlja REDUKCIJA, u kojoj je ulazna vrednost svaka funkcionalna zavisnost polaznog skupa F (RADI redukcija (X AF). U okviru ove programske petlje je ugnjeena jos jedna programska petlja. Ona nosi naziv RADI eliminacija_obelezja BX. U unutranjoj programskoj pelji eliminacija_obelezja se analizira svako obeleje leve strane odabrane funkcionalne zavisnosti.To praktno znai da je svako to obeleje potencijalno suvino.U okviru unutranje petlje eliminacija_obelezja postoji jedna naredba grananja koja ispituje da li je neko obeleje suvino ili nije u okviru analizirane grupe obeleja sa leve strane funkcionalnih zavisnosti u oznaci X. Sam proces ispitivanja ukljuuje formalni prisup definicije zatvaranja skupa obeleja u odnosu na definisani skup funkconalnih zavisnosti F. U uslovu naredbe grananja izraz AKO JE A elemenat skupa zatvaranja obelezja X-B+ u odnosu na F TADA se iz skupa obelezja X eliminise obelezje B, sto znaci da je obelezje B bilo suvisno. Ukoliko prethodni uslov nije zadovoljen TADA obelezje B se ne odstranjuje iz skupa X i ono nije suvino u skupu X. Unutrasnja ugnjeena petlja pod nazivom eliminacija_obelezja se ponavlja za svako obeleje leve strane odabrane funkcionalne zavisnosti skupa X. Spoljna petlja vri redukciju za sve funkcionalne zavisnosti tipa XA iz F. Ovo praktino znai da dve ugnjeene programske petlje tipa DO WHILEanaliziraju svako obeleje leve strane svake funkcionalne zavisnosti polaznog skupa F. U okviru programske petlje REDUKCIJA se u svakom koraku u skup E, koji je u poetku bio prazan, dodaje zavisnost tipa X A (X odreuje A) za koju sada moemo garantovati da leva strana te zavisnosti u oznaci X kao skup obeleja nema suvinog obeleja. Rezultat prvog koraka algoritma sinteze je skup E koji u sebi sadri iskljuivo redukovane funkcionalne zavisnosti oblika XA, u kojima svaka leva strana funkcionalnih zavisnosti sigurno ne sadri ni jedno suvino obeleje. U drugom koraku algoritma sinteze se transformie skup E koji je rezultat prvog koraka algoritma u skup H koji predstavlja neredundantno pokrivanje za skup E. Prva naredba drugog koraka postavlja E u H, a kljunideo drugog koraka algoritma predstavlja upravljaka programska struktura tipa programske petlje pod nazivom eliminacija_fz. Obzirom da u prvoj naredbi se skup E kompletno prenese u skup H dalja analiza u drugom algoritamskom koraku se odnosi iskljucivo na H. Programska petlja eliminacija_fz analizira svaku funkcionalnu zavisnost skupa H. Analiza se vrsi na osnovu ugnjezdjene strukture grananja, gde je uslov te strukture vezan za pojam zatvaranja skupa X u odnosu na skup H bez posmatrane zavisnosti XA. Ako je navedeni uslov taan tada je funkcionalna zavisnost XA tranzitivna ili trivijalna i kao takva se eliminie iz skupa H. Postupak se ponavlja za svaku funkcionalnu zavisnost iz

skupa H i kao rezultat drugog koraka se dobija skup H u kome su odstranjene sve tranzitivne i trivijalne funkcionalne zavisnosti i ovo neredundantno pokrivanje u oznaci H je prva prava prekretnica i ozbiljan rezultat algoritma sinteze.Neredundantno pokrivanje H praktino predstavlja polaznu osnovu eksplicitno za tredi i etvrti korak algoritma sinteze, e se redi da implicitno predstavlja osnovu i za korake 5, 6 i 7 ovog algoritma. U tredem koraku se vri particionisanje skupa H koji predstavlja pokrivac pocetnog skupa F u podskupove G od Xi u kome index i uzima vrednosti od 1 m, a m predstavlja vrednost kardinaliteta levih strana skupa H. Ceo tredi korak se sastoji iz dve programske petlje. Prva je RADI formiranje_podskupova u kojoj se posmatraju sve f-zavisnosti iz skupa H. U toj petlji se ujedno vrsi i analiza svake funkcionalne zavisnosti u H. U prvom koraku ove petlje se u promenljivu ind postavlja vrednost 0, sto ujedno predstavlja i zastavicu (semafor) u ovom algoritmu, odnosno, ta promenljiva ima bivalentne vrednosti 0 i 1, na osnovu kojih se realizuju odredjeni delovi algoritamskog koraka. U okviru spoljne programske petlje se definise i unutrasnja programska petlja, koja trazi podskupove G od Xi iz skupa G od X, sve dok je vrednost indikatora jednaka nuli. AKO JE Y=Xi, sto znaci da leva strana funkcionalnih zavisnosti Y A je jednaka levoj strain particivnog skupa G od Xi, tada se zavisnost YA dodaje na skup funkcionalnih zavisnosti G od Xi. Nakon ovog koraka se menja broj indikatora i postavlja se na 1, sto prakticno znaci da izlazimo iz petlje trazenja podskupova. Ako indicator nije promenio vrednost tada se u skup funkcionalnih zavisnosti G od Y dodaje samo jedna zavisnost YA i tako formira jednoclani skup G od Y. Ovaj jednoclani skup se dodaje na skup G od X i to je ujedno i poslenja naredba spoljne petlje formiranja podskupova. Ova poslednja naredba je u sustini poslednja naredba za prvu iteraciju ove petlje, odnosno, ceo postupak se ponavlja za sve funkcionalne zavisnosti skupa H, koji predstavlja rezultat drugog koraka algoritma sinteze i ujedno je kronicko pokrivanje za pocetni skup F. Obzirom da se iterativni postupak ponavlja u okviru programske petlje formiranje_podskupova, tada mozemo zakljuciti da svaka funkcionalna zavisnost oblika Y A iz H ce biti particionisana u neki od podskupova G od Xi. Konacan rezultat ovog koraka je skup G od X, koji sadrzi skupove G od Xi, a skupova G od Xi ima onoliko, koliko postoji razlicitih levih strana u skupu H. U opstem slucaju, skupovi G od Xi mogu biti jednoclani ili viseclani, sto zavisi od samog skupa H, odnosno od prirode ogranicenja koja su ugradjena u kronicki pokrivac.

Cetvrti korak vrsi izdvajanje ekvivalentnih levih stran iz skupa G od X i smesta ih u skup J. Skupu J se u stvari nalaze ekvivalentni kljucevi koji se izdvajaju u ovom koraku.Sam process izdvajanja se realizuje kroz jednu jedinu programsku petlju pod nazivom ekvi_lhs.Ova programska petlja analizira svaki G od Xitako sto prakticno posmatra sve participativne podskupove od G od X1 do G od Xn. Ovi participativni podskupovi su prakticno svi razliciti, sto je i posebno naglaseno u okviru ovog algoritamskog koraka, odnosno posmatra se G od Xi je razlicito od G od Xj. Proces utvrdjivanja ekvivalentnih kljuceva se realizuje koriscenjem definicije zatvaranja skupa obelezja. U naredbi grananja, ciji formalni oblik glasi: Ako je (Xi)H+ = (Xj)H+ TADA su obelezja Xi i Xj u sustini ekvivalentni kljucevi. Ako je navedeni uslov tacan,

odnosno, ako su skupovi zatvaranja za obelezja Xi i Xj, u odnosu na skup H jednaki, tada na osnovu definicije zatvaranja se izvodi direktna implikacija da su Xi i Xjdva ekvivalentna kljuca. Naredni korak algoritma, u slucaju ovog tacnog uslova, postavlja u skup J zavisnosti XiXj i XjXi sa naredbom POSTAVI J J U {XiXj, Xi Xj}. Obzirom da je doslo do promene u parcijalnim skupovima G (X) u novi skup G (X) G (Xi) U G(Xj). U G(X) se odstranjuje onaj skup zavisnosti u oznaci G (Xi) ako je bio jednoclan naredbom G(X)G(X)\{G(Xj)}. U slucaju da skup nije bio jednoclan iz njega se odstranjuju i sve funkcionalne zavisnosti koje direktno uticu na kreiranje ekvivalentnih kljuceva. Naredbom G(Xi)G(Xi)\{YA|(AXi U Xj) i (Y=Xi v Y=Xj}). TO je ujedno poslednja naredba u okviru naredbe grananja i istovremeno poslednja naredba naredbe programske petlje ekvi_lhs, koja se odnosi na prvu iteraciju ove programske petlje. Naredne iteracije programske petlje ekvi_lhs analiziraju i sve ostale parcione podskupove i ti parcioni podskupovi prakticno predstavljaju i ukupne iteracije ovog programskog koraka iz cega se namece zakljucak da je broj iteracija ekvi_lhs jednak broju poredjenja dva po dva parciona skupa. To znaci da je ovo kombinatorno prilicno slozen algoritamski korak jer se traze skupovi zatvaranja za svako obelezje G(Xi) i mora se izvrsiti medjusobno poredjenje svih participativnih podskupova. U petom koraku se prakticno ponavlja ideja drugog koraka, ali na razlicitim skupovima koji se analiziraju. U prvom koraku algoritma se uniraju svi skupovi G(Xi) i prenose u jedan jedinstven skup G (X). U narednom koraku se u skup L prenese prazan skup u kome ce biti prenete pronadjene tranzitivne funcionalne zavisnosti. Naredni korak je programska petlja tranzitivna_fz u kojoj se analizira svaka funkcionalna zavisnost oblika XA iz G. Za utvrdjivanje da li je neka fz tranzitivna ili ne, ponovo se koristi definicija zatvaranja skupa obelezja X u odnosu na skupove G i J iz koje se izuzima zavisnost XA. AKO A pripada skupu zatvaranja obelezja X u odnosu na G U J bez XA, TADA je fz X>A tranzitivna i naredbom POSTAVIL L U {XA}. Ovom naredbom se premesta fz XA u skup L.Ovo je ujedno i kraj prve iteracije u sestom koraku, a petlja tranzitivna_fz ponavlja svoje iteracije za svaku funkcionalnu zavisnost skupa G.Rezultat ovoga koraka je modifikovan skup G u kome se nalaze sve novopronadjene tranzitivne fz. Sesti korak algoritma sinteze rekonstruise podskupove. U ovom koraku se posmatra svaka grupa G(Xi), G(Xi), G(Xi) ako su nastali u prethodnim koracima. Rekonstrukcija podskupova se realizuje tako sto se u novi G(Xi) postavljaju funkcionalne zavisnosti koje nisu u L, ali cija zatvaranja mogu biti jednaka. To znaci da se rekonstrukcija vrsi na osnovu rezultata treceg, cetvrtog i petog koraka. Konkretno se skupu G(Xi) pridruzuju svi njegovi ekvivalentni kljucevi, a istovremeno iskljucuju sve novouocene tranzitivne zavisnosti. Na taj nacin dobijamo rekonstruisane podskupove G(Xi) koji sadrze samo neophodan i minimalan broj funkcionalnih zavisnosti. U sedmom koraku se formira skup sema relacija sa jednom jedinom strukturom programske petlje koja prolazi kroz sve podskupove G(Xi). Ovaj prolazak u okviru petlje izdvaja sva obelezja skupa G(Xi) i prenosi ih u skup Rinaredbom POSTAVIRiattr (G(Xi)). Naredna naredba puni kljuceve seme relacije tako

sto sve leve strane fz skupa G(Xi) postavlja u skup Kinaredbom POSTAVIKi lhs (G(Xi)). U skup S ,koji je prvom naredbom u ovom koraku napunjen, praznim skupom se prenose novonastali skupovi naredbom POSTAVIS S U {Ni(Ri, Ki)} gde su u skupu Ni skupovi obelezja, a u skupu Ki skupovi kljuceva skupa G(Xi). Rezultat prve iteracije sedmog koraka je kreiranje seme relacije oblika N(Ri, Ki) sto znaci da su jedina ogranicenja ove seme relacije ogranicenja kljuca koji je sintetizovan i dobijen kao jedan od krajnjih rezultata kompletnog algoritma. Iterativni postupak programske petlje RADI skup_sema_relacija, u okviru sedmog koraka, se ponavlja sve dok postoji skupova G(Xi) skupa G(X). To prakticno znaci da je broj iteracija sedmog koraka jednak kardinalnosti skupa G(X).

You might also like