Skripta usmeni Projektovanje Baza Podataka

19
1. OSNOVNE DEFINICIJE I KARAKTERISTIKE METODA NORMALIZACIJE. U teoriji relacionog modela podataka se polazi od pretpostavke da jedna šema relacije – šema univerzalne relacije predstavlja inicijalni model realnog sistema, bez obzira na kompleksnost tog realnog sistema. Međutim, univerzalna relacija je, kao baza podataka, veoma nepogodno rešenje, pre svega sa tačke gledišta efikasnog održavanja baze podataka u konzistentnom stanju. Problemi koji se javljaju pri održavanju univerzalne relacije u konzistentnom stanju, nazivaju se anomalijama ažuriranja. Problemi, izazivani anomalijama ažuriranja, rešavaju se rastavljanjem (dekomponovanjem) šeme univerzalne relacije na skup šema relacija S, takav da je [S]>1. Normalizacija је metoda projektovanja skupa šema relacija šeme relacione baze podataka. To je strogo formalan postupak čiji je krajnji cilj zamena šeme univerzalne relacije sa skupom šema relacija sa poželjnim osobinama, kako bi se eliminisale anomalije ažuriranja. Postoje dva osnovna postupka normalizacije: metod sinteze i metod dekompozicije. Postizanje određene normalne forme predstavlja jedan od ciljeva dekomponovanja šeme univerzalne relacije. U teoriji projektovanja šeme relacione baze podataka je definisan veći broj normalnih formi, kao što su: prva normalna forma (1NF), druga norm.forma (2NF), treća norm.forma (3NF), Boyce-Coddova norm.forma (BCNF), četvrta norm.forma (4NF) i peta normalna forma (5NF). 1

description

Skripta za pripremu usmenog ispita iz predmet a projektovanje baza podatak

Transcript of Skripta usmeni Projektovanje Baza Podataka

Page 1: Skripta usmeni Projektovanje Baza Podataka

1. OSNOVNE DEFINICIJE I KARAKTERISTIKE METODA NORMALIZACIJE.

U teoriji relacionog modela podataka se polazi od pretpostavke da jedna šema relacije – šema univerzalne relacije predstavlja inicijalni model realnog sistema, bez obzira na kompleksnost tog realnog sistema.

Međutim, univerzalna relacija je, kao baza podataka, veoma nepogodno rešenje, pre svega sa tačke gledišta efikasnog održavanja baze podataka u konzistentnom stanju.

Problemi koji se javljaju pri održavanju univerzalne relacije u konzistentnom stanju, nazivaju se anomalijama ažuriranja.

Problemi, izazivani anomalijama ažuriranja, rešavaju se rastavljanjem (dekomponovanjem) šeme univerzalne relacije na skup šema relacija S, takav da je [S]>1.

Normalizacija је metoda projektovanja skupa šema relacija šeme relacione baze podataka.

To je strogo formalan postupak čiji je krajnji cilj zamena šeme univerzalne relacije sa skupom šema relacija sa poželjnim osobinama, kako bi se eliminisale anomalije ažuriranja.

Postoje dva osnovna postupka normalizacije: metod sinteze i metod dekompozicije.

Postizanje određene normalne forme predstavlja jedan od ciljeva dekomponovanja šeme univerzalne relacije.

U teoriji projektovanja šeme relacione baze podataka je definisan veći broj normalnih formi, kao što su: prva normalna forma (1NF), druga norm.forma (2NF), treća norm.forma (3NF), Boyce-Coddova norm.forma (BCNF), četvrta norm.forma (4NF) i peta normalna forma (5NF).

2. OSOBINE SKUPA ŠEMA RELACIJE NAKON PRIMENE ALGORITMA SINTEZE.

Postupak se primenjuje na šemu relacije (U, F), a rezultat je skup šema relacija S={(Ri, Ki) | i=1, …, n}, gde je Ri Í U, a Ki skup određenih (sintetizovanih) ključeva.

Pri tome važi i sledeće:

1. Skup šema S sadrži kompletnu informaciju o skupu obeležja U (konzervira skup obeležja),

2. Skup šema relacija sadrži kompletnu informaciju o skupu funkcionalnih zavisnosti F (konzervira skup funkcionalnih zavisnosti),

1

Page 2: Skripta usmeni Projektovanje Baza Podataka

3. Svaka šema relacije (Ri, Ki) iz S je, najmanje, u 3NF,

4. Skup šema relacija S implicira zavisnost spoja (R1, ..., Rn),

Ne postoji skup šema relacija T sa manjim brojem šema relacija nego S, a da zadovoljava uslove 1), 2) i 3).

3. OSNOVNE DEFINICIJE KORIŠCENE U ALGORITMU METODA SINTEZE.

Definicija:

Određeni (ili sintetizovani) ključ šeme relacije (R, K) je skup obeležja XÎ K takav da važi:

(X Í R) (X Î lhs(H))

Algoritam sinteze ne pronalazi sve ključeve šeme relacije, već samo one koji su posledica levih strana funkcionalnih zavisnosti u inicijalnom skupu funkcionalnih zavisnosti F.

Ključevi koji nisu određeni, nazivaju se implicitnim ili nesintetizovanim.

Svi ključevi šeme relacije, određeni i implicitni, međusobno su ekvivalentni.

Jedan od određenih ključeva se proglašava za primarni ključ. Primarnim ključem se proglašava onaj ekvivalentni ključ šeme relacije, putem čijih vrednosti se, najčešće, vrši traženje određene torke u relaciji.

Primer:

Neka je U = {A, B, C, D, E}, a F = {AB→C, AB→D, AB→E, C→A, D→B}. Algoritam sinteze daje skup šema relacija

S={ ({A,B,C,D,E}, {AB}), ({A,C}, {C}), ({B,D}, {D}) }.

Pri tome je AB jedini određeni (sintetizovani) ključ šeme relacije ({A,B,C,D,E}, {AB}), mada ta šema relacije poseduje sledeći skup ključeva K= {AB, AD, CB, CD}.

Algoritam sinteze sadrži 7 koraka.

Prva dva koraka prevode inicijalno zadati skup funkcionalnih zavisnosti F u njegov kanonični pokrivač H.

U 1. koraku se vrši redukcija levih strana, a u 2. eliminacija trivijalnih i tranzitivnih zavisnosti.

2

Page 3: Skripta usmeni Projektovanje Baza Podataka

3. korak deli H na disjunktivne podskupove funkcionalnih zavisnosti sa istim levim stranama.

Da bi se dobio minimalni broj šema relacija, u 4. koraku se pronalaze i izdvajaju u poseban skup funkcionalnih zavisnosti J, ekvivalentne leve strane funkcionalnih zavisnosti, a njihovi podskupovi funkcionalnih zavisnosti se uniraju.

Generisanjem funkcionalnih zavisnosti X→Y i Y→X i njihovim smeštajnem u J, može doći do situacije da neke od funkcionalnih zavisnosti u H postanu tranzitivne. Pronalaženje ovih tranzitivnih zavisnosti se vrši u 5. koraku.

U 6. koraku algoritma sinteze se vrši rekonstrukcija podskupova tako, da se iz njih eliminišu, eventualne tranzitivne zavisnosti, a uključuju se odgovarajuće funkcionalne zavisnosti X→Y i Y→X.

U 7. koraku se formira skup šema relacija S tako, što se skup obeležja funkcionalnih zavisnosti jednog podskupa proglašava za skup obeležja same šeme relacije, a skup levih strana funkcionalnih zavisnosti tog podskupa, za skup sintetizovanih ključeva iste šeme relacije.

4. METOD SINTEZE – 1. KORAK ALGORITMA I ODABRANI PRIMER.

U prvom koraku se vrši 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 obeležene sa X, a oblik zavisnosti je X A. Skupovi obeležja A i X moraju biti podskupovi skupa U.

3

Page 4: Skripta usmeni Projektovanje Baza Podataka

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 A∈F’).

U okviru ove programske petlje je ugnježđena jos jedna programska petlja. Ona nosi naziv RADI eliminacija_obelezja ∀B∈X. U unutrašnjoj programskoj pelji “eliminacija_obelezja” se analizira svako obeležje leve strane odabrane funkcionalne zavisnosti.To praktčno znači da je svako to obeležje potencijalno suvišno.U okviru unutrašnje petlje “eliminacija_obelezja” postoji jedna naredba grananja koja ispituje da li je neko obeležje suvišno ili nije u okviru analizirane grupe obeležja sa leve strane funkcionalnih zavisnosti u oznaci X. Sam proces ispitivanja uključuje formalni prisup definicije zatvaranja skupa obeležja 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 suvišno u skupu X. Unutrasnja ugnježđena petlja pod nazivom “eliminacija_obelezja” se ponavlja za svako obeležje leve strane odabrane funkcionalne zavisnosti skupa X.

Spoljna petlja vrši redukciju za sve funkcionalne zavisnosti tipa XA iz F’. Ovo praktično znači da dve ugnježđene programske petlje tipa DO WHILEanaliziraju svako obeležje leve strane svake funkcionalne zavisnosti polaznog skupa F’.

U okviru programske petlje REDUKCIJA se u svakom koraku u skup E’, koji je u početku bio prazan, dodaje zavisnost tipa X A (X određuje A) za koju sada možemo garantovati da leva strana te zavisnosti u oznaci X kao skup obeležja nema suvišnog obeležja.

Rezultat prvog koraka algoritma sinteze je skup E’ koji u sebi sadrži isključivo redukovane funkcionalne zavisnosti oblika XA, u kojima svaka leva strana funkcionalnih zavisnosti sigurno ne sadrži ni jedno suvišno obeležje.

5. METOD SINTEZE – 2. KORAK ALGORITMA I ODABRANI PRIMER.

4

Page 5: Skripta usmeni Projektovanje Baza Podataka

U drugom koraku algoritma sinteze se transformiše 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 ključnideo drugog koraka algoritma predstavlja upravljačka 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 tačan tada je funkcionalna zavisnost XA tranzitivna ili trivijalna i kao takva se eliminiše 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’ praktično predstavlja polaznu osnovu eksplicitno za treći i četvrti korak algoritma sinteze, а моže se reći da implicitno predstavlja osnovu i za korake 5, 6 i 7 ovog algoritma.

6. METOD SINTEZE – 3. I 4. KORAK ALGORITMA I ODABRANI PRIMER.

U trećem koraku se vrši 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 treći 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

5

Page 6: Skripta usmeni Projektovanje Baza Podataka

zavisnosti Y A je jednaka levoj strain particivnog skupa G’ od X i, 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 X i 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 (X i)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).

6

Page 7: Skripta usmeni Projektovanje Baza Podataka

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’(X i)G’(Xi)\{YA|(A∈Xi 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.

7. METOD SINTEZE – 5., 6. I 7. KORAK ALGORITMA I ODABRANI PRIMER.

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.

7

Page 8: Skripta usmeni Projektovanje Baza Podataka

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 K’inaredbom POSTAVIK’i 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’(X i). 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).

8

Page 9: Skripta usmeni Projektovanje Baza Podataka

18. Sintaksa i semantika Transact-SQL naredbi koje se koriste za deklaraciju i dodeljivanje vrednosti promenljivih

Okidači, poput procedura i funkcija baza podataka se mogu posmatrati i kao programski moduli pohranjeni u bazi podataka. Kada u nekom programu želimo privremeno memorisati neke podatke (najčešće međurezultate obrade) za ove potrebe uvodimo programske promenljive. Programske promenljive rezervišu deo RAM-a i u tom delu radne memorije se pamte njihove vrednosti.

Sintaksa iskaza za deklaraciju promenljivih je sledeća:

Naziv svake korisnički definisane promenljive u proceduralnim mehanizmima SQL-Servera mora počinjati sa simbolom @.

Nakon deklaracije svaka promenljiva ima NULL vrednost.

Promenljivama se vrednost dodeljuje pomoću SET ili SELECT iskaza.

Sintaksa SET iskaza:

SET @naziv_promenljive = { izraz | SELECT_iskaz }

Izraz čija će vrednost biti dodeljena promenljivoj može sadržati promenljive, konstante, aritmetičke operatore i drugo.

Primeri SET iskaza:

SET @brojac = @brojac + 1

SET @rbr = (SELECT rbr FROM kartica WHERE id_kart=111)

SET @datum = (SELECT datum FROM kartica WHERE id_kart=111)

U slučajevima kada se nova vrednost promenljive javlja kao rezultat nekog SELECT iskaza, a naročito ako se različite vrednosti pronađene u kolonama jedne torke žele dodeliti odgovarajućim promenljivama, uputno je dodeljivanje vrednosti izvršiti unutar samog SELECT iskaza, umesto korišćenja SET iskaza.

Prethodno navedeni SET iskazi:

SET @rbr = (SELECT rbr FROM kartica WHERE id_kart=111)

SET @datum = (SELECT datum FROM kartica WHERE id_kart=111)

se mogu zameniti samo jednim iskazom:

SELECT @rbr=rbr, @datum=datum FROM kartica WHERE id_kart=111

9

Page 10: Skripta usmeni Projektovanje Baza Podataka

19. Sintaksa i semantika Transact-SQL naredbi koje se koriste za uslovno grananje i iterativno izvršavanje.

Sintaksa IF iskaza:

IF Bulovski_izraz     { sql_iskaz | blok_sql_iskaza } [ ELSE     { sql_iskaz | blok_sql_iskaza } ]

Bulovski izraz

Izraz koji vraća TRUE ili FALSE. Ukoliko sadrži SELECT iskaz isti se mora navesti u zagradama.

{sql_iskaz | blok_sql_iskaza}

Ukoliko se IF ili ELSE grana odnosi samo na jedan SQL iskaz ovaj iskaz se može navesti odmah iza IF ili ELSE. Ukoliko se u nekoj grani mora izvršiti više od jedne naredbe ove naredbe treba grupisati kao blok iskaza. Blok iskaza se definiše pomoću ključnih reči BEGIN (za označavanje početka) i END (za označavanje završetka bloka).

Sintaksa WHILE iskaza:

WHILE Bulovski_izraz     { sql_iskaz | blok_sql_iskaza } [ BREAK ]

    { sql_iskaz | blok_sql_iskaza }

[ CONTINUE ]

[ BREAK ]

Ključna reč koja upućuje ne izlazak iz petlje bez obzira na ispunjenost uslova definisanog u Bulovskom izrazu.

[ CONTINUE ]

Ključna reč koja upućuje na izvršenje jedne nove iteracije, bez obzira na (ne)postojanje daljnjih iskaza u bloku iskaza kojem pripada i ova ključna reč.

Primer upotrebe WHILE iskaza:

SET @rbr = 1

10

Page 11: Skripta usmeni Projektovanje Baza Podataka

WHILE @rbr > 0

BEGIN

SELECT @br_st=count(*) FROM stavka WHERE kolic > @rbr

IF @br_st < 5

BREAK

SET @rbr = @rbr + 1

END

20. Način korišćenja kusora sa definisanjem i objašnjenjem šest proceduralnih koraka.

■ Rezultat bilo koje SELECT naredbe predstavlja neki skup torki. Ukoliko rezultujući skup torki:

a) čini samo jedna torka - promenljivama, za koje je u SELECT klauzuli specificirana dodela vrednosti, se dodeljuje vrednost odgovarajućih izraza u rezultujućoj torci.

b) čini prazan skup - promenljivama se dodeljuje NULL vrednost. c) se sastoji od više torki - vrednost promenljivih će biti jednaka vrednosti

odgovarajućih izraza u poslednjoj selektiranoj torki. Na ovaj način se gubi informacija o vrednostima izraza za sve ostale torke rezultujućeg skupa. Ukoliko je neophodno znati vrednosti za sve selektirane torke, a postoji mogućnost da rezultujući skup čini više torki, koriste se kursori

■ Rad sa kursorima obično podrazumeva sledeće korake: – Deklaracija kursora pri kojoj se kursoru pridružuje neki SELECT iskaz i definišu

karakteristike kursora (npr. da li se torke u kursoru mogu modifikovati ili ne).– Otvaranje kursora koje podrazumeva izvršavanje pridruženog SELECT iskaza i

popunjavanje kursora torkama rezultujućeg skupa.– Pregled torki u kursoru (pristup narednoj ili, eventualno, prethodnoj torki se

naziva fetch-om).– Opcionalno, modifikaciju tekuće torke.– Zatvaranje kursora

Dealokacija kursora.

21. Sintaksa i semantika Transact-SQL naredbi za rad sa kursorima.

Sintaksa iskaza za deklaraciju kursora:DECLARE naziv_kursora FOR select_iskaz

11

Page 12: Skripta usmeni Projektovanje Baza Podataka

Prilikom deklaracije kursora u radnoj memoriji se zapisuje definicija kursora, tj. pamti se select iskaz čijim izvršenjem će se formirati kursor. Nakon deklaracije, slično promenljivama, i kursor ima NULL vrednost.

Sintaksa iskaza za otvaranje kursora:

OPEN naziv_kursora

Otvaranje kursora predstavlja instrukciju za dinamičko izvršenje select iskaza dodeljenog kursoru i punjenje kursora rezultujućim torkama.

Sintaksa iskaza za zatvaranje kursora:

CLOSE naziv_kursora

Zatvaranje kursora ima za posledicu njegovo pražnjenje od torki. Poništava efekat OPEN iskaza.

Sintaksa iskaza za dealokaciju kursora:

DEALLOCATE naziv_kursora

Dealokacija kursora znači brisanje definicije kursora i oslobađanje odgovarajućeg dela radne memorije. Poništava efekat DECLARE iskaza.

22. Sintaksa i semantika Transact-SQL naredbi za pristupanje torkama kursora.

Sintaksa iskaza za pristup torkama kursora:

FETCH [ FROM ] naziv_kursora

[ INTO @naziv_promenljive [ ,...n ] ]

Prvi FETCH iskaz po otvaranju kursora čita prvu torku kursora, a svaki naredni FETCH sledeću torku. Koliko puta Fetch-ovati kursor kada se unapred ne može znati koliko ima torki u kursoru?

U rešenju ovog problema nam pomaže predefinisana sistemska promenljiva @@FETCH_STATUS koja vraća status poslednjeg FETCH iskaza nad aktivnim kursorom:

Return vrednost Opis

0 FETCH iskaz je bio uspešan.

12

Page 13: Skripta usmeni Projektovanje Baza Podataka

-1 FETCH iskaz nije uspeo ili je torka izvan rezultujućeg skupa.

-2 Fetch-ovana torka ne postoji.

Šablon rada sa kursorom:

DECLARE naziv_kursora CURSOR FOR SELECT izraz [ ,...n ]…

OPEN naziv_kursora

FETCH naziv_kursora INTO @naziv_promenljive [ ,...n ]

WHILE @@FETCH_STATUS=0

BEGIN

Obrada fetch-ovane torke

FETCH naziv_kursora INTO @naziv_promenljive [ ,...n ]

END

CLOSE naziv_kursora

DEALLOCATE naziv_kursora

23. Sintaksa i semantika Transact-SQL naredbi za prikaz informacija i poruka.

Sintaksa iskaza za štampanje informacija:PRINT stringovski_izraz | @naziv_promenljive

Napomena: Promenljiva mora biti stringovskog tipa (char ili varchar) ili pogodna za konvertovanje u takav tip podatka.

Primer:

PRINT N‘Ova poruka je stampana ' + RTRIM( CONVERT(CHAR(30), GETDATE()) ) + N'.';

Sintaksa iskaza za ekranski prikaz poruka o grešci:

RAISERROR ( { stringovski_izraz | @naziv_promenljive }

 { ,severity ,state }

    [ ,argument [ ,...n ] ] )

13

Page 14: Skripta usmeni Projektovanje Baza Podataka

Napomena: Promenljiva mora biti stringovskog tipa (char ili varchar) ili pogodna za konvertovanje u takav tip podatka.

Primer:

RAISERROR ('Ocena studenta sa brojem dosijea %s iz predmeta sa sifrom %s nije zadovoljavajuca!', 16, 1, @bro_dos, @sif_pre)

%s – upućuje na stringovski argument,

14