You are on page 1of 82

SADRAJ

PREDGOVOR......................................................................................................................... 1. 2. 3. 4. 5. 6. 7. 8. 9. ARHITEKTURA SUSTAVA ZA UPRAVLJANJE BAZAMA PODATAKA..................... OSNOVE BAZE PODATAKA ENTITETI......................................................................... RELACIJE............................................................................................................................... RELACIJSKI MODEL PODATAKA.................................................................................... INTEGRITET PODATAKA................................................................................................... RELACIJSKA ALGEBRA..................................................................................................... INDEKSIRANJE BAZE PODATAKA.................................................................................. NORMALIZACIJA BAZE PODATAKA.............................................................................. SQL JEZIK BAZA PODATAKA........................................................................................ 9.1. 9.2. 9.3. 9.4. 9.5. 9.6. TIPOVI PODATAKA................................................................................................ FORMIRANJE TABLICE......................................................................................... PROMJENE STRUKTURE TABLICE..................................................................... INDEKSI.................................................................................................................... UNOS PODATAKA.................................................................................................. SELEKCIJA PODATAKA........................................................................................ 9.6.1 . 9.6.2 . 9.6.3 . 9.6.4 9.7. 9.8. 9.9. 9.10 9.11 9.12 9.13 9.14 9.15 9.16 9.17 9.18 9.19 10. 11. UVJETNI IZRAZI......................................................................................... OBLIKOVANJE IZLAZNIH REZULTATA............................................... SORTIRANJE IZLAZNIH REZULTATA................................................... 1 2 4 8 12 17 19 27 31 37 38 40 42 45 46 47 48 50 52 53 53 54 54 54 56 56 57 60 62 63 65 67 69 71 75

OGRANIAVANJE ISPISA REZULTATA................................................ . SELECT INTO (Make table upiti) ............................................................................ APPEND UPITI......................................................................................................... AURIRANJE PODATAKA U TABLICI................................................................ BRISANJE PODATAKA IZ TABLICE.................................................................... ALIASI....................................................................................................................... AGREGATNE FUNKCIJE........................................................................................ GRUPNI UPITI.......................................................................................................... UGNJEENI UPITI PODUPITI.......................................................................... UNIJA......................................................................................................................... POGLEDI................................................................................................................... OSNOVE VIEKORISNIKOG RADA.................................................................. OBRADA SQL UPITA.............................................................................................. METODE POVEZIVANJA TABLICA.....................................................................

TRANSAKCIJE...................................................................................................................... HIJERARHIJSKI MODEL PODATAKA..............................................................................

PREDGOVOR Od samog poetka razvoja raunala i informatike, obrada podataka bila je jedan od najzanimljivijih i najznaajnijih segmenata tog razvoja. Potrebe za to sveobuhvatnijom obradom podataka, jednostavnom manipulacijom, te to brim i sigurnijim pristupom podacima, dovele su do razvoja nekoliko modela podataka i itavog niza programskih paketa za upravljanje podacima. Namjera ovog radnog materijala skripte je da korisniku prui uvid u teoretske postavke danas najdominantnijeg, relacijskog modela podataka, te da ga upozna s bitnim pojmovima s kojima se susreu svi korisnici suvremenih sustava za upravljanje bazama podataka. Osim toga skripta opisuje i osnovne znaajke SQL upitnog jezika, te navoenjem sintakse naredbi i primjera upoznaje korisnika s jezikom koji ini osnovu svih relacijskih sustava za upravljanje bazama podataka. Skripta je namijenjena prvenstveno studentima Veleuilita, budui prati tijek i sadraj programa kolegija Baze podataka. Ona meutim moe posluiti kao uvod u podruje baza podataka i obrade podataka za sve one koji ele stei saznanje iz ovih podruja, ili kao prirunik i podsjetnik za profesionalce. Zasigurno, ova skripta nee odgovoriti na sva pitanja iz ovog zanimljivog podruja. Njezina svrha je da terminologiju i principe rada suvremenih sustava za upravljanje bazama podataka, osnove relacijskog modela podataka i upitnog jezika SQL priblii itateljima. Ona predstavlja tek uvod u jedan vrlo zanimljivi segment informatike. Na kraju, zahvaljujem svima koji su mi savjetima i literaturom pomogli pri sastavljanju ove skripte.

Autor

1. ARHITEKTURA SUSTAVA ZA UPRAVLJANJE BAZAMA PODATAKA


Pri realizaciji cjelokupnog sustava realizacije baze podataka mogu se razluiti tri nivoa: 1. Interni nivo Nivo koji vodi rauna o nainima fizikog spremanja podataka i njihovom manipuliranju. Orjentiran je prema raunalu. Na internom nivou baza se opisuje internom shemom ( internal schema) kojom se definira nain spremanja podataka, tipovi podataka, definicija indeksa, veliina pohranjenih podataka itd. 2. Koncepcijski nivo Predstavlja opi pogled na bazu, na temelju sagledavanja problema. Podrazumijeva koncept realizacije baze podataka, na temelju saznanja o projektiranju baze podataka. 3. Eksterni nivo Orjentiran prema korisniku, bavi se realizacijom programskog suelja, koje krajnjem korisniku omoguava pristup i obradu podacima. Podrazumijeva izradu front-end korisnike aplikacije za rad sa bazom. Izbor programskog jezika zavisi o mogunostima pojedinih alata kao i potrebama krajnje aplikacije. SUSTAV ZA UPRAVLJANJE BAZOM PODATAKA Sustav za upravljanje bazom podataka (DBMS Database Management System ) je programski sustav koji osigurava osnovne funkcije odabranog modela podataka u radu sa bazom podataka. Osnovni zahtjevi koji se postavljaju na suvremeni DBMS: - Opis i manipulacija podacima pomou posebnog jezika (SQL). - Zatita integriteta podataka - Visok nivo suelja prema korisniku, bez obzira na strukturu podataka - Skup programskih pomagala za jednostavno razumijevanje i koritenje podataka spremljenih u bazi. DBMS moe se podijeliti na dva dijela a) Backend Omoguava funkcije definiranja podataka, integritet i zatitu podataka, manipulaciju itd. b) Frontend Aplikacije, bilo da ih je napisao korisnik ili su sastavni dio DBMS-a (database tools). Osnovne funkcije koje moraju biti ugraene u svaki sustav za upravljanje bazom podataka su: a) definicija podataka DBMS mora biti u stanju definicije podataka izreene u nekoj jeziku za definiciju podataka pretvoriti u oblik interne pohrane podataka. b) manipulacija podacima DBMS mora imati mogunost obrade (manipuliranja) podataka prema zahtjevima korisnika. Ti zahtjevi mogu biti dodavanje novih podataka, brisanje ili promjena vrijednosti postojeih itd. c) Integritet i zatita podataka DBMS mora uvati suvislost podataka i njihovo ponaanje prema tono definiranim pravilima. Zahtjeve korisnika koji naruavaju integritet podataka, DBMS mora prepoznati i odbaciti ih. d) Oporavak u sluaju pogreke U sluaju pogrenog manipuliranja podacima, sustav mora imati mogunost uspostave konzistentnosti podataka. e) efikasnost Sve nabrojane funkcije DBMS mora osigurati uz to bolje performanse. Administrator baze podataka Administrator baze podataka (DBA Database Administrator) je osoba zaduena za izvedbu i odravanje baze podataka. Prilikom izrade baze podataka, osoba koja stvara bazu postaje automatski njezin DBA. Administrator ima najveu razinu korisnikih prava, to se tie pristupa bazi i manipuliranja podacima.
2

DBA dodaje ostale korisnike, u njegovoj je nadlenosti da odreenim korisnicima dozvoli ili zabrani pristup pojedinim podacima itd. Isto tako DBA je zaduen za odravanje baze (backup).

TIPOVI I STRUKTURE BAZE PODATAKA Centralizirana baza podataka terminalski pristup Podrazumijeva smjetaj podataka na jednom mjestu ( sredinjem raunalu) i terminalski pristup od strane korisnika. Ovakav pristup znai da se svi zahtjevi i obrade podataka vre na sredinjem raunalu, na kojem su smjeteni i podaci. Korisnik preko terminala, jedino unosi svoje zahtjeve, te dobija prikaz rezultata eljenih operacija. Ovakav nain organizacije baze postavlja velike zahtjeve na sredinje raunalo, koje osim smjetaja svih podataka, vri i sve operacije obrade podataka, njihovog formatiranja i prikaza. Stoga sredinje raunalo mora imati vrlo veliku procesorsku snagu i visoke performanse. Client- server pristup Client server struktura podrazumijeva, smjetaj podataka na sredinjem raunalu (server), koje vri glavninu zahtjeva za manipuliranje i obradu podataka. Korisnici koji pristupaju bazi, taj pristup ostvaruju preko svojih PC raunala, koja su mreom povezana sa serverom. Za razliku od terminalskog pristupa, kod kojeg terminalske stanice nemaju nikakve mogunosti sudjelovanja u obradi podataka, PC raunala na strani klijenta djelomino sudjeluju u obradi podataka. Korisnik preko programskog suelja formira zahtjev za odreenim podacima, koji se proslijeuje serveru. Serversko raunalo prihvaa zahtjev, te ga obrauje, a rezultate te obrade vraa klijentu. Klijentsko raunalo prihvaa tako obraene podatke, te ih formira u obliku kojeg definira korisniko suelje. Paralelna struktura baze podataka Paralelna struktura podrazumijeva formiranje baze u okruju raunala meusobno povezanih u lokalnu mreu. Izmeu raunala postoji brza veza, ostvarena preko mrenih kartica 10/100MBs. Podaci su najee smjeteni na samo jednom raunalu, ali se pri obradi podataka moe koristiti procesorska sna ga svih raunala u mrei. Ovakvim konceptom baze dobija se mogunost istovremenog koritenja resursa vie raunala, pa pojedina raunala mogu imati i neto slabije karakteristike. Distribuirana baza podataka Podrazumijeva strukturu baze podataka u kojoj su podaci raireni na vie raunala, koja su mreno povezana. Jednostavno reeno, distribuirana baza podrazumijeva vie lokalnih, meusobno povezanih baza. Pred samim korisnikom je ta rasprenost podataka skrivena, te on ima osjeaj da pristupa jednoj sredinjoj bazi.U dananjim uvjetima postoji sve vee potreba za realizacijom distribuiranih baza podataka. Razlozi za to su brojni: a) Mnogi korisnici za koje se rade baze podataka po svojoj prirodi su distribuirani na vie lokacija. Uzmimo primjer mnogih multinacionalnih kompanija, koje imaju podrunice diljem svijeta. Svaka podrunica u mjestu u kojem se nalazi formira svoju lokalnu bazu podataka, a sve te baze zatim se povezuju u distribuiranu bazu podataka, koja objedinjava sve lokalne baze. Rukovodstvo kompanije ima mogunost pristupa u sve baze i nadzora podataka koji se nalaze u bilo kojoj lokalnoj bazi. b) Distribucijom baze podataka poveava se raspoloivost i pouzdanost sustava. U sluaju ispada bilo kojeg raunala u mrei, podaci na tom mjestu postaju nedostupni korisnicima, ali su podaci na svim ostalim mjestima sauvani i dostupni. c) U distribuiranim sustavima se koristi tehnika repliciranja istih podataka na vie lokacija u mrei. Zbog obrade manjih baza podataka, brzina obrade na pojedinim mjestima je vea u odnosu na brzinu koju bi imao sustav koji obrauje veliku centraliziranu bazu. Da bi se u potpunosti iskoristile prednosti koje pruaju distribuirani sustavi, osim zadataka koji su zajedniki sa zadacima centraliziranih sustava , distribuirani sustavi moraju omoguiti: - pristup udaljenim raunalima u mrei te prijenos upita i podataka izmeu raunala - postojanje sistemskog kataloga s podacima o distribuciji podataka u mrei - odravanje konzistentnosti podataka koji se repliciraju - izradu strategije za izvoenje pretraivanja i obrada koje dohvaaju podatke iz vie lokalnih baza. - oporavak sustava u sluaju ispada pojedinog raunala iz mree.
3

2. OSNOVE BAZE PODATAKA - ENTITETI


Baza podataka uvijek predstavlja opis- sliku stvarnog procesa iz okoline. Pri tome se baza podataka sastoji od podataka koji su meusobno povezani na razliite naine i njihove vrijednosti predstavljaju dio realnog svijeta. Definicija: Entitet (Entity) je skup objekata iz realnog svijeta koji imaju neka zajednika svojstva. Svojstva entiteta se nazivaju atributima.
E

Slika 1. Entitet kao skup Entitet je dakle definiran kao skup ( Slika 1.) E={e1 , e2 , e3 , e4 ... en}, gdje su e1 ...en elementi entiteta (entity instance, entity occurence). Ovi elementi prema definiciji imaju neka zajednika svojstva koja ih opisuju tj. definiraju. Primjer: Za opis procesa studiranja osnovni entitet je STUDENT, tj. skup svih studenata sa nekim zajednikim svojstvima. Svaki student - pojedinac predstavlja jedan element skupa entiteta STUDENT . Mogui zajedniki atributi (svojstva) studenata: ime, prezime, adresa, JMBG, matini broj, datum roenja itd. Za prikaz entiteta, kao skupa objekata potrebno je utvrditi: - Selekciju atributa - utvrditi koji atributi (svojstva) su potrebni za opisivanje entiteta. Prilikom opisivanja entiteta potrebno je u skladu sa potrebama posla zbog kojeg se radi baza podataka izvriti selekciju atributa. - Integritet atributa tip podataka, ogranienja i pravila vezana za pojedini atribut. Definiranjem tipa podataka i ogranienja osigurava se suvislost podataka pojedinog atributa. Ako uzmemo za primjer entitet STUDENT i atribut DATUM ROENJA to znai da je potrebno osigurati da podatak o datumu roenja bude u standardnom formatu datuma dan.mjesec. godina. , te da po svojoj vrijednosti bude logian. - Kardinalitet atributa podatak o zastupljenosti pojedinih atributa. Definicija: Kardinalitet atributa je broj koji kazuje koliko vrijednosti pojedini atribut daje za opis jednog elementa entiteta. Primjer: Promatra se entitet STUDENT i njegov atribut Ime. Kardinalitet atributa Ime u entitetu STUDENT kazuje koliko imena moe imati student-pojedinac. Pri utvrivanju kardinaliteta odreuje se donja i gornja granica minimalni i maksimalni kardinalitet, te se kardinalitet atributa A u entitetu E opisuje ureenim parom card(A,E)=(min card(A,E), max card(A,E)) gdje je A- atribut, E-entitet, min card(A,E) minimalni kardinalitet atributa A u entitetu E, max card(A,E) maksimalni kardinalitet atributa A u entitetu E. U gornjem primjeru za entitet STUDENT i atribut IME vrijedi: min card(IME, STUDENT)=1, jer svaki student ima najmanje i obavezno 1 ime. max card(IME, STUDENT)=1, jer svaki student ima samo jedno ime Iz ovoga slijedi card(IME,STUDENT)=(1,1) Pogledajmo primjer atributa ZAVRENA KOLA u entitetu STUDENT . Ovim atributom prikazujemo naziv srednje kole koju su zavrili studenti prije upisa na fakultet. Vrijedi: min card(ZAVRENA KOLA, STUDENT)=0, max card(ZAVRENA KOLA, STUDENT)=1
4

Iz ovoga slijedi card(ZAVRENA KOLA,STUDENT)=(0,1) min card(ZAVRENA KOLA, STUDENT)=0 kazuje da kod prikaza pojedinog studenta ne moramo obavezno imati podatak o njegovoj zavrenoj srednjoj koli. max card(ZAVRENA KOLA, STUDENT)=1 znai da je pojedini student zavrio jednu srednju kolu. Iz ovoga je mogue zakljuiti da atributi sa minimalnim kardinalitetom jednakim 0 nisu obvezni. Prikaz jednog elementa entiteta mogue je usporediti sa ispunjavanjem obrasca, kod kojeg su neka polja obvezna, tj. moraju se popuniti, a druga nisu. Vievrijednosni atributi (multi-valued attributes) Vievrijednosni atributi su atributi (svojstva), koja mogu imati vie vrijednosti za pojedini element entiteta. Primjer: Neka je pri opisu studenata potrebno znati kojim se sportom bave studenti. Promatrano za studenta-pojedinca, ovaj atribut moe imati vie razliitih vrijednosti, jer se pojedini student moe baviti sa vie sportova, a neki drugi student se moda uope ne bavi sportom. Vrijedi min card(SPORT,STUDENT)=0, jer je mogue da se pojedini student ne bavi sportom max card(SPORT, STUDENT)=n, jer se student moe baviti sa vie sportova Iz ovoga slijedi da je card(SPORT,STUDENT)=(0,n). Atributi koji imaju ovako definirani kardinalitet nazivaju se vievrijednosni atributi (multi-valued attributes).

Opisni atributi i identifikatori Nakon selekcije atributa koji se koriste za opisivanje svojstava entiteta, mogue je razluiti dvije vrste atributa: opisne i identifikacijske. Primjer: Promatrajmo ponovno entitet STUDENT i atribute Ime, Prezime, Mjesto roenja, Datum roenja, JMBG, Zavrena kola, Sport. Definicija: Identikator (Identifikacijski atribut) je atribut koji jedinstveno odreuje pojedine elemente entiteta. Drugim rjeima u entitetu(skupu) ne mogu postojati dva elementa sa istom vrijednou identifikatora. U naem primjeru atribut Ime ne moe biti identifikator, jer je realna mogunost da dva studenta imaju isto ime. Isto vrijedi i za sve ostale atribute, osim atributa JMBG. Ovaj atribut je jedinstven za svaki element entiteta, tj. ne postoje dva studenta sa istim JMBG brojem. Stoga je atribut JMBG identifikator, za razliku od ostalih atributa, koji se smatraju opisnim atributima tj. oni samo opisuju pojedina svojstva entiteta. Za svaki identifikator vrijedi da je njegov maksimalni kardinalitet jednak 1. Uobiajeni prikaz entiteta kakav u praksi esto nalazimo je u tablinom obliku, gdje redovi odgovaraju elementima entiteta, a stupci pojedinim atributima. Dakle svaki redak predstavlja jednog studenta. Npr. STUDENT Ime Prezime Dat.roenja Mjesto ro. JMBG Zavr. kola Ante Roi 11.10. 1980 Osijek 1110980370071 Stipe Ani 03.07. 1980 Split 0307980380025 Sr. teh. k. .... .... .... .... Svaki element skupa, tj. svaki student pojedinac predstavlja jedinstvenu jedinku, koja mora biti jednoznano definirana. U tu svrhu u entitetu mora postojati identifikator koji jednoznano def inira elemente entiteta. Taj identifikator mora imati kardinalitet (1,1), tj. mora imati vrijednost za svaki element entiteta, ali ne mogu postojati dva elementa sa istom vrijednou tog identifikatora. Takav jedinstveni identifikator za svaki element entiteta naziva se Primarni klju (Primary key).

Pretpostavimo da su kardinaliteti atributa u entitetu STUDENT: card(Ime, STUDENT)=(1,1) card(Prezime, STUDENT)=(1,1) card(Datum roenja, STUDENT)=(1,1) card(Mjesto roenja, STUDENT)=(1,1) card(JMBG, STUDENT)=(0,1) card(Zavrena kola, STUDENT)=(0,1) Prethodno smo ustanovili da samo jedan od ovih atributa moe biti identifikator, a to je atribut JMBG, jer ne postoje dva studenta sa istim JMBG, dakle ovaj atribut moe jednoznano definirati svakog stud enta. Meutim ovaj atribut ima definiran kardinalitet (0,1), to znai da se student moe evidentirati i bez tog podatka (nije obvezan). Iz toga proizlazi da JMBG ne moe biti primarni klju ovog entiteta. Ovaj problem moe se rijeiti na nain da se uvede novi atribut - jedinstveni redni broj studenta. Svaki student dobija svoj redni broj, koji ga jednoznano odreuje u skupu studenata. Uz entitet STUDENT vezuje se broja, koji automatski svakom novom studentu dodijeljuje jedinstveni redni broj, pri emu n e mogu postojati dva studenta sa istim rednim brojem. STUDENT Student id 1 2 3 Dat.roenja 11.10. 1980 03.07. 1980 .... Mjesto ro. Osijek Split .... Zavr. kola Sr. teh. k.

Ime Ante Stipe ....

Prezime Roi Ani ....

JMBG 1110980370071 0307980380025

Dijagram entiteta predstavlja grafiki prikaz entiteta i njegovih atributa Osnovna pravila grafikog prikaza entiteta: - Entitet se prikazuje pravokutnim znakom u koji se upisuje naziv entiteta - Pojedini atributi se prikazuju ovalnim znakovima i povezani su s entitetom. Unutar oznake atributa upisuje se naziv atributa. - Vievrijednosni atributi imaju dvostruku poveznicu sa entitetom, koja podrazumijeva kardinalitet (0,n). - Naziv atributa koji predstavlja primarni klju se potcrtava. - Kardinalitet atributa upisuje se na njegovu poveznicu sa entitetom Slika 2. Prikazuje dijagram entiteta za entitet STUDENT.

STUDENT ID (1,1) (1,1) MJ. ROENJA (1,1) IME PREZIME DAT. ROENJA STUDENT (0,1) (1,1) (1,1) JMBG SPORT (0,n) (0,1) ZAVR. KOLA

Slika 2. Dijagram entiteta

Sloeni atributi Prilikom opisa entiteta, kao skupa objekata, atribute koji opisuju odreena logiki povezana svojstva entiteta, moe se povezati u tzv. sloene atribute (composite attributes). Sloeni atributi sastavljeni su od atributa koji u procesu ljudskog razmiljanja i modeliranju podataka ine logiku cjelinu. Primjer: Proirimo entitet STUDENT, kao skup svih studenata, atributom ADRESA, koji opisuje adresu stanovanja studenata. Uobiajeni nain razmiljanja, podrazumijeva da se pod adresom smatraju podaci o ulici (ukljuujui i broj) i mjestu stanovanja. Dakle za opis adrese stanovanja, kao sloenog atributa, potrebna su dva atributa (svojstva) : ULICA i MJESTO. Svakom od ovih atributa potrebno je definirati odgovarajui kardinalitet u skladu sa definicijom kardinaliteta. Npr. min card(ULICA, STUDENT)=0, jer ne smatramo nunim da se zna ulica u kojoj student ivi max card(ULICA, STUDENT)=1, jer student pojedinac moe stanovati samo u jednoj ulici min card(MJESTO, STUDENT)=1, jer podatak o mjestu stanovanja smatramo obveznim max card(MJESTO, STUDENT)=1, jer student moe ivjeti samo u jednom mjestu dakle vrijedi card(ULICA, STUDENT)=(0,1) i card(MJESTO, STUDENT)=(1,1) U grafikom prikazu entiteta tj. dijagramu entiteta, sloeni atributi se prikazuju na nain da se postave izmeu entiteta i atributa koje oni obuhvaaju (Slika 3.).

ULICA STUDENT ID

MJESTO (0,1) ADRESA (1,1)

(1,1) (1,1) MJ. ROENJA (1,1) IME PREZIME

SPORT (0,n) STUDENT

(1,1) (0,1) ZAVR. KOLA (0,1)

(1,1)

(1,1) JMBG DAT. ROENJA

Slika 3. Dijagram entiteta sa prikazom sloenog atributa Kardinalitet sloenog atributa odreuje se na temelju kardinaliteta atributa koji su obuhvaeni sloenim atributom, principom maksimuma. Uz definirani sloeni atribut A, koji obuhvaa atribute A1, A2,... An, vrijedi min card (A,E)=max( min card(A1,E), min card(A2,E),..., min card (An,E)) max card (A,E)=max(max card(A1,E), max card(A2,E),..., max card (An,E)) U naem primjeru sloeni atribut ADRESA obuhvaa atribute ULICA i MJESTO, pa je njegov kardinalitet min card (ADRESA,STUDENT)=max(0, 1)=1 max card (ADRESA,STUDENT)=max(1, 1)=1 card (ADRESA,STUDENT)=(1, 1) Sloeni atributi bitni su kod razrade modela baze podataka, budui su oni uobiajeni meukorak za definiranje svih potrebnih atributa pojedinog entiteta. Sloeni atributi takoer mogu biti identifikatori, pod uvjetom da svi atributi koji ine sloeni atribut imaju definiran kardinalitet (1,1), te da je sloeni atribut jedinstven za svaki element entiteta. U gornjem primjeru sloeni atribut ADRESA ne moe biti identifikator u entitetu STUDENT, budui on obuhvaa atribut ULICA za koji vrijedi card(ULICA, STUDENT)=(0,1)

3. RELACIJE U sustavu baze podataka skupovi entiteti su meusobno povezani logikim vezama relacijama. Objasnimo ovu povezanost na primjeru dva entiteta: STUDENT i UPISNI LIST, koji opisuju proces studiranja svakog studenta. Prilikom upisa u pojedini semestar svaki student predaje upisni list, dokument o upisu semestra, koji sadrava sve potrebne podatke. Dakle uz ve spomenuti entitet STUDENT, koji predstavlja skup studenata, uvedimo novi entitet UPISNI LIST. Kao i svaki entitet i UPISNI LIST je predstavljen svojim atributima, svojstvima, npr. SEMESTAR, K.GODINA, OBRAZOVNI PROGRAM. Ali ovaj entitet povezan je sa prethodnim entitetom STUDENT, budui svaki upisni list pripada nekom studentu. Dakle izmeu ova dva entiteta postoji logika veza relacija. Veza izmeu skupova-entiteta ostvaruje se vezom izmeu pojedinih elemenata tih skupova. Prikaimo relaciju izmeu ova dva entiteta grafiki (Slika 4).
STUDENT PREDAJE UPISNI LIST

STUDENT

UPISNI LIST

Slika 4. Prikaz relacije jedan prema vie Definicija: Kardinalitet entiteta u relaciji definiran je brojem veza pojedinog elementa tog entiteta sa elementima entiteta s kojim je relacijski povezan. Primjer: Relacijska veza entiteta STUDENT i UPISNI LIST. Jedan student-pojedinac moe imati vie upisnih listova (za svaki semestar po jedan), ali ne mora nuno imati upisni list. Sa druge strane, svaki upisni list mora pripadati nekom studentu, i to samo jednom odreenom. Vrijedi min card (STUDENT, PREDAJE)=0 min card (UPISNI LIST,PREDAJE)=1 max card (STUDENT,PREDAJE)=n max card (UPISNI LIST,PREDAJE)=1 odnosno card (STUDENT, PREDAJE)=(0,n) card (UPISNI LIST, PREDAJE)=(1,1) Ovakav tip relacije je relacija 1n odnosno jedan prema vie (one-to-many). Definicija: Ako dva entiteta E i F ostvaruju relaciju R, pri emu vrijedi min card (E,R)=0 min card (F,R)=1 max card (E,R)=n max card (F,R)=1 card(E,R)=(0,n) card(F,R)=(1,1) takva relacija je tipa 1n (jedan prema vie). Napomena: Pri odreivanju tipa relacije, kljuan je maksimalni kardinalitet entiteta u relaciji. To znai da su entiteti E i F povezani relacijom R sa definiranim kardinalitetima, card(E,R)=(0,n) i card(F,R)=(0,1) takoer u vezi jedan prema vie.

Relacija 1 1 jedan-na-jedan (one- to-one) Definicija Za dva entiteta E i F koji sudjeluju u relaciji R jedan-na-jedan vrijedi min card (E,R)=0 min card (F,R)=0 max card (E,R)=1 max card (F,R)=1 Svaki element skupa E moe biti povezan samo sa jednim elementom skupa F, ali i ne mora. Isto vrijedi za elemente skupa F. Primjer: Studenti imaju mogunost prijavljivanja ispita elektronskim putem. Za pristup sustavu za prijavljivanje ispita svaki student mora dobiti PIN (osobni identifikator sa ifrom). Pri tome svaki student moe dobiti samo jedan PIN, ali je realna mogunost da student ne dobije PIN odmah po upisu na fakultet. To znai da trenutno mogu postojati studenti kojima nije dodijeljen PIN. U isto vrijeme, svaki PIN moe biti dodijeljen samo jednom studentu, ali mogu postojati i ve pripremljeni PIN -ovi koji jo nisu rasporeeni studentima (Slika 5). Za relaciju PRIJAVA koja povezuje entitete STUDENT i PIN vrijedi card(STUDENT,PRIJAVA)=(0,1) i card(PIN,PRIJAVA)=(0,1), dakle radi se o relaciji 1 1.
STUDENT PIN

Slika 5. Prikaz relacije jedan na jedan Relacija nn vie-na-vie (many - to-many) Definicija Za dva entiteta E i F koji sudjeluju u relaciji R vie-na-vie vrijedi min card (E,R)=0 min card (F,R)=0 max card (E,R)=n max card (F,R)=n Svaki element skupa E moe biti povezan sa vie elemenata skupa F, ali i ne mora. Isto vrijedi za elemente skupa F. Primjer: U tijeku procesa studiranja svaki student predaje UPISNI LIST kojim potvruje upis pojedinog semestra, a koji je vezan za studenta. Eniteti STUDENT i UPISNI LIST povezani su relacijom jedan prema vie, kako je prethodno opisano. Meutim upisni list uz ope atribute, sadrava i podatke o predmetima koje student upisuje u tom semestru. Da bi se definirao proces upisivanja predmeta potrebno je definirati novi entitet PREDMET, kao skup svih predmeta koji se predaju. Entitet predmet definiran je atributima: PREDMET_ID, NAZIV PREDMETA, SATI PREDAVANJA, SATI VJEBE itd. PREDMET Predmet_id Ime predmeta 100 Matematika 101 Fizika .... ....

Sati pred 3 3 ....

Sati AV 2 1 ....

Sati LAB 0 0

Pogledajmo sada odnos izmeu ova dva entiteta UPISNI LIST i PREDMET. Svaki student na jednom upisnom listu ( u jednom semestru) upisuje vie predmeta, ali u nekim sluajevima ne mora upisati niti jedan (npr. ponavljanje godine). Sa druge strane svaki predmet moe upisati vie studenata, ali se moe dogoditi da neki od ponuenih predmeta(izbornih) ne upie niti jedan student. Ovakvi odnosi mogu se prikazati grafiki (Slika 6.)
UPISNI LIST PREDMET

Slika 6. Prikaz relacije vie-na- vie (nn) Za relaciju UPISUJE koja definira odnos izmeu entiteta UPISNI LIST i PREDMET, vrijedi min card (UPISNI LIST,UPISUJE)=0 min card (PREDMET,UPISUJE)=0 max card (UPISNI LIST,UPISUJE)=n max card (PREDMET,UPISUJE)=n pa se radi o relaciji vie-na- vie (nn). Za relacije vie-na-vie svojstveno je da ovakav tip relacije, osim povezivanja entiteta, sa sobom moe donijeti odreene atribute koji su posljedica relacijske veze. U naem primjeru, kao posljedica injenice da pojedini student u danom semestru upie neki predmet, mogu se javiti atributi OCJENA i DATUM (datum polaganja). Ovi atributi nisu dio niti jednog od entiteta koji sudjeluju u relaciji, ve su posljedica relacijske veze, u ovom sluaju entiteta UPISNI LIST i PREDMET, to se dijagramski prikazuje (S lika 7.)

(0,n) UPISNI LIST UPISUJE

(0,n) PREDMET

OCJENA

DATUM

Slika 7. Dijagram relacije vie-na- vie (nn). Proirenjem grafikog prikaza entiteta, na nain da se grafiki prikaz entiteta i pripadajuih atributa (dijagram entiteta) proiri sa prikazom relacija, tj. meusobne veze meu entitetima, dobija se E-R dijagram ( dijagram ENTITET-RELACIJA). Osnovni princip prikaza relacija u dijagramu vidljiv je ve iz gornjih primjera. - Relacija se simboliki ucrtava deltoidnim znakom () izmeu entiteta koji sudjeluju u relaciji, te se povezuje s njima. - Na poveznicu entiteta i relacije upisuje se kardinalitet entiteta u relaciji u obliku ureenog para. - Atributi koji su posljedica relacije ucrtavaju se ovalnim simbolom kao i atributi entiteta, te se povezuju sa relacijom iz koje proizlaze. Detaljni E-R dijagram prikazan je na slici 8.

10

SATI_AV (1,1) (1,1) PREDMET_ID T ID (1,1) IME PREDMETA SATI _PRED (1,1) PREDMET (1,1)

SATI_LAB

OCJENA

(0,n) UPISUJE

DATUM

(0,n) ULIST ID (1,1) (1,1) (1,1) K.GODINA (1,1) PREDAJE STUDENT ID (1,1) (1,1) MJ. ROENJA (1,1) IME PREZIME DAT. ROENJA STUDENT (0,1) (1,1) (1,1) JMBG SPORT (0,n) (0,n) (0,1) ZAVR. KOLA (1,1) SEMESTAR OBR.PROGRAM

UPISNI LIST

Slika 8. E-R dijagram

11

4. RELACIJSKI MODEL PODATAKA


E-R dijagram je osnova i uvod za prikaz podataka u relacijskom modelu. Iz izvedbe E-R dijagrama vri se rekonstrukcija relacijskog modela baze podataka. Taj model podataka je vremenom usavravan i danas je de facto najraireniji, opeprihvaeni model podataka. Najvea prednost relacijskog modela podataka jest u tome da on poiva na matematikoj teoriji relacijske algebre. TRANSFORMACIJSKA PRAVILA Transformacijska pravila omoguavaju razvoj relacijskog modela baze podataka temeljem E-R dijagrama 1. Entitet kao skup objekata prikazuje se tablicom. Svaki redak u tablici odgovara jednom elementu entiteta, a svaki stupac je odgovarajui atribut. Ime tablice jednako je nazivu entiteta STUDENT Student id 1 2 3

Ime Ante Stipe ....

Prezime Roi Ani ....

Dat.roenja 11.10. 1980 03.07. 1980 ....

Mj. roenja Osijek Split ....

JMBG 1110980370071 0307980380025

Zavr. kola Sr. teh. k.

Simboliki prikaz tablice tj. njezina definicija izraava se u obliku head(IME TABLICE)={atribut1,atribut2,...}, a primarni klju PK(IME TABLICE)=naziv kolone U gornjem primjeru tablice STUDENT vrijedi head(STUDENT)={Student_id, Ime,Prezime, Dat.roenja, Mj.roenja,JMBG,Zavr.kola} PK(STUDENT)=Student_id 2. Vievrijednosni atributi ne prikazuju se preko jedne kolone, kao obini atributi, jer unos vie vrijednosti u jedno polje nije dozvoljen. Umjesto toga vievrijednosni atribut prikazuje se posebnom tablicom. Nova tablica sastoji se od dva stupca: primarnog kljua entiteta i vievrijednosnog atributa. Primarni klju nove tablice, sloen je od obje vrijednosti tj. za vievrijednosni atribut S u entitetu E, vrijedi prikaz preko nove tablice S uz head(S)={E_id, S} i PK(S)={E_id,S}, gdje jd E_id=PK(E). Primjer: Prethodno je opisan entitet student i vievrijednosni atribut sport, kojim se opisuje bavljenje studenata sportom. Prema tranformacijskom pravilu ovaj atribut prikazuje se posebnom tablicom, koja sadrava primarni klju entiteta STUDENT (Student_id) i vievrijednosni atribut (Sport). Sloeni primarni klju nove tablice ine oba atributa tj. PK(SPORT)={Student_id, Sport}. SPORT Student_id 1 2 2

Sport odbojka nogomet koarka

3. Prikaz relacije jedan-navie (one-to-many) Ako su entiteti E i F u relaciji R tipa jedan-na-vie i card(E,R)=(0,n) , card(F,R)=(1,1) , relacija se ostvaruje preko stranog kljua, tj. pripadajua tablica entiteta F proiruje se kolonom E_id, gdje je E_id =PK(E), a ta kolona u tablici F naziva se strani klju (foreign key FK). Promotrimo ovo na primjeru ve opisanih entiteta STUDENT i UPISNI LIST. Ova dva entiteta povezani su relacijom PREDAJE i vrijedi
12

card (STUDENT, PREDAJE)=(0,n) card (UPISNI LIST, PREDAJE)=(1,1) Relacija jedan-na vie ostvaruje se na nain da se, prema transformacijskom pravilu, tablici UPISNI LIST dodaje nova kolona (atribut), kojom se oznaava povezanost (pripadnost) pojedinog upisnog lista studentu. Budui da je svaki student jednoznano odreen svojim primarnim kljuem, nova kolona sadrava podatke o primarnom kljuu studenta, te predstavlja strani klju u tablici UPISNI LIST. STUDENT Student id 1 2 3

Ime Ante Stipe ....

Prezime Roi Ani ....

Dat.roenja 11.10. 1980 03.07. 1980 ....

Mj. roenja Osijek Split ....

JMBG 1110980370071 0307980380025

Zavr. kola Sr. teh. k.

UPISNI LIST Ulist id k.godina 1 1999/00 2 1999/00 3 ....

Semestar 2 4 ....

Obr.program Elektronika Strojarstvo ....

Student_id 2 1

4. Prikaz relacije vie-na-vie (many-to-many) Ako su entiteti E i F u relaciji R tipa vie-na-vie i card(E,R)=(0,n) card(F,R)=(0,n) relacija se ostvaruje formiranjem nove tzv. relacijske tablice R, te vrijedi E_id=PK(E)=FK(R) F_id=PK(F)=FK(R) PK(R)=(E_id,F_id) Nova relacijska tablica, uz strane kljueve entiteta koji sudjeluju u relaciji (a koji zajedno ine primarni klju nove tablice), proiruje se atributima koji su posljedica relacije meu entitetima. Primjer: U modelu baze podataka koja opisuje studiranje, entiteti UPISNI LIST i PREDMET nalaze se u relacijskoj vezi vie-na-vie (Slika 9.)
(0,n) UPISNI LIST UPISUJE (0,n) PREDMET

OCJENA

DATUM

Slika 9. Entiteti UPISNI LIST i PREDMET u relaciji vie-na-vie UPISNI LIST Ulist id k.godina 1 1999/00 2 1999/00 3 .... PREDMET Predmet_id 100 101 ....

Semestar 2 4 ....

Obr.program Elektronika Strojarstvo ....

Student_id 2 1

Ime predmeta Matematika Fizika ....

Sati pred 3 3 ....

Sati AV 2 1 ....

Sati LAB 0 0

Vrijedi

min card (UPISNI LIST,UPISUJE)=0 max card (UPISNI LIST,UPISUJE)=n card (UPISNI LIST,UPISUJE)=(0,n)

min card (PREDMET,UPISUJE)=0 max card (PREDMET,UPISUJE)=n card (PREDMET,UPISUJE)=(0,n)


13

U skladu sa pravilom prikaza relacije vie-na-vie, ovakva relacija bit e prikazana novom relacijskom tablicom UPISUJE, za koju vrijedi PK(UPISNI LIST)=FK(UPISUJE)=Ulist_id PK(PREDMET)=FK(UPISUJE)=Predmet_id PK(UPISUJE)=(Ulist_id,Predmet_id) Tablica UPISUJE uz strane kljueve tablica koje sudjeluju u relaciji, a koji ine primarni klju nove tablice,(Ulist_id,Predmet_id), sadrava i atribute koji su posljedica relacijske veze (Ocjena,Datum). UPISUJE Ulist id 1 2 3

Predmet_id 100 101 ....

Ocjena 4 ....

Datum 11.10.2000 -

5. Prikaz relacije jedan-na-jedan (one-to-one) Ako su entiteti E i F u relaciji R tipa jedan-na-jedan i card(E,R)=(0,1) card(F,R)=(0,1) , E_id=PK(E), F_id=PK(F) relacija se moe ostvariti na tri naina: a) b) c) E_id=PK(E)=FK(F), stranim kljuem u tablici F F_id=PK(F)=FK(E), stranim kljuem u tablici E proirenjem tablice(entiteta) E sa kolonama (svojstvima) tablice F

RELACIJSKA PRAVILA Definiraju nain prikaza i pristupa podacima 1. Pravilo normalnog oblika: zabranjuje prikaz vievrijednosnih atributa u jednoj tablici -identino transformacijskom pravilu broj 2. 2. Pravilo pristupa podacima- definira da se podacima u tablici moe pristupati iskljuivo preko vrijednosti atributa(kolona). 3. Pravilo jedinstvenosti reda u tablici (elementa u entitetu): u tablici ne postoje dva potpuno ista reda, sa jednakim vrijednostima svih atributa. PRIMARNI KLJU Primarni klju je atribut ili skup atributa koji jedinstveno identificiraju svaki element entiteta (redak u tablici). Primarni klju mora zadovoljavati tri osnovna uvjeta: 1. Jedinstvenost U tablici ne mogu postojati dva redka s istom vrijednou primarnog kljua 2. Minimalnost Ako je primarni klju sloen tj. sastoji se od vie atributa, tada se niti jedna njegova komponenta ne moe ukloniti a da se ne narui pravilo jedinstvenosti. 3. Pravilo integriteta primarnog kljua Niti jedna komponenta primarnog kljua ne smije imati null vrijednost tj. atribut koji je sastavni dio primarnog kljua mora imati definiran kardinalitet (1,1). Pravilo integriteta posljedica je pravila minimalnosti. Kada bi bilo doputeno da neki atribut kao dio primarnog kljua poprimi null vrijednost, to bi znailo da se elementi entiteta mogu identificirati i bez poznavanja vrijednosti tog atributa. Iz toga proizlazi da takav atribut uope ne treba biti dio primarnog kljua, tj. naruilo bi se pravilo minimalnosti.

14

DEKOMPOZICIJA ATRIBUTA Pogledajmo primjer ve opisanog entiteta STUDENT (Slika 10.), koji je definiran sa pripadajuim atributima. Svi atributi opisuju neko od svojstava zajedniko svim elementima skupa studen ata. Atribut MJESTO ROENJA za svakog studenta daje podatak gdje je roen. Uz ovakvu definiciju entiteta, pod tim atributom podrazumijeva se naziv mjesta u kojem je student roen. Meutim realna je mogunost da postoji vie razliitih mjesta, koja imaju isti naziv. Stoga bi se, za studente koji su roeni u dva potpuno razliita mjesta pojavila ista vrijednost atributa MJESTO ROENJA. Oito je da opis ovog atributa nije ispravno postavljen, tj. za opis jednog mjesta nije dovoljan samo naziv (ime) mjesta.
STUDENT ID (1,1) (1,1) MJ. ROENJA (1,1) IME PREZIME DAT. ROENJA SPORT (0,n) STUDENT (0,1) (1,1) (1,1) JMBG (0,1) ZAVR. KOLA

Slika 10. Dijagram entiteta STUDENT Rjeenje ovog problema je u redefiniciji atributa MJESTO kao posebnog entiteta. Taj entitet, kao i svaki drugi predstavlja skup elemenata (mjesta) sa zajednikim svojstvima (Slika 11.).
MJESTO ID (1,1) MJESTO (0,1) (1,1) IME MJESTA (0,1) POT. BROJ OPINA (1,1) DRAVA

Slika 11. Dijagram entiteta MJESTO Pri definiciji novog entiteta, za njegov opis uzimamo sve bitne atribute koji poblie definiraju svojstva pojedinog mjesta. U skladu sa transformacijskim pravilom novi entitet bi se u relacijskom modelu baze prikazao tablicom MJESTO MJESTO_ID 1. 2. 3. 4. POT. BROJ 21000 23249 20272 OPINA Split Pag Smokvica DRAVA Hrvatska Hrvatska Hrvatska Njemaka

IME MJESTA Split Smokvica Smokvica Bonn

Novi entitet nalazi se u relacijskoj vezi sa entitetom STUDENT. Promotrimo ovu vezu na nivou algebre skupova (Slika 12).

15

MJESTO

STUDENT

Slika 12. Skupovni prikaz veze meu entitetima Nazovimo relacijsku vezu izmeu entiteta MJESTO i STUDENT - ROENJE. Svako mjesto moe biti mjesto roenja vie studenata, ali ne mora znaiti da je u svakom mjestu roen neki od studenata. Sa druge strane svaki student je roen u nekom mjestu, i to samo jednom koje predstavlja njegovo mjesto roenja. Vrijedi da je card(MJESTO, ROENJE)=(0,n) i card(STUDENT, ROENJE)=(1,1), dakle radi se o relaciji jedan-na-vie (one-to-many). U skladu sa ve spomenutim pravilom ovakav oblik relacije ostvaruje se preko stranog kljua, tj. tablica(entitet) MJESTO daje svoj primarni klju u tablicu STUDENT kao strani klju. MJESTO MJESTO_ID IME MJESTA POT. BROJ OPINA DRAVA 1. Split 21000 Split Hrvatska 2. Smokvica 23249 Pag Hrvatska 3. Smokvica 20272 Smokvica Hrvatska 4 Osijek 31000 Osijek Hrvatska 5. Bonn Njemaka STUDENT Student id 1 2 3 Dat.roenja 11.10. 1980 03.07. 1980 .... Zavr. kola Sr. teh. k.

Ime Ante Stipe ....

Prezime Roi Ani ....

Mjesto_id 4 1 ....

JMBG 1110980370071 0307980380025

gdje vrijedi da je Mjesto_id strani klju iz tablice MJESTO u tablici STUDENT. U opisu mjesta posebno mjesto zauzima atribut opina, kojim se opisuje pripadnost mjesta pojedinoj opini. U praksi je opina opisana mjestom koje predstavlja opinsko sredite, tj. pojam opine mogue je povezati sa pojmom mjesta. Ovdje dolazimo do logike veze gdje je jedan entitet povezan sa samim sobom.
(1,1) MJESTO U OPINI

(0,n)

Slika 13.Ring struktura (veza entiteta sa samim sobom) Ovakva struktura u odnosu entiteta naziva se ring struktura (prsten), gdje je jedan entitet povezan sa samim sobom (Slika 13.). Prema pravilima transformacije, budui se radi o obliku relacije jedan -premavie, ona se ostvaruje preko stranog kljua.
strani klju

MJESTO MJESTO_ID 1. 2. 3. 4.

IME MJESTA Split Pag Smokvica ...

POT. BROJ 21000 23250 23249 ...

OPINA_ID 1 2 2 ...

DRAVA Hrvatska Hrvatska Hrvatska ...


16

5. INTEGRITET PODATAKA
Integritetom podataka osigurava se njihova suvislost i postie se da podaci odgovaraju tono zadanim pravilima i formatima u okviru baze podataka. Svaka je baza podataka vie ili manje vjerna slika svijeta koji nas okruuje, tj. onog njegovog dijela o kojem elimo obraivati podatke. Pri tome se baza podataka sastoji od podataka koji su meusobno povezani na razliite naine i njihove vrijednosti predstavljaju dio realnog okruja. Potrebno je definirati odreena pravila kojima je zadatak postavljanje ogranienja koja postoje kako na pojavljivanje vrijednosti pojedinih atributa, tako i na njihovo meusobno povezivanje. Ta se pravila nazivaju pravila integriteta (integrity rules) i od ogromnog su znaenja za ispravno funkcioniranje sustava i zatitu informacija. INTEGRITET ENTITETA DOMENA PODATAKA Domena podataka predstavlja skup vrijednosti koje odreeni atribut moe poprimiti. Pojedinana vrijednost atributa se smatra najmanjom nedjeljivom semantikom jedinicom podataka. Domena se definira za svaki atribut i predstavlja podatke koji pripadaju istom tipu podataka. Mijeanje vie tipova podataka unutar jedne domene nije doputeno. Primjer: Promatrajmo entitet STUDENT i njegov atribut DATUM ROENJA. Ovaj atribut daje podatak o tome kada je roen student. Radi se o podatku koji mora udovoljavati standardnom tipu podataka koji prikazuje datum u uobiajenom formatu dan.mjesec.godina. Logino je da se za ovaj atribut vee tip podataka datuma, koji osigurava prikaz podataka u eljenom formatu. Meutim definiranje tipa podataka za pojedini atribut najee nije dovoljno da bi se osigurala suvislost p odataka. Pretpostavimo da se nalazimo u godini 2001, te da u tablicu STUDENT elimo unijeti podatak o novom studentu, za kojeg upisujemo datum roenja 11.05.2006. Ovaj podatak je sa stajalita formata podataka potpuno ispravan, ali nije logian, budui je student svakako morao biti roen prije. Stoga je uz svaki atribut osim tipa podataka potrebno definirati i ogranienja, koja osiguravaju realnost podataka.

REFERENCIJALNI INTEGRITET Osigurava loginu vezu i pravila odnosa meu podacima u tablicama koje su relacijski povezane. U tablici ne moe postojati vrijednost stranog kljua za koju ne postoji ista vrijednost primarnog kljua u osnovnoj tablici.

STUDENT
Student id 1 2 3 UPISNI LIST Ulist id 1 2 3 Ime Ante Stipe ....
FK

Prezime Roi Ani ....

Dat.roenja 11.10. 1980 03.07. 1980 ....

Mjesto ro. Osijek Split ....

JMBG 1110980370071 0307980380025

Zavr. kola Sr. teh. k.

Student_id 2 2 ....

Sem 1 2 ....

kolska god. 1999/00 1999/00 ....

Obr.prog elektronika elektronika ....

Izmeu tablica STUDENT i UPISNI LIST postoji relacija one-to-many koja je ostvarena stranim kljuem u tablici UPISNI LIST (Student_id). Referencijalni integritet definira pravila unosa, brisanja i promjene(auriranja) podataka, kako bi se osigurala konzistentnost podataka u bazi. Na dizajneru baze podataka je da definira ponaanje baze prilikom pojedinih promjena. Pri tome postoje dvije mogunosti ponaanja sustava. a) Traena akcija se odbija i u bazi se na dogaaju nikakve promjene. b) Akcija se doputa, ali se uz nju pokreu jo neke akcije koje imaju svrhu uspostaviti konzistentnost baze podataka

17

Unos podataka Zabranjen je unos podatka u tablicu, sa nekom vrijednost stranog kljua, ako u osnovnoj tablici ne postoji ista vrijednost primarnog kljua. (Restricted). Brisanje podataka 1. Ogranieno (Restricted) - Brisanje reda sa odreenom vrijednou primarnog kljua dozvoljeno je samo ako se ta vrijednost ne pojavljuje u drugoj tablici kao strani klju. Primjer: Ne moe se ukloniti pojedinog studenta iz tablice STUDENT, ako u tablici upisni list postoje njegovi upisni listovi. 2. Stupnjevano Kaskadno (Cascade) brisanje. Brisanje podatka sa odreenom vrijednosti primarnog kljua izaziva brisanje svih podataka u drugoj tablici gdje se ta vrijednost primarnog kljua pojavljuje kao strani klju. Primjer: Brisanjem pojedinog studenta iz tablice STUDENT, automatski se briu svi njegovi upisni listovi iz tablice UPISNI LIST. 3. Nuliranje (Nullifies) brisanjem odreene vrijednosti primarnog kljua, najprije se sve iste vrijednosti stranog kljua postavljaju na null vrijednost, a onda se iz osnovne tablice brie ta vrijednost primarnog kljua. Primjer: Brisanjem pojedinog studenta iz tablice STUDENT, najprije se za sve upisne listove koji pripadaju tome studentu, atribut student_id, koji je u tablici UPISNI LIST strani klju postavlja na null vrijednost, a potom se uklanja eljeni podatak iz tablice STUDENT. Auriranje podataka 1. Ogranieno (Restricted) : Auriranje vrijednosti primarnog kljua dozvoljeno je samo ako se ta vrijednost ne pojavljuje u drugoj tablici kao strani klju. 2. Stupnjevano Kaskadno (Cascade) auriranje. Auriranje vrijednosti primarnog kljua izaziva auriranje svih podataka u drugoj tablici gdje se ta vrijednost primarnog kljua pojavlju je kao strani klju. 3. Nuliranje (Nullifies) auriranjem odreene vrijednosti primarnog kljua, najprije se sve iste vrijednosti stranog kljua postavljaju na null vrijednost, a onda se u osnovnoj tablici mijenja ta vrijednost primarnog kljua.

Prilikom definiranja tipa akcije vezane za pravila referencijalnog integriteta, dizajner baze podataka mora rjeiti dilemu: moe li strani klju poprimiti null vrijednost? Iako je odgovor na prvi pogled NE, to je najei sluaj u praksi, postoje sluajevi kad je to mogue. U promatranom primjeru relacijske veze meu entitetima STUDENT i UPISNI LIST, null vrijednost stranog kljua (student_id u tablici UPISNI LIST) nema nikakvog smisla. To bi znailo da je mogue evidentirati upisni list koji nije povezan sa niti jednim studentom, to nije realno. Postoje meutim situacije kada je realna mogunost da strani klju poprimi null vrijednost. Ukoliko je relacijska veza R izmeu entiteta E i F definirana sa: card(E, R)=(0,n) i card(F,R)=(0,1) radi se o relaciji jedan-na-vie (1n), koja se ostvaruje stranim kljuem u tablici F, pri emu taj strani klju moe poprimiti null vrijednost. Ako je pri tome primarni klju entiteta E sloen (sastoji se od vie atributa-kolona), to podrazumijeva da e i strani klju u tablici F takoer biti sloen. Ako je strani klju sloen, tada vrijednosti njegovih atributa za pojedine elemente entiteta moraju biti ili sve poznate ili sve null vrijednosti. To znai da nije doputeno da neke vrijednosti atributa koje ine strani klju budu null, a druge ne. U sluajevima kada nije dozvoljeno da strani klju poprimi null vrijednost, razumljivo da nije mogue definirati referencijalni integritet zasnovan na nuliranju.

18

6. RELACIJSKA ALGEBRA
Relacijska algebra podrazumijeva definirane operacije nad entitetima (tablicama) i podacima koji im pripadaju. Operacije teorije skupova (Set-theory operations) Unija (T:=R S) Presjek (T:=R S) Razlika (T:=R S) Prirodne relacijske operacije (Native-relation operations) Projekcija (T:=R [a] ) Selekcija (T:=R where a=12) Join (T:=R S) Produkt (T:=R S) Dijeljenje (T:=RS)

Definicija Kompatibilnim tablicama smatramo tablice koje a) Sadre atribute jednakog naziva i isti broj atributa imaju jednak broj kolona i sve kolone su istog naziva b) Atributi istog naziva definirani su nad jednakim domenama UNIJA (T:=R S) Operacija unije moe se provoditi samo nad kompatibilnim tablicama Po matematikoj teoriji unija dvaju skupova R i S je skup T koji se sastoji od svih elemenata koji pripadaju bilo kojem od skupova R ili S. Primijenjeno na tablice, tablica T je unija tablica R i S, koja ima isto zaglavlje (header) kao i tablice R i S, a sadri sve redove koji se nalaze bilo u tablici R ili S.

R A s d c B 1 1 2 C 4 5 5

S A d c f

B 1 2 4

C 5 4 4

T:=R S A B s 1 d 1 c 2 c 2 f 4

C 4 5 5 4 4

PRESJEK (T:=R S) Operacija presjeka moe se provoditi samo nad kompatibilnim tablicama Po matematikoj teoriji presjek dvaju skupova R i S je skup T koji se sastoji od svih elemenata koji pripadaju i skupu R i skupu S. Primijenjeno na tablice, tablica T je presjek tablica R i S, koja ima isto zaglavlje (header) kao i tablice R i S, a sadri sve redove koji se nalaze u oba dvije tablice.

R A s d c B 1 1 2 C 4 5 5

S A d c f

B 1 2 4

C 5 4 4

T:=R S A B d 1

C 5

19

RAZLIKA (T:=R - S) Operacija razlike moe se provoditi samo nad kompatibilnim tablicama Po matematikoj teoriji razlika dvaju skupova R i S je skup T koji se sastoji od svih elemenata koji pripadaju skupu R i ne pripadaju skupu S. Primijenjeno na tablice, tablica T je razlika tablica R i S, koja ima isto zaglavlje (header) kao i tablice R i S, a sadri sve redove koji se nalaze u R, a ne nalaze se u S.

R A s d c B 1 1 2 C 4 5 5

S A d c f

B 1 2 4

C 5 4 4

T:=R- S A B s 1 c 2

C 4 5

PRODUKT (T:=R S) Operacija produkta nad entitetima (tablicama), temelji se na skupovnoj operaciji Kartezijevog produkta. Po matematikoj teoriji Kartezijev produkt dvaju skupova R i S je skup T koji se sastoji od ureenih parova, pri emu je prvi element ureenog para iz skupa R, a drugi iz skupa S. Primijenjeno na tablice, tablica T je produkt tablica R i S, ije je zaglavlje (header) definirano: head(R S)=head(R) head(S), a elementi(redovi) te tablice nastaju spajanjem redova iz tablice R i redova iz tablice S. R A s d c B 1 1 2 C 4 5 5 D d c S E 1 2 F 5 4 T:=R S A B s 1 s 1 d 1 d 1 c 2 c 2

C 4 4 5 5 5 5

D d c d c d c

E 1 2 1 2 1 2

F 5 4 5 4 5 4

Openito za produkt tablica vrijedi Ako je R (m n) --- m redova i n kolona S (k l ) ---- k redova i l kolona,

onda je T:=R S tablica sa (mk) redova i (n+l) kolona

Za operatore unije, presjeka i produkta vrijede pravila asocijativnosti i komutativnosti. (R S) T= R (S T)= R S T (R S) T= R (S T)= R S T (R S) T= R (S T)= R S T Meuzavisnost operacija R S = R - (R - S) = S - (S - R) R S = R (R S)

PROJEKCIJA T:=R [a] Operacijom projekcije tablice nad atributima izvajaju se atributi tablice na kojima se vri projekcija. Projekcija tablice R nad atributima X,Y,Z jest tablica T sa zaglavljem head(T)= {X,Y,Z} koja sadrava sve redove koji su sadrani u tablici R. Kao rezultat operacije projekcije dobija se nova tablica koja predstavlja vertikalni podskup zadane tablice.

20

R A s d c B 1 1 2 C 4 5 5

T:=R[A] A s d c

Operacijom projekcije nad zadanom tablicom R dobija se rezultat koji sadri isti broj redova kao i tablica R, ali samo one atribute (kolone) po kojima se vri projekcija.

SELEKCIJA - IZDVAJANJE (T:=R where a=12) Operacijom izdvajanja (selekcije) nad zadanom tablicom R izdvaja se skup redova koji zadovoljavaju uvjet po kojem se selekcija vri. Tablica koja se dobija kao rezultat operacije selekcije sadri sve atribute (kolone) kao i izvorna tablica, ali samo one redove koji zadovoljavaju traeni uvjet. Dobijena tablica predstavlja horizontalni podskup izvorne tablice.

R A s d s c B 1 1 4 2 C 4 5 6 5

R where A=s A B C s 1 4 s 4 6

SPAJANJE - JOIN Operacija spajanja (join) ima nekoliko podvrsta: Inner join- unutranja veza T:=R S Inner join operacijom povezuju se tablice na nain da se spajaju redovi tablica po istim vrijednostima zajednikog atributa, tj. spajaju se redovi koji u kolonama istog naziva u obje tablice imaju istu vrijednost.

R S

T:=R S

21

R A s d c s B 1 1 2 3 D 4 5 5 3 D 5 1 3

S E 1 2 6 F 5 4 7

T:=R S A B d 1 c 2 s 3

D 5 5 3

E 1 1 6

F 5 5 7

U navedenom primjeru tablice R i S imaju zajedniki atribut D, te se spajanje odvija po tom atributu. Prvi red tablice R ima vrijednost atributa D=4, te ne sudjeluje u vezi, jer u tablici S ne postoji red sa D=4. Drugi i trei red tablice R imaju vrijednost D=5, te se spajaju sa prvim redom u tablici S. etvrti red tablice R preko vrijednosti D=3 povezuje se sa treim redom tablice S, gdje takoer imamo D=3. Left outer join- lijeva vanjska veza T:=RLO S Lijeva vanjska veza je proirenje unutranje veze. Osnova za realizaciju lijeve vanjske veze je unutranja veza, kojoj se dodaju oni elementi tablice, koja je u relacijskom izrazu sa lijeve strane, koji ne sudjeluju u vezi. R S T:=R LOS A B D D E F A B D E F s 1 4 5 1 5 d 1 5 1 5 d 1 5 1 2 4 c 2 5 1 5 c 2 5 3 6 7 s 3 3 6 7 s 3 3 s 1 4 null null U prethodnom primjeru objanjeno je nastajanje tablice R S. U stvaranju R LOS najprije se realizira R S (time se dobiju prva tri reda tablice T). Potom se dodaju svi redovi tablice R, koji ne sudjeluju u inner-join vezi. U ovom sluaju jedini red u tablici R koji nije obuhvaen inner -join vezom je prvi red, a budui on ne sudjeluje u inner join-u vrijednosti atributa E i F su null vrijednosti. Right outer join- desna vanjska veza T:=RRO S Desna vanjska veza je proirenje unutranje veze. Osnova za realizaciju desne vanjske veze je unutranja veza, kojoj se dodaju oni elementi tablice, koja je u relacijskom izrazu sa desne strane, koji ne sudjeluju u vezi. R S T:=R ROS A B D D E F A B D E F s 1 4 5 1 5 d 1 5 1 5 d 1 5 1 2 4 c 2 5 1 5 c 2 5 3 6 7 s 3 3 6 7 s 3 3 null null 1 2 4 U prethodnom primjeru objanjeno je nastajanje tablice R S. U stvaranju R ROS najprije se realizira R S (time se dobiju prva tri reda tablice T). Potom se dodaju svi redovi tablice S, koji ne sudjeluju u inner-join vezi. U ovom sluaju jedini red u tablici S koji nije obuhvaen inner -join vezom je drugi red (D=1), a budui on ne sudjeluje u inner join-u vrijednosti atributa A i B su null vrijednosti. Outer join- vanjska veza T:=RO S Vanjska veza je proirenje unutranje veze. Osnova za realizaciju lijeve vanjske veze je unutranja veza, kojoj se dodaju elementi obje tablice koji ne sudjeluju u unutranjoj vezi. R S T:=R OS A B D D E F A B D E F s 1 4 5 1 5 d 1 5 1 5 d 1 5 1 2 4 c 2 5 1 5 c 2 5 3 6 7 s 3 3 6 7 s 3 3 null null 1 2 4 s 1 4 null null Vrijedi T:=RO S= (RLO S) (RRO S)
22

Dijeljenje T:=R S Tablica T koja se dobije dijeljenjem R i S je najvea tablica za koju vrijedi da se svi redovi produkta T S nalaze u tablici R. R S T:=RS A B D A B D s 1 4 s 1 4 s 1 5 5 c 2 5

Prioritet logikih operatora 1. Projekcija 2. Selekcija 3. Produkt 4. Join, Dijeljenje 5. Razlika 6. Unija, Presjek LOGIKE OPERACIJE Logike operacije esto se primijenjuju u relacijskoj algebri, posebno kod primjene operacije selekcije tj. postavljanja sloenih uvjeta za selekciju pojedinih redova iz tablice. Logiki operatori su AND, OR i NOT. Operatori AND i OR su funkcije koje se primijenjuju nad dva argumenta, a funkcija NOT nad jednim argumentom. AND T F T T F F F F OR T F T T T F T F NOT T F

F T

MEUZAVISNOST PRIRODNIH RELACIJSKIH OPERACIJA Za unutranju vezu (Inner join) vrijedi da se moe izraziti kominacijom produkta, selekcije i projekcije. Pogledajmo primjer: R A 1 3 B 2 4 S B 2 4 9 C 5 7 10 D 6 8 11

T:=RS A 1 3

B 2 4

C 5 7

D 6 8

23

Pogledajmo produkt ovih dvaju tablica C:=R S A 1 1 1 3 3 3

R.B 2 2 2 4 4 4

S.B 2 4 9 2 4 9

C 5 7 10 5 7 10

D 6 8 11 6 8 11

Operacija spajanja (inner-join) podrazumijeva samo one redove iz produkta gdje atributi istog naziva imaju iste vrijednosti. Dakle potrebno je primijeniti selekciju tj. izdvojiti one redove u kojima atributi istog naziva u obje tablice imaju istu vrijednost D:=C where R.B= S.B =(RS) where R.B= S.B A 1 3 R.B 2 4 S.B 2 4 C 5 7 D 6 8

Dobijena tablica D ima jedan atribut (kolonu) vie u odnosu na tablicu koja je rezultat inner-join operacije. Izvrimo projekciju: T:=D[A,R.B,C,D] A 1 3 B 2 4 C 5 7 D 6 8

to je identino rezultatu inner-join operacije.

24

PRIMJERI ZA VJEBU Primjeri: Neka su definirane tablice STUDENT, UPISNI LIST i MJESTO head(STUDENT)={Student_id,Ime,Prezime,Dat.roenja, Mjesto_id,JMBG, Mat.broj} head(UPISNI_LIST)={Ulist_id,k.godina,Semestar,Obr.program,Student_id} head(MJESTO)={Mjesto_id,Ime_Mjesta,Pot.broj}

STUDENT Student id 1 2 3

Ime Ante Stipe ....

Prezime Roi Ani ....

Dat.roenja 11.10. 1980 03.07. 1980 ....

Mjesto_id 3 1 ....

JMBG 1110980370071 0307980380025

Mat. broj 11-7 12-7

UPISNI_LIST Ulist id k.godina 1 1999/00 2 1999/00 3 .... MJESTO Mjesto id 1 2 3 4

Semestar 2 4 ....

Obr.program Elektronika Strojarstvo ....

Student_id 2 1

Ime_Mjesta Split ibenik Zadar ...

Pot.br 21000 22000 23000 ...

Vrijedi da je PK(STUDENT)=Student_id, PK(UPISNI_LIST)=Ulist_id, PK(MJESTO)=Mjesto_id , te STUDENT.Mjesto_id=FK(STUDENT), UPISNI_LIST.Student_id=FK(UPISNI_LIST) Zadatak 1. Prikazati sve studente (Ime, Prezime i Matini broj) koji su upisani u 1. semestar k.god 1999/00 ((UPISNI_LIST where k.godina=1999/00 AND Semestar=1)[Student_id] STUDENT ) [Ime,Prezime, Mat.broj] Zadatak 2. Prikazati sve studente koji su roeni u Splitu (MJESTO where Ime_Mjesta=Split STUDENT ) [Ime,Prezime, Mat.broj] Zadatak 3. Prikazati sve studente koji nisu upisani u kolskoj godini 2000/01. STUDENT - ((UPISNI_LIST where k.godina=2000/01)[Student_id] STUDENT) Zadatak 4. Prikazati sve studente koji nemaju niti jedan upisni list STUDENT (UPISNI_LIST[Student_id] STUDENT) ili (STUDENT LO UPISNI_LIST) where Ulist_id=null Zadatak 5. Prikazati sve upisne listove za studenta sa Matinim brojem 12-7 ((STUDENT where Mat.broj=12-7)[Student_id] UPISNI_LIST) [Semestar,k.godina,Obr.program]

25

Zadana je baza podataka koja opisuje sustav studiranja:

Nai relacijske izraze za slijedee upite: 1. Prikazati sve studente koji su u k.godini 2000/01 upisali 1. sem Raunarstva. ((OBR_PROG where OBR_PROG_IME=Raunarstvo) (UPISNI_LIST where SEM=1 AND SK_GOD=2000/01))[STUDENT_ID] STUDENTI 2. Prikazati sve nastavnike koji ne predaju u kolskoj godini 1999/00 NASTAVNIK NASTAVNIK (NASTAVNI_PLAN where SKGOD=1999/00) [NASTAVNIK_ID] ili ((NASTAVNIK LO NASTAVNI_PLAN where SKGOD=1999/00) where PREDMET_ID=null) [NASTAVNIK_ID,NASTAVNIK_PREZIME,NASTAVNIK_IME] 3. Prikazati izgled indeksa za 1.semestar Elektronike u kolskoj godini 2000/01 ((OBR_PROG where OBR_PROG_IME=Elektronika) NASTAVNI_PLAN where SKGOD=2000/01 AND SEM=1 PREDMETI NASTAVNIK) [NASTAVNIK_PREZIME,NASTAVNIK_IME, PREDMET_IME, SATI_pred, SATI_au_vj] 4. Prikazati sve studente koji su upisali, a nisu poloili predmet Baze podataka ((PREDMETI where PREDMET_IME=Baze podataka) UPISUJE where OCJENA=null) [ULIST_ID] UPISNI_LIST STUDENTI[STUDENT_ID,IME,PREZIME,MAT_BR] 5. Prikazati sve apsolvente koji imaju neki nepoloeni ispit (UPISNI_LIST where APSOLVENT=1 STUDENTI ) [STUDENT_ID,IME,PREZIME,MAT_BR] ((PREDMETI where USMENI=1 OR PISMENI=1)[PREDMET_ID] UPISUJE where OCJENA=null UPISNI_LIST)[STUDENT_ID] STUDENTI [STUDENT_ID,IME,PREZIME,MAT_BR]

26

7. INDEKSIRANJE BAZE PODATAKA


Podaci u bazi podataka (tablice i ostale strukture) moraju biti trajno smjeteni na mediju koji omoguava sauvanje podataka i njihovo normalno odravanje. Radna memorija raunala, iako prua mogunost brzog i efikasnog pristupa podacima, ne moe biti medij za trajni smjetaj po dataka. Prestankom napajanja ili pojavom sklopovskog (hardware) problema u funkcioniranju raunala, dolazi do gubitka svih podataka u radnoj memoriji. Stoga se podaci smjetaju na disku raunala. Disk je rotirajui magnetski medij , uobiajeno sastavljen od nekoliko ploa (povrina, platters), sa standardnom brzinom rotacije, i mehanikom rukom arm (slino principu gramofona). Na vrhu ruke nalaze se magnetske glave (heads) preko kojih se vri uitavanje i zapisivanje podataka. Disk je sastavljen od niza traka (tracks), sektora (sector) i cilindara (cylinder) prema slici 14.

Slika 14. Struktura diska Za pristup odreenom podatku na disku, potrebno je pristupiti tono odreenoj poziciji. To znai da mehanika ruka mora najprije zauzeti poloaj na odreenom cilindru, a potom saekati dok disk rotira da bi traeni sektor bio smjeten ispod magnetske glave. Nakon smjetaja glave nad traenim podacima, vri se uitavanje podataka. Ukupni ciklus pristupa podacima na disku moe se prikazati kroz tri faze: Pozicioniranje ruke Rotiranje diska Transfer uitavanje podataka u memoriju Vremenski gledano prve dvije faze su znatno trajnije i ine daleko najvei dio ukupnog vremenskog ciklusa pristupa podacima, to pristup podacima na disku ukupno ini razmjerno sporim, to ini glavni problem smjetaja podataka na disku. Napretkom u razvoju raunalnih komponenti razvijene su i radne memorije, koje omoguavaju pohranu podataka, nezavisno od vanjskog izvora napajanja (battery supply). Ovakve memorije, meutim cijenom daleko nadmauju disk. Za isti kapacitet memorije trokovi radne memorije su oko 60 puta vei od cijene diskovnog prostora. Ovo je posebno znaajno kod baza podataka, gdje baratamo sa velikim koliinama podataka. Dodatni problem bio bi prebacivanje podataka sa jednog raunala na drugo i stvaranje rezervnih kopija (backup). Imajui sve ovo u vidu raunalni disk ostaje kao jedini prikladni medij za pohranu podataka. Diskovni prostor za smjetaj baze podataka podijeljen je na stranice (pages). Uobiajene veliine stranica su 2Kb (2048 byte) i 4Kb (4096 byte). Podaci iz tablice u bazi podataka smjetaju su na stranice tvrdog diska u slotove. Broj slotova na pojedinoj stranici zavisi od veliine podatka u jednom redu tablice. Primjer: Ako je memorijska stranica veliine 2Kb, a za smjetaj jednog reda tablice treba 128 byte -a, onda jedna stranica za smjetaj podataka iz navedene tablice sadri 16 slotova.

27

slot 1 slot 2 ..... slot 16 slot 1 slot 2 .... slot 16

Page 1

Page 2

Stranica (page) predstavlja osnovnu jedinicu za uitavanje podataka sa diska. Kako je prethodno opisano najvei dio vremena za uitavanje podataka ini smjetaj magnetske glave na tono odreenu poziciju, gdje se nalaze podaci. Stoga se pri uitavanju podataka, uitavaju itave stranice kako bi se to vie smanjila potreba za ponovnim pozicioniranjem glave. Uvoenje indeksa u bazu podataka ima za osnovni cilj ubrzavanje pretraivanja, tj. smanjenje broja pristupa disku. Indeks definiran nad tablicom vezuje se za odreeni atribut (kolonu ) u tablici. INDEX (Prezime) Prezime (Key) D.P. Bili P1 Mili P2 STUDENT Ime Marko Ante Datum ro.

id 1 2

Prezime Mili Bili

JMBG xxxxx xxxxx

Indeks za odreeni atribut jest tablica sa dva stupca i jednakim brojem redova, kao i tablica nad kojom je indeks definiran. Prva kolona u indeksu je atribut za koji je indeks definiran i naziva se klju indeksa (index key), a u drugoj koloni je disk pointer ( pokaziva na mjesto na disku na kojem se nalazi podatak sa odreenom vrijednou indeksnog kljua). Vana osobina indeksa je da je tablica indeksa uvijek striktno ureena po vrijednostima kljua, bilo u rastuem redoslijedu (ascending) ili padajuem (descending). Koncept indeksiranja moe se usporediti sa katalogizacijom knjiga u biblioteci. Za svaku knjigu postoji odgovarajua kartica sa osnovnim podacima o knjizi i podatkom gdje je smjetena. Pri tome moe postojati nekoliko odvojenih kataloga, u jednom su knjige sortirane prema naslovu, u drugom prema imenu autora itd.Kad korisnik zatrai knjigu, npr. od eljenog autora, potrebno je pogledati u katalog gdje su knjige sortirane po autoru, te se nae pripadajua kartica i pogleda u kojem je dijelu knjinice ta knjiga. Prilikom pretraivanja podataka, ukoliko se podacima pristupa po vrijednostima atributa nad kojima postoji indeks, sustav ne pretrauje cijelu polaznu tablicu, ve umjesto toga, pretrauje se t ablica indeksa, koja je po veliini mnogo manja. Pri tome nije nuno pretraiti cijelu tablicu indeksa, ve samo do zadane vrijednosti indeksnog kljua. Kada se u pretraivanju indeksa doe do zadane vrijednosti indeksnog kljua i lociraju svi podaci, pretraivanje indeksa se zavrava, budui je indeks ureen po vrijednostima kljua, pa ostatak tablice indeksa sigurno ne sadri vie podatke sa zadanom vrijednou kljua. Za neke oblike pretraivanja ak nije ni potrebno pretraivati cijelu tablicu, ve je dovoljno pretraivanje samo tablice indeksa, po vrijednostima kljua. Takvi upiti ispituju samo postojanje odreenog podatka, te indeksiranje tablice po traenoj vrijednosti atributa, ini dovoljnim pretraivanje indeksa, bez pretraivanja osnovne tablice. Negativna strana indeksiranja ogleda se u injenici da se smanjuje brzina auriranja i dodavanja novih podataka. Kod ovih operacija, uz promjene u samoj tablici, potrebno je promijeniti i tablicu indeksa. Viestruki indeksi predstavljaju indeksiranje bazne tablice po veem broju atributa. Indeksna tablica zadrava istu strukturu, tj. sastoji se od ve opisanih kolona klju indeksa(key) i pokaziva disk pointer. Klju indeksa sloen je od vrijednosti svih atributa koji su ukljueni u indeks. INDEX (Prezime,JMBG) (Key) D.P. Bili;2222 P1 Mili;1111 P2 STUDENT id Ime 1 Marko 2 Ante Datum ro.

Prezime Mili Bili

JMBG 1111 2222

28

Ovakvi indeksi pogodni su za pretraivanje po jednoj ili obadvije vrijednosti atributa. Pretraivanje po jednoj vrijednosti atributa identino je pretraivanju indeksa sa jednim atributom. Pretraivanje po vie vrijednosti daje rezultat samo one vrijednosti gdje oba atributa zadovoljavaju traene uvjete. CLUSTERED INDEKS Uobiajeni nain popunjavanja tablice prilikom unosa novih redova podrazumijeva slijedno unoenje, tj. jedan red iza drugog, po redu. Uvoenjem indeksa formira se indeksna tablica, koja sadrava podatke o poloaju podataka u tablici prema indeksnom kljuu, ali redoslijed podataka ostaje nepromijenj en. Pretraivanjem tablice indeksa dobije se podatak o smjetaju traenih podataka, ali su oni u osnovnoj tablici raspreni. Ukoliko se indeks definira svojstvom CLUSTERED, bitno se mijenja raspored podataka u osnovnoj tablici. CLUSTERED indeks podrazumij eva smjetaj podataka u osnovnoj tablici u ureenom redoslijedu prema vrijednostima kljua. INDEX (Prezime) STUDENT Prezime (Key) D.P. id Ime Prezime JMBG Datum ro. Anti P1 1 Ivo Anti xxxxx Bili P2 2 Ante Bili xxxxx Kati P3 3 Jure Kati Mili P4 4 Marko Mili U jednoj tablici moe postojati samo jedan CLUSTERED indeks. JEDINSTVENI INDEKS (UNIQUE INDEX) Definiranjem indeksa sa svojstvom jedinstvenosti (UNIQUE), odreuje se da u indeksnoj tablici ne mogu postojati dvije iste vrijednosti indeksnog kljua, tj. klju indeksa je jedinstven. Budui je klju indeksa vrijednost atributa iz tablice, time se definira da u tablici ne mogu postojati dva redka sa istom vrijednou atributa po kojoj se stvara indeks. Jedinstvenost indeksa, a time i atributa u tablici podrazumijeva da vrijednost atributa ne moe biti null, tj. atribut po kojem se stvara jedinstveni indeks, mora imati minimalni kardinalitet 1. Za viestruke indekse, koji predstavljaju kombinaciju vie atributa, jedinstveni indeks podrazumijeva jedinstvenost kombinacije atributa koji su obuhvaeni indeksom. Npr. ukoliko se definira jedinstveni indeks na tablici STUDENT po atributima ime i prezime, to podrazumijeva da u tablici ne mogu postojati dva studenta koji imaju jednaka oba atributa (ime i prezime). KOMPRESIJA INDEKSA Osnovna struktura indeksa podrazumijeva postojanje jednog redka u tablici indeksa za svaki red u osnovnoj tablici. Ukoliko indeks nije jedinstven, mogue je postojanje veeg broja istih vrijednosti indeksnog kljua. Budui je u pravilu klju indeksa podatak koji je dui od pokazivaa , grupiranjem pokazivaa po istim vrijednostima kljua postigla bi se znatna uteda. U takvim sluajevima provodi se kompresija indeksa Prx key D.P. D.P. D.P Prx key D.P. D.P

Slika 15. Kompresija indeksa Svi indeksni podaci sa istim vrijednostima kljua grupiraju se u blokove koji su opisani zajednikom vrijednou kljua (Slika 15.). Na poetku svakog bloka nalazi se tzv. Prefiks bloka (Prx), koji sadri podatak o poetku prethodnog i slijedeeg bloka (druge vrijednosti kljua), te broju vrijednosti tekueg kljua (broju pokazivaa u tekuem bloku). B-TREE STRUKTURA INDEX-a Indeks, koji je i sam po definiciji tablica, takoer se nalazi smjeten na disku raunala, to znai da je smjeten po memorijskim stranicama u slotovima. Primjer: Zadana je tablica sa milijun redova podataka, te indeks definiran nad cjelobrojim atributom u toj tablici. Jedan red u tablici indeksa sadrava vrijednost indeksnog kljua (integer 4byte) i disk pointer (integer 4-byte). Dakle za svaku vrijednost indeksnog kljua 8 byte. Podrazumijevajui veliinu
29

memorijske stranice (page) 2Kb, vrijedi da na jednu stranicu dolazi 2Kb:8byte=256 indeksnih redova. Dakle za smjetaj milijun redova u tablici indeksa potrebno je 1.000.000: 256=3907 stranica.
L1
key A1 A2 ... A256 D.P. P1 P2 ... P256 slot1 slot2

L2
key A257 A258 ... A512 D.P. P257 P258 ... key

.....
D.P.

L3907

...
slot256

L1-L3907...LEAF pages (Leaf stranice) na kojima su smjeteni osnovni indeksi. Pri tome su vrijedn osti kljua striktno ureene po rastuem rasporedu tj. vrijedi Ak<Am, za svaki k<m.
ROOT LEVEL
key A1 An Ak ... D.P. D1 D2 D3 ...

slot1 slot2

...
slot256

D1
key A1 A257 A513 ... D.P. L1 L2 L3 ...

D2
key An ... ... ... D.P. L257 ... ... ... key Ak

.....
D.P. Lk

D16

slot1 slot2

...
slot256

L1
key A1 A2 ... A256 D.P. P1 P2 ... P256

L2
key A257 A258 ... A512 D.P. P257 P258 ... key

.....
D.P.

L3907

slot1 slot2

...
slot256

Slika 16. Indeksna struktura binarnog stabla (B-Tree) Radi ubrzavanja pristupa indeksima , koji zauzimanju 3907 memorijskih stranica, formira se vii nivo indeksnih stranica tzv. Directory Level, na nain da se poetni indeks sa svake leaf stranice ukljui u nove stranice na Directory level, te slui kao pokaziva, za bri dolazak do odreene vrijednosti indeksnog kljua. Na nivou direktorija, za smjetaj 3907 indeksnih redova, potrebno je 3907:256=16 stranica. Radi daljnjeg ubrzavanja organizira se i najvii indeksni nivo, tzv.root level, po identinom principu. Opisana struktura indeksa najee se koristi u suvremenim bazama podataka i naziva se B -TREE (binarno stablo) struktura (Slika 16). Primjer: Pronai vrijednost indeksnog kljua A380. Pretraivanje poinje na root nivou. Budui vrijedi A1<A380<An, podatak o smjetaju indeksa nai e se na directory level stranici D1. Slijedi prijelaz na D1, te pretraivanje vrijednosti kljua na toj stranici. Budui vrijedi A257<A380<A513, podaci o traenim indeksima nalaze se na Leaf stranici L2. Pretraivanjem leaf stranice L2 dolazi se do pokazivaa, koji pokazuju poloaj na disku gdje se nalaze traeni podaci, te se glava za uitavanje podataka vodi tono na utvreni poloaj.
30

8. NORMALIZACIJA BAZE PODATAKA


Normalizacija baze podataka predstavlja primjenu odreenih matematikih i formalnih pravila kojima se osigurava ispravno postavljanje modela podataka i njihova logika povezanost. Definicija: Funkcijska zavisnost atributa Za tablicu R koja sadri atribute X i Y koji mogu biti i sloeni vrijedi funkcijska zavisnost atributa Y o atributu X , tj. XY, ako je svaka pojedina vrijednost atributa X povezana sa samo jednom vrijednou atributa Y. ILI Vrijedi XY ako u tablici R ne postoje dva reda sa istom vrijednou atributa X, a razliitim vrijednostima atributa Y. Primjer: A a b c d B 100 200 300 200 C 6 7 8 9

vrijedi AB, AC, CA, CB, BA, BC.

Definirane su 4 normalne forme, koje sve tablice u bazi moraju zadovoljavati da bi struktura podataka bila ispravna.
1. NORMALNA FORMA Tablica se nalazi u 1. normalnoj formi ako su svi nekljuni atributi funkcijski ovisni o primarnom kljuu. Ovo pravilo je jednostavno i proizlazi iz definicije primarnog kljua. Budui je primarni klju jedinstven, tj. ne mogu se pojaviti dvije iste vrijednosti primarnog kljua u jednoj tablici, onda se podrazumijeva da su svi ostali atributi funkcijski ovisni o kljuu. Baza podataka je u 1. normalnoj formi, ako su sve tablice u 1. normalnoj formi. Pravilo prve normalne forme naglaava transformacijsko pravilo prikaza vievrijednosnih atributa. Primjer: prikaz vievrijednosnog atributa sport za entitet STUDENT. head(STUDENT)={Student_id,Ime,Prezime,Dat.roenja, Mj.roenja,JMBG,Sport} card(Ime,STUDENT)=(1,1), card(Prezime,STUDENT)=(1,1), card(Dat.roenja,STUDENT), card(Mj.roenja,STUDENT)=(1,1), card(JMBG,STUDENT)=(1,1), card(Sport,STUDENT)=(0,n) STUDENT Student id Ime Prezime Dat.roenja Mj. roenja JMBG Sport 1 Ante Roi 11.10. 1980 Osijek 1110980370071 2 Stipe Ani 03.07. 1980 Split 0307980380025 Odbojka 2 Stipe Ani 03.07. 1980 Split 0307980380025 Koarka 3 .... .... .... .... Navedeni prikaz u skladu je sa pravilom da nije dozvoljen unos vie vrijednosti pojedinog atributa u jednom redku. Dobijena tablica nije u prvoj normalnoj formi, jer nije zadovoljeno pravilo da su svi nekljuni atributi funkcijski zavisni o kljuu. U primjeru vrijedi Student_id Sport. Posljedice ovakvog prikaza su razne anomalije, problemi koji se javljaju pri unosu i manipuliranju podacima. 1. Povrijeena je jedinstvenost primarnog kljua 2. Anomalija unosa: za svaki sport kojim se bavi pojedini student, potrebno je ponovno unijeti vrijednost svih atributa vezanih za tog studenta: Ime, Prezime, itd. 3. Anomalija auriranja/promjene podataka: Kod promjene vrijednosti nekog atributa potrebno je taj atribut promijeniti u svim redovima.

31

2. NORMALNA FORMA Tablica se nalazi u 2. normalnoj formi ako se nalazi u 1. normalnoj formi, i ako su svi nekljuni atributi potpuno funkcijski zavisni o kljuu. Pravilo druge normalne forme vrijedi za sloeni primarni klju koji se sastoji od vie atributa (kolona).

Definicija:
Potpuna funkcijska zavisnost atributa U tablici R koja sadri atribute X i Y koji mogu biti i sloeni, vrijed i da je Y potpuno funkcijski zavisan o atributu X , ako je Y funkcijski zavisan o X i nije funkcijski zavisan niti o jednom manjem podskupu atributa X. Drugim rjeima, kada vrijedi XY, tada ne smije postojati niti jedan podskup Z (ZX), za koji bi vrijedilo ZY. Pravilo druge normalne forme kazuje da ne smije postojati funkcijska zavisnost izmeu nekljunog atributa i podskupa primarnog kljua.

Primjer:
STUDENT Student id 1 2 3 SPORT Student_id 2 2 ... Ime Ante Stipe .... Prezime Roi Ani .... Mj. roenja Osijek Split .... Dat.roenja 03.07. 1980 03.07. 1980 ... JMBG 1110980370071 0307980380025

Sport odbojka koarka ...

Rjeenje problema vievrijednosnog atributa sada je postavljeno u skladu sa transformacijskim pravilom, tj. atribut je prikazan novom tablicom u kojoj je primarni klju sloen od stranog kljua entiteta STUDENT i vievrijednosnog atributa, odnosno PK(SPORT)=(Student_id,Sport). Tablica sadri i atribut Dat.roenja. S obzirom da je datum roenja vezan za studenta, neovisno o tome da li se bavi sportom ili ne vrijedi Student_idDat.roenja, a Student_id je podskup primarnog kljua u tablici SPORT. Ovakva tablica dakle nije u drugoj normalnoj formi. Nepravilnosti koje prizlaze iz ovakvog prikaza: 1. Anomalija unosa: Ne moe se unijeti datum roenja za studenta koji se ne bavi sportom. 2. Anomalija promjene: Kod promjene datuma roenja, potrebno je promijeniti taj podatak u svim redovima koji su vezani za tog studenta 3. Anomalija brisanja: Brisanjem posljednjeg sporta kojim se student bavi, gubi se i podatak o njegovom datumu roenja. Problem se rijeava da se atribut koji je funkcijski zavisan o podskupu primarnog kljua (student_id), prebacuje u drugu tablicu u kojoj je taj atribut-podskup primarni klju, a to je u ovom sluaju tablica STUDENT.

3. NORMALNA FORMA Tablica se nalazi u 3. normalnoj formi ako se nalazi u 2. normalnoj formi, i ako niti jedan nekljuni atribut nije tranzitivno funkcijski zavisan o primarnom kljuu. Definicija: Tranzitivna funkcijska zavisnost atributa U tablici R koja sadri atribute X, Y i A , vrijedi da je A tranzitivno funkcijski zavisan o atributu X , ako je XY, YX, YA i AY. Simboliki tranzitivna zavisnost se prikazuje XYA
32

Primjer: STUDENT Student id 1 2 3

Ime Ante Stipe ....

Prezime Roi Ani ....

JMBG 1110980370071 0307980380025

UPISNI_LIST ulist_id student_id 1 1 2 1

semestar 1 2

k.godina 1999/00 1999/00

obr.program Elektronika Elektronika

Mj.roenja Osijek Osijek

vrijedi ulist_idstudent_id ( svaki upisni list vezan je samo za jednog studenta) student_idulist_id ( jedan student ima vie upisnih listova) student_id Mj.roenja (student je roen u jednom odreenom mjestu) Mj.roenjastudent_id (u jednom mjestu moe biti roeno vie studenata) Budui vrijedi ulist_idstudent_id Mj.roenja, atribut mjesto roenja je tranzitivno(posredno) funkcijski zavisan o primarnom kljuu tablice (ulist_id). Ovakva tablica dakle nije u treoj normalnoj formi . Nepravilnosti koje proizlaze iz ovakve strukture podataka: 1. Anomalija unosa: Nije mogue unijeti mjesto roenja za pojedinog studenta, dok se ne unese njegov upisni list. 2. Anomalija promjene /auriranja: Kod promjene mjesta roenja pojedinog studenta, taj podatak treba mijenjati u svim upisnim listovima, koji su vezani za tog studenta. 3. Anomalija brisanja: Brisanjem upisnog lista brie se podatak o mjestu roenja Problem svoenja tablice na treu normalnu formu rjeava se na nain da se atribut koji je tranzitivno zavisan o kljuu, preseli u tablicu, u kojoj je atribut koji posreduje u tranzitivnoj vezi (u ovom sluaju student_id) primarni klju.

STUDENT Student id 1 2 3

Ime Ante Stipe ....

Prezime Roi Ani ....

Mj. roenja Osijek Split ....

JMBG 1110980370071 0307980380025

UPISNI_LIST ulist_id 1 2

student_id 1 1

semestar 1 2

k.godina 1999/00 1999/00

obr.program Elektronika Elektronika

BOYCE-CODDOVA NORMALNA FORMA (BCNF) Definicija: Determinant je atribut o kojem je neki atribut potpuno funkcijski zavisan. Tablica se nalazi u BCN formi ako svaki determinant ima jedinstvenu vrijednost u cijeloj tablici.

Primjer 2: Tablice STUDENT i MJESTO. Vrijedi da je PK(STUDENT)=Student_id, PK(MJESTO)=Mjesto_ID=FK(STUDENT)

33

MJESTO Mjesto_ID 1 2 3 4 5 STUDENT Student id 1 2 3

IME MJESTA Split Smokvica Smokvica Osijek Bonn

OPINA Split Pag Smokvica Osijek Dat.roenja 11.10. 1980 03.07. 1980 ....

DRAVA Hrvatska Hrvatska Hrvatska Hrvatska Njemaka Pot.broj 31000 21000

Ime Ante Stipe ....

Prezime Roi Ani ....

Mjesto_ID 4 1 ....

Za tablicu STUDENT vrijedi Student_idMjesto_ID , Mjesto_ID Pot.broj, Mjesto_ID Student_id, Pot.broj Mjesto_ID Atribut Mjesto_Id je determinant jer je atribut Pot.broj potpuno funkcijski zavisan o oznaci mjesta (Mjesto_id). U tablici se ne mogu pojaviti dva reda sa istom vrijednou Mjesto_id, a razliitom vrijednou atributa Pot.broj. Dakle Mjesto_ID jest determinant, ali nije jedinstven, tj. u tablici se mogu pojaviti studenti koji su roeni u istom mjestu, tj. u raznim redovima moe se pojaviti ista vrijednost atributa Mjesto_ID. Tablica dakle nije u BCN formi. Nepravilnosti koje proizlaze iz ovakve strukture podataka: 1. Anomalija unosa: Nije mogue unijeti potanski broj za mjesto dok god nije uneen prvi student koji je roen u tom mjestu. 2. Anomalija promjene: Ako se promijeni potanski broj pojedinog mjesta, treba promijeniti sve zapise koji pripadaju studentima roenim u tom mjestu 3. Anomalija brisanja: Ako se iz tablice ukloni zadnji student koji je roen u nekom mjestu, gubi se podatak o potanskom broju Problem svoenja tablice na BCN formu rjeava se na nain da se atribut koji je potpuno funkcijski zavisan o determinantu koji nije jedinstven, preseli u tablicu, u kojoj je taj determinant (u ovom sluaju Mjesto_ID) primarni klju. U gornjem primjeru to znai da se atribut Pot.broj preseli u tablicu u kojoj je primarni klju atribut Mjesto_ID. MJESTO Mjesto_ID 1 2 3 4 5 STUDENT Student id 1 2 3 POT. BROJ 21000 23249 20272 31000 Dat.roenja 11.10. 1980 03.07. 1980 .... OPINA Split Pag Smokvica Osijek DRAVA Hrvatska Hrvatska Hrvatska Hrvatska Njemaka

IME MJESTA Split Smokvica Smokvica Osijek Bonn

Ime Ante Stipe ....

Prezime Roi Ani ....

Mjesto_ID 4 1 ....

4. NORMALNA FORMA Tablica se nalazi u 4. normalnoj formi ako i samo ako vrijedi da postojanje vieznane zavisnosti atributa A> B povlai za sobom postojanje funkcijske ovisnosti svih atributa u toj tablici o atributu A.
34

Definicija: Vieznana zavisnost atributa U tablici R koja sadri atribute A,B i C , vrijedi da je B vieznano zavisan o atributu A , ako vrijedi: za svaki B koji odgovara vrijednostima atributa A i C, B je ovisan samo o A, ali ne i o C. Primjer: Tablica predavanja Predava Predmet Ili Fizika Ili Fizika Ili Fizika Mati Fizika Mati Fizika Mati Fizika

Poglavlje Optika Mehanika Toplina Optika Mehanika Toplina

U tablici se biljee predmeti, predavai i poglavlja koja se predaju za pojedine predmete. Vrijedi: Predmet>Poglavlje, budui da je sadraj predmeta vezan iskljuivo za predmet, a ne zavisi od toga koji nastavnik predaje taj predmet. Da bi tablica bila u 4. normalnoj formi treba vrijediti Predmet Predava, to ovdje ne vrijedi budui za jedan isti predmet postoji vie predavaa. Tablica se svodi na 4. normalnu formu rastavljanjem postojee tablice na dvije nove Predava Ili Mati Predmet Fizika Fizika Predmet Fizika Fizika Fizika Poglavlje Optika Mehanika Toplina

Svoenje tablica na zadane normalne forme, esto zahtjeva rastavljanje postojeih tablica (dekompoziciju). Pri dekompoziciji tablica, mora vrijediti da se postupkom razdvajanja tablica ne izgubi niti jedna informacija, niti se pojave informacije koje ne postoje u polaznoj tablici. U tu svrhu postoje dva pravila: a) Svaka funkcijska zavisnost tablice T moe biti logiki izvedena iz funkcijskih zavisnosti u tablicama R i S, koje nastanu dekompozicijom tablice T. b) Zajedniki atribut tablica R i S mora biti klju u barem jednoj od tih tablica. Primjer: STUDENT1 Student id 1 2 1 3

Sport odbojka nogomet koarka

Ime Ante Stipe Ante ....

Prezime Roi Ani Roi ....

Mjesto_id 4 1 4

Ime_mjesta Osijek Split Osijek ....

Pot.broj 31000 21000 31000

JMBG 1110980370071 0307980380025 1110980370071

PK(STUDENT1) =(Student_id,Sport) Ovako formirana tablica ne zadovoljava 2NF, budui su neki atributi funkcijski zavisni o podskupu primarnog kljua Vrijedi: Student_idIme, Student_idPrezime, Student_idMjesto_id itd. U skladu sa opisanim nainom rjeavanja 2NF, sve atribute koji su funkcijski zavisni o nekom atributu koji je podskup primarnog kljua treba prebaciti u tablicu u kojoj je taj atribut primarni klju. Dakle treba formirati novu tablicu u kojoj je primarni klju atribut Student_id, u koju se zatim projiciraju svi atributi koji su funkcijski zavisni o Student_id (Ime,Prezime, Mjesto_id, Ime_mjesta, Pot.broj, JMBG). STUDENT Student id 1 2 3 Pot.broj 31000 21000

Ime Ante Stipe ....

Prezime Roi Ani ....

Mjesto_id 4 1

Ime_mjesta Osijek Split ....

JMBG 1110980370071 0307980380025

35

SPORT Student id 1 2 1 3

Sport odbojka nogomet koarka

Dakle polazna tablica rastavljena je u dvije tablice, koje su sada u 2NF. Meutim tablica STUDENT nije u 3NF, budui unutar nje postoji tranzitivna zavisnost pojedinih atributa o primarnom kljuu. Vrijedi Student_idMjesto_idIme_mjesta. Razrjeavanje tranzitivne zavisnosti podrazumijeva formiranje nove tablice u kojoj je atribut koji posreduje u funkcijskoj zavisnosti (Mjesto_id) primarni klju STUDENT Student id 1 2 3 MJESTO Mjesto_ID 1. 2. 3. 4 5. Pot.broj 31000 21000

Ime Ante Stipe ....

Prezime Roi Ani ....

Mjesto_id 4 1

JMBG 1110980370071 0307980380025

Ime_mjesta Split Smokvica Smokvica Osijek Bonn

Sada je tablica STUDENT u 3NF, ali ne zadovoljava BCN formu, zbog toga to je atribut Mjesto_ID determinant s obzirom na atribut Pot.broj, ali nema jedinstvenu vrijednost u cijeloj tablici. Razrjeavanjem ove BCN forme dobijemo konanu strukturu tablica STUDENT Student id 1 2 3 MJESTO Mjesto_ID 1 2. 3. 4 5.

Ime Ante Stipe ....

Prezime Roi Ani ....

Mjesto_id 4 1

JMBG 1110980370071 0307980380025

Ime_mjesta Split Smokvica Smokvica. Osijek Bonn

Pot.broj 21000 .... .... 31000 -

36

Primjer: Zadana je relacijska tablica R sa svojstvom head(R)={A,B,C,D,E,F,G,H,I,J} Postoji skup funkcionalnih zavisnosti F{ABCDEFGHIJ, CDGHJ, GHJ, EF } Razmotriti normalizaciju tablice. a) Prva normalna forma. Po definiciji prve normalne forme svi nekljuni atributi moraju biti funkcijski zavisni o primarnom kljuu. S obzirom na funkcijsku zavisnost ABCDEFGHIJ mora vrijediti da je primarni klju PK(R)={A,B,C,D} . b) Druga normalna forma. Svi nekljuni atributi moraju biti potpuno funkcijski zavisni o primarnom kljuu. Budui postoji funkcijska zavisnost CDGHJ, atributi G, H i J su funkcijski zavisni o podskupu primarnog kljua. Da bi se postigla druga normalna forma potrebno je tablicu R dekomponirati u dvije tablice. R1| head(R1)={A, B, C, D, E , F, I} , PK(R1)={A,B,C,D} R2| head(R2)= {C, D, G, H, J}, PK(R2)={C, D} c) Trea normalna forma. Uz definiranu funkcijsku zavisnost GHJ tablica R2 nije u treoj normalnoj formi zbog tranzitivne funkcijske zavisnosti o primarnom kljuu. Tj. vrijedi CDGHJ. Tablicu R2 treba dekomponirati po treoj normalnoj formi: R21 | head(R21)={C, D, G, H} , PK(R21)={C, D} R22 | head(R22)={G, H, J }, PK(R22)={G, H} Slino razmatranje vrijedi za tablicu R1, koja uz definiranu funkcijsku zavisnost EF, nije u treoj normalnoj formi zbog tranzitivne funkcijske zavisnosti o primarnom kljuu ABC DEF. Tablica se dekomponira u dvije tablice R11 | head(R11)={ A, B, C, D, E , I} , PK(R11)={A,B,C,D} R12 | head(R12)={ E, F} , PK(R12)={E} Konano rjeenje svoenja tablice R na normalne forme su tablice R11 | head(R11)={ A, B, C, D, E , I} , PK(R11)={A,B,C,D} R12 | head(R12)={ E, F} , PK(R12)={E} R21 | head(R21)={C, D, G, H} , PK(R21)={C, D} R22 | head(R22)={G, H, J }, PK(R22)={G, H}

37

9. SQL JEZIK JEZIK BAZA PODATAKA


SQL jezik (Structured Query Language strukturni jezik za pretraivanje) jest srce relacijske tehnologije. Razvoj SQL-a kao jezika za manipulaciju podacima tekao je usporedo s razvojem relacijskog modela podataka, osnove kojeg je postavio 1971. godine E.F.Codd. Kada je Codd postavio svoj koncept relacijskog modela podataka, ustvrdio je da ... usvajanje relacijskog modela podataka... doputa razvoj univerzalnog jezika podataka baziranog na primjeni relacijske algebre. Iako je odmah uoio zahtjeve koje bi takav jezik trebao ispunjavati, kao i njegove prednosti pri manipulaciji podacima, tada nije pokuao razviti takav jezik u praksi. S obzirom na brzinu kojom se prihvaaju nove ideje u informatici, razvoj SQL -a tekao je razmjerno sporo. Tek 1974. godine pojavljuje se lanak autora D.D. Chamberlaina i R.F. Boycea u kojem oni opisuju strukturni jezik za pretraivanje podataka, nazvan SEQUEL. Godine 1975. Boyce, Chamberlain i Hammer predstavljaju koncept jezika SQUARE koji je koristio matematike izraze, za razliku od engleskih termina koje je koristio SEQUEL. Oba jezika su bila relacijski potpuna prema kriteriju koji je postavio E.F.Codd. Uskoro SQUARE mijenja ime u SEQUEL2, i taj jezik je koriten u razvoju prvog prototipa relacijskog sustava za upravljanje bazama podataka , nazvanog SystemR, razvijenog u IBM-u. Kasnije jezik mijenja ime u SQL. SQL je standardiziran po ISO ( International Standardization Organization) i ANSI (American National Standards Institute). Svi sustavi za upravljanje bazama podataka, kako oni najmanji na PC platformama, tako i veliki client-server sustavi, nastoje to je mogue vie slijediti originalni standard SQL-a, ali ga i obogauju raznim dodatnim opcijama.

38

9.1. TIPOVI PODATAKA


Prilikom definiranja podataka u relacijskim sustavima, za sva svojstva entiteta (atribute), potrebno je definirati tip podataka, kao kljuni segmenat odreivanja domene nad kojom su definirani pojedini atributi. Tipovi podataka (format) mogu se podijeliti u 4 kljune kategorije znakovni tipovi podataka binarni podaci numeriki tipovi podataka podaci formata datum- vrijeme

ZNAKOVNI TIPOVI PODATAKA Character Char (n) string duljine tono n znakova. Svaki znak prikazuje se jednim bajtom. Znakovi mogu biti alfanumeriki i specijalni. Duljina znaka je uvijek n bajtova, bez obzira na veliinu podatka koji se unosi, a maksimalan broj znakova je 255. Ako je stvarna duljina unesenog stringa manja od n, sustav dodaje prazne znakove do duljine n. Primjer: Ako je n=6, a uneseni string ABC , on se u memoriji pohranjuje kao ABC###, tj. uvijek fiksne duljine n=6. Pridjeljuje se alfanumerikim atributima, za koje se pretpostavlja da su priblino iste duljine. Character varying Varchar (n) string promjenive duljine, maksimalno n karaktera. Pri tome maksimalna duljina zavisi od mogunosti procesora i operativnog sustava, a najee iznosi 255. Pri unosu podataka, duljina str inga nije fiksna ve je odreena veliinom podatka. Primjer: Ako je n=25, a uneseni podatak Ivo, biljei se duljine 4 bajta kao Ivo3, pri emu zadnji bajt 3 oznaava stvarnu duljinu stringa. Format varchar pridjeljuje se alfanumerikim atributima promjenjive duljine. Text Text - String neograniene veliine.

BINARNI PODACI Bit Bit podatak koji predstavlja binarnu vrijednost ( 1 ili 0). Veliina rezerviranog memorijskog prostora je 1 bajt. Ukoliko se bit tipu podataka pokua pridjeliti cjelobrojna vrijednost, ona se interpretira kao 1. NUMERIKI TIPOVI PODATAKA Binary(n)

Sadrava maksimalno 255 bajta binarnih podataka, te se koristi za spremanje binarnih i heksadecimalnih vrijednosti.
INTEGER int cjelobrojni format s predznakom ili bez njega. Zauzima 4 bajta i sadrava cijele brojeve od -2 31 (-2,147,483,648) do (2 31 1) (2,147,483,647).

39

SMALL INTEGER - smallint cjelobrojni format s predznakom ili bez njega. Zauzima 2 bajta i sadrava cijele brojeve od -215 (-32,768) do (215-1) (32,767). TINY INTEGER (BYTE) - tinyint cjelobrojni format koji prikazuje brojeve od 0 do 255. Zauzima 1 bajt. NUMERIC - numeric(p,q) decimalni broj, ukupno p znamenki i predznak, q znamenki iza decimalnog zareza. DECIMAL - decimal(p,q)

decimalni broj, koji se interno biljei sa m znamenki, pri emu vrijedi 0<p<q<m. Decimal (7,2) doputa unos broja koji ima tono dvije znamenke iza decimalnog zareza, a ukupan broj znamenaka mu je najmanje 7. Stvarni broj znamenaka koji se rezervira za interni prikaz u bazi zavisi od operacijskog sustava.
FLOAT Float(n) Realni broj u formatu pominog zareza (floating point). Zauzima 4 bajta memorije. DOUBLE Double(n) Realni broj dvostruke preciznosti u formatu pominog zareza (floating point). Zauzima 8 bajta memorije.

DATUM I VRIJEME FORMAT Datum i vrijeme sastavljeni su od alfanumerikih podataka koji predstavljaju podatke o datumu i vremenu. Uobiajeni format prikaza je "dan-mjesec-godina sat:minut: sekunda AM" datetime

Je tip podatka koji je predstavljen sa 8 bajtova ili dva 4-bajtna cjela broja: 4 bajta za prikaz datuma i 4 bajta za prikaz vremena (sati). Mogue je prikazati datume od 1. sijenja 1753 do 31. prosinca 9999, sa tonou od 3.33 millisekunde.
smalldatetime skraeni format datum- vrijeme

Je tip podatka koji je predstavljen sa 4 bajta: 2 bajta za prikaz datuma i 2 bajta za prikaz vremena (sati). Mogue je prikazati datume od 1. sijenja 1900 do 6. lipnja 2079, sa tonou od minute.

40

9.2. FORMIRANJE TABLICE Prilikom definiranja tablice (entiteta) potrebno je definirati sve atribute (kolone) kao i ogranienja vezana za integritet podataka i referencijalni integritet. Za formiranje tablice koristi se SQL instrukcija CREATE TABLE, koja ima sintaksu oblika CREATE TABLE ime_tablice ( naziv_kolone1 | svojstva | column_constraint , naziv_kolone2 | svojstva | column_constraint, ...., table constraints ) ime_tablice Ime svake tablice mora biti jedinstveno u bazi podataka. Duina naziva tablice moe imati maksimalno 128 znakova. naziv_kolone Predstavlja naziv pojedinane kolone u tablici. Naziv pojedine kolone mora biti jedinstven u tablici. svojstva Odreuju tip podataka, null vrijednosti, identity svojstvo za kolonu. IDENTITY[(seed, increment)] Generira inkrementalnu vrijednost za svaki novi red podataka u tablici na osnovu seed i increment parametara. Ako je navedena, seed vrijednost oznaava poetak brojaa i bit e dodijeljena prvom redu u tablici, a svaki slijedei red dobit e jedinstvenu identity vrijednost, koja je jednaka posljednjoj identity vrijednosti uveanoj za vrijednost parametra increment. Ako vrijednosti seed i increment nisu navedene smatra se da je njihova vrijednost 1. Pridjeljivanje IDENTITY svojstva koloni podrazumijeva njezino svojstvo NOT NULL. Samo jedna kolona u tablici moe biti definirana sa svojstvom identity. Svojstvo identity moe se dodijeliti onoj koloni koja je definirana kao numeriki tip podataka. NULL | NOT NULL Svojstvo nuliranja kolone, koje odreuje da li je navedena kolona moe sadravati null vrijednosti. Ukoliko se u definiciji kolone ovo svojstvo ne navede izriito, smatra se NULL. CONSTRAINT ime_ogranienja Constraint ogranienje, definira ogranienja i dodatna relacijska svojstva unutar tablice. Ako ime_ogranienja nije navedeno u naredbi CREATE TABLE , sistem sam generira naziv za pojedina ogranienja. Ako se zahtjevi na pojedina ogranienja promijene, ogranienje se uklanja, te potom kreira novo. Pri tome je bitno razlikovati postavljanje ogranienja na pojedine kolone, od postavljanja ogranienja na nivou tablice (table constraints). Ukoliko su ogranienja vezana za pojedinu kolonu ona se pri definiranje tablice navode u definiciji kolone. Ako se radi o ogranienj ima koja obuhvaaju vie kolona (npr. sloeni primarni klju), njih je potrebno definirati kao ogranienja na nivou tablice, nakon to su definirane sve kolone u tablici.

41

PRIMARY KEY [CLUSTERED | NONCLUSTERED] (col_1 , col_2 ,..., col_n) Osigurava integritet i jedinstvenost podataka u odreenom atributu (koloni), gdje su col_1, ..., col_n kolone (atributi) koje ine primarni klju. Sve kolone koje ine primarni klju moraju imati svojstvo NOT NULL. Ako to nije posebno navedeno, sustav sam postavlja NOT NULL, za sve kolone koje ine primarni klju tablice. Ukoliko se ogranienje primarnog kljua definira na nivou kolone, lista kolona se izostavlja. Za osiguranje jedinstvenosti primarnog kljua, SQL automatski formira jedinstveni (unique) index na zadane kolone. Unutar tablice moe postojati samo jedan primarni klju. UNIQUE [CLUSTERED | NONCLUSTERED] (col_1 , col_2 ,..., col_n) Osigurava jedinstvenost podataka u navedenim kolonama), gdje su col_1, ..., col_n kolone (atributi) obuhvaene ogranienjem. Ukoliko se ogranienje jedinstvenosti definira na nivou kolone, lista kolona se izostavlja.Unutar tablice moe se definirati vie UNIQUE ogranienja. SQL sustav automatski stvara jedinstveni(unique) index za kolonu ogranienu UNIQUE. Za kolonu koja se definira sa ogranienjem UNIQUE, sistem automatski postavlja svojstvo NOT NULL. FOREIGN KEY (col_1 , .., col_16) REFERENCES ime_tablice (ref_col_1, .., ref_col_16) Definira referencijalni integritet vezu stranog kljua. Broj kolona i tip podataka u svakoj koloni koja se navodi u FOREIGN KEY col_n izrazu mora se poklapati sa onima navedenim u REFERENCES dijelu ref_col_n. Svaka vrijednost podataka koja se unosi u kolonu stranog kljua mora postojati u tablici na koju se taj strani klju odnosi. DEFAULT konstanta | izraz Odreuje uobiajenu vrijednost (default) za kolonu, kada se prilikom unosa podataka u tablicu ne navede vrijednost za taj atribut. DEFAULT constraint moe se primijeniti na kolone bilo kojeg tipa podataka, osim one kolone kojoj je dodijeljeno IDENTITY svojstvo. CHECK (expression) Ograniava mogue vrijednosti koje se unose u pojedine kolone tablice. Definirajmo tablice iz baze podataka koja opisuje studiranje: CREATE TABLE mjesto ( mjesto_id int IDENTITY CONSTRAINT PK_MJESTO PRIMARY KEY, ime_mjesta varchar(30) NOT NULL, post_br int NULL, drzava varchar(25) NOT NULL ) CREATE TABLE student ( student_id int IDENTITY CONSTRAINT PK_STUDENT PRIMARY KEY, ime varchar(20) NOT NULL, prezime varchar(30) NOT NULL, jmbg char(13), ime_oca varchar(20), dat_roenja smalldatetime NOT NULL, mjesto_rod int NOT NULL CONSTRAINT FK_MJESTO_ST FOREIGN KEY REFERENCES mjesto(mjesto_id), dat_upisa smalldatetime NOT NULL DEFAULT getdate() )

42

CREATE TABLE upisni_list ulist_id int IDENTITY CONSTRAINT PK_UPISNI PRIMARY KEY, student_id int NOT NULL CONSTRAINT FK_ST_UPIS FOREIGN KEY REFERENCES student(student_id), sem tinyint NOT NULL, sk_god varchar(8) NOT NULL, obr_prog_id int NOT NULL CONSTRAINT FK_OBR_UPIS FOREIGN KEY REFERENCES obr_prog(obr_prog_id), CONSTRAINT CHK_SEM CHECK (sem>0 AND sem<6)

) CREATE TABLE predmet ( predmet_id int IDENTITY, ime_predmeta varchar(25) NOT NULL, sati_pred tinyint NOT NULL, sati_au_vj tinyint NOT NULL DEFAULT 0, sati_lab_vj tinyint NOT NULL DEFAULT 0, CONSTRAINT PK_PREDMET PRIMARY KEY(predmet_id) ) CREATE TABLE upisuje ( ulist_id int CONSTRAINT FK_UPISNI_UPISUJE FOREIGN KEY REFERENCES upisni_list(ulist_id), predmet_id int CONSTRAINT FK_PREDM_UPISUJE FOREIGN KEY REFERENCES predmet(predmet_id), testiran bit NOT NULL DEFAULT 0, ocjena tinyint, datum_polag smalldatetime, CONSTRAINT PK_UPISUJE PRIMARY KEY (ulist_id,predmet_id) ) Na ovim primjerima vidljive su razlike u definiranju ogranienja (constraints) na nivou kolone (column constraints) ili na nivou tablice (table constraints). Kod deklariranja tablice student, primarni klju ini jedna kolona (student_id), te je ogranienje primarnog kljua (PRIMARY KEY) mogue primijeniti u sklopu definicije kolone koja ini primarni klju (student_id). Sa druge strane tablica upisuje je relacijska tablica koja je nastala kao posljedica relacije vie-na-vie izmeu entiteta upisni_list i predmet. Takva tablica ima sloeni primarni klju koji je sastavljen od stranih kljueva entitet a koji se nalaze u relacijskoj vezi (ulist_id i predmet_id). Stoga ogranienje primarnog kljua nije mogue prikazati u sklopu deklaracije jedne kolone, ve se mora primijeniti ogranienje na nivou tablice.

9.3. PROMJENE STRUKTURE TABLICE Promjene na ve formiranoj tablici obavljaju se naredbom ALTER TABLE Dodavanje kolona ili ogranienja (constraints) u tablicu ALTER TABLE ime_tablice ADD naziv_kolone| svojstva| constraints, naziv_kolone| svojstva| constraints

43

Primjer: ALTER TABLE student ADD CONSTRAINT UQ_JMBG UNIQUE (jmbg) ALTER TABLE mjesto ADD CONSTRAINT DF_DRZAVA DEFAULT Hrvatska FOR drzava ALTER TABLE student ADD spol char (1) NOT NULL CONSTRAINT CK_SPOL check (spol=M OR spol=) Brisanje kolona ili ogranienja (constraints) iz tablice ALTER TABLE ime_tablice DROP COLUMN naziv_kolone, CONSTRAINT naziv_ogranienja Primjer: ALTER TABLE student DROP COLUMN ime_oca Promjene svojstava postojeih kolona u tablici ALTER TABLE ime_tablice ALTER COLUMN naziv_kolone| svojstva Primjer: ALTER TABLE student ALTER COLUMN prezime varchar(20) NOT NULL Promjene na nekoj ve formiranoj tablici, kako je navedeno obavljaju se naredbom ALTER TABLE. Meutim ovaj oblik promjena podlijee odreenim pravilima. Dodavanje novih kolona Dodavanje novih kolona moe se slobodno realizirati dok je tablica prazna, te ne sadri podatke. Meutim ako tablica ve sadri neke podatke, svaki od ve postojeih redova u tablici proiruje se sa novom kolonom, za koju prethodno nije definirana njegova vrijednost. U ovakvim sluajevima, mogua su dva rjeenja : 1. Kolona koja se dodaje u tablicu treba se definirati sa svojstvom NULL. Na taj nain svim ve postojeim redovima dodaje se nova kolona, a vrijednosti u toj koloni za svaki redak u tablici bit e null. 2. Ako se kolona ne eli definirati sa svojstvom null, za nju je potrebno navesti default vrijednost. U takvim sluajevima svi postojei redovi u novostvorenoj koloni poprimaju vrijednost koja je odreena kao default. Primjer: ALTER TABLE student ADD ime_majke varchar (20) ili ALTER TABLE student ADD ime_majke varchar (20) NOT NULL DEFAULT Nije poznato Dodavanje novih ogranienja Kod dodavanja novih ogranienja treba voditi rauna da svako ogranienje poinje vaiti od tre nutka kada je definirano. Ukoliko se nekoj tablici, koja ve sadri odreene podatke (odreeni broj redova) eli dodati ogranienje tipa CHECK ili FOREIGN KEY, potrebno je definirati kako se novo ogranienje odnosi prema ve postojeim podacima.

44

Neka je tablica upisni_list definirana kao: CREATE TABLE upisni_list ( ulist_id int IDENTITY CONSTRAINT PK_UPISNI PRIMARY KEY, student_id int NOT NULL CONSTRAINT FK_ST_UPIS FOREIGN KEY REFERENCES student(student_id), sem tinyint NOT NULL, sk_god varchar(8) NOT NULL, obr_prog_id int NOT NULL CONSTRAINT FK_OBR_UPIS FOREIGN KEY REFERENCES obr_prog(obr_prog_id) ) Pretpostavimo da su u tablicu uneseni neki upisni listovi, nakon ega primjenimo ogranienje na vrijednosti semestra izrazom ALTER TABLE upisni_list ADD CONSTRAINT CHK_SEM CHECK (sem>0 AND sem<6) Novopostavljeno ogranienje vrijedit e za sve podatke koji se unesu nakon to je ogranienje definirano, ali je pitanje kako se odnosi prema onim redovima u tablici koji su prethodno uneeni. Djelo vanje novog ogranienja na ve postojee podatke odreuje se opcijama WITH CHECK i WITH NOCHECK. Ako se ogranienje definira sa opcijom WITH CHECK, automatski e biti provjereni i svi prethodno uneseni podaci da li zadovoljavaju pravilo. Primjenom opcije WITH NOCHECK, novo ogranienje primjenit e se samo na one podatke koji se unesu nakon ogranienja, bez provjere prethodno uneenih podataka. ALTER TABLE upisni_list WITH CHECK ADD CONSTRAINT CHK_SEM CHECK (sem>0 AND sem<6) Brisanje postojeih kolona Brisanje postojeih kolona u tablici primjenom instrukcije ALTER TABLE DROP moe se primijeniti samo na one kolone koje ne podlijeu nikakvim ogranienjima. Drugim rjeima, nije mogue ukloniti kolone - koje ine primarni klju ili dio primarnog kljua - koje predstavljaju strani klju - koje su vezane ogranienjem tipa CHECK - jedinstvene kolone (UNIQUE) - kolone koje imaju odreenu default vrijednost. - kolone po kojima postoji indeks. Za uklanjanje ovakvih kolona, potrebno je prethodno izbrisati sva ogranienja vezana za te kolone. Promjena svojstava postojeih kolona Promjena svojstava neke od postojeih kolona vri se instrukcijom oblika ALTER TABLE ime_tablice ALTER COLUMN naziv_kolone| svojstva Na tablici je mogue promijeniti samo svojstva kolone, a ne i pojedina ogranienja. Kod promjene pojedinih ogranienja, potrebno je najprije ukloniti postojee ogranienje, a nakon toga definirati novo. Stoga je instrukcijom ALTER TABLE mogue samo mijenjanje svojstava vezanih za pojedinu kolonu (tip podataka i null |not null svojstvo). Primjenom ove instrukcije nije mogue promijeniti svojstva kolona: - koje ine primarni klju ili dio primarnog kljua - koje predstavljaju strani klju - koje su vezane ogranienjem tipa CHECK ili UNIQUE. Jedina promjena koja se moe izvr iti jest ako su te kolone definirane kao niz znakova varchar, dozvoljeno je mijenjanje duljine niza. - kolone po kojima postoji indeks.

45

BRISANJE TABLICE Tablica se brie naredbom DROP TABLE ime_tablice

9.4. INDEKSI Za formiranje indeksa koristi se instrukcija CREATE INDEX oblika: CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX ime_indeksa ON ime_tablice(kolona_1,..kolona_n) UNIQUE definira jedinstveni indeks CLUSTERED | NONCLUSTERED odreuje clustered indeks. Ukoliko se ovaj podatak ne navede indeks se smatra NONCLUSTERED Npr: CREATE UNIQUE INDEX IX_JMBG ON student(JMBG) Brisanje indeksa vri se instrukcijom oblika: DROP INDEX ime_tablice.ime_indeksa

9.5. UNOS PODATAKA


46

Za unos podataka u tablicu koristi se SQL izraz oblika INSERT [INTO] ime_tablice (kolone) VALUES (vrijednosti) INTO Opcijska kljuna rije, moe se navesti, ali nije obavezno. ime_tablice Opisuje tablicu u koju se unose podaci. Tablica prethodno mora biti definirana naredbom CREATE TABLE kolone Lista kolona u koje se unose vrijednosti. Kolone se mogu navesti u proizvoljnom redoslijedu, ali podaci koji se unose (vrijednosti) moraju biti u istom redoslijedu kao i navedene kolone. Navoenje kolona potrebno je samo ako se novi red tablice popunjava sa samo nekim kolonama, a ne svim. Ako se ne navodi lista kolona, podrazumijeva se da se popunjavaju sve kolone. VALUES Kljuna rije koja se koristi za navoenje vrijednosti koje se unose u novi red tablice. vrijednosti Vrijednosti koje se unose u novi red tablice. Tip podataka pojedinih vrijednosti mora odgovarati tipu podataka koji je definiran za pojedinu kolonu. Za kolone koje imaju definirane default vrijednosti moe se koristiti kljuna rije default. Prilikom unosa novog redka u tablicu, ne unose se vrijednosti kojima rukuje sam sistem (IDENTITY kolone). Primjeri: unos podataka u tablicu student CREATE TABLE student ( student_id int IDENTITY CONSTRAINT PK_STUDENT PRIMARY KEY, ime varchar(20) NOT NULL, prezime varchar(30) NOT NULL, jmbg char(13), spol char(1), dat_roenja smalldatetime NOT NULL, mjesto_rod int NOT NULL CONSTRAINT FK_MJESTO_ST FOREIGN KEY REFERENCES mjesto(mjesto_id) ) head(student)={student_id, ime, prezime,jmbg,spol, dat_roenja, mjesto_rod} A. INSERT Unos svih kolona tablice INSERT student VALUES('Marko', 'Bili', '1110980370086', 'M', 11.10.1980',11) B. INSERT sa nazivima kolona INSERT student(spol, mjesto_rod, dat_roenja, ime, prezime) VALUES (M , 11 , 11.10.1980', 'Marko', 'Bili') Prilikom unosa podataka u novi redak tablice, mogue su razliite situacije i ponaanja sustava u zavisnosti o tome kako su definirane pojedine kolone, te njihova null i default svojstva.

47

svojstvo kolone null not null

nema ulaza, nema default null greka error

nema ulaza, postoji default Default Default

ulaz null nema default null greka- error

ulaz null postoji default null greka- error

U tablici su prikazana ponaanja sustava za pojedine situacije.

9.6. SELEKCIJA PODATAKA Selekcija dobavljanje podataka vri se SQL izrazom oblika SELECT [ALL | DISTINCT] imena_kolona FROM imena_tablica|logike veze WHERE uvjetni_izraz pri emu ALL daje sve redove izlaznog rezultata prema zahtjevu izraza,a DISTINCT daje samo jedinstvene redove, eliminirajui duplikate. Ukoliko se u select izrazu ne navede niti jedan od modifikatora ALL | DISTINCT, podrazumijeva se ALL. imena_kolona Definira kolone koje se prikazuju. kolone po redoslijedu navedenom kod formiranja tablice (CREATE TABLE). Ako lista imena_kolona sadri vie kolona, nazivi kolona se meusobno odvajaju zarezom. Primjer: SELECT * FROM STUDENT SELECT ime, prezime,jmbg FROM STUDENT SELECT DISTINCT ime,prezime FROM STUDENT

imena_tablica |logike veze nazivi tablica iz kojih se dobavljaju podaci. Tablice moraju prethodno biti definirane u bazi podataka. Logike veze opisuju operacije prirodnog spajanja meu tablicama (inner join, outer join itd). Realiza cija logikih veza podrazumijeva navoenje imena tablica i naina njihovog povezivanja (join) u obliku: tablica1 Operator_veze tablica 2 ON tablica1.kolona1=tablica2.kolona1 Primjer: SELECT STUDENT.IME,STUDENT.PREZIME,IME_MJESTA FROM STUDENT INNER JOIN MJESTO ON STUDENT.MJESTO_ROD=MJESTO.MJESTO_ID

Prilikom definiranja select izraza koji obuhvaa atribute (kolone) iz vie tablica, treba voditi rauna o jedinstvenosti naziva izabranih atributa. To znai da, ukoliko se navode kolone iz vie tablica koje imaju isti naziv, uz naziv kolone treba definirati iz koje tablice se selektira traena kolona. Primjer: SELECT STUDENT_ID,IME, PREZIME, SEM, SK_GOD FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID

Ova definicija nije ispravna budui se atribut (kolona) STUDENT_ID nalazi u obje tablice (STUDENT i UPISNI_LIST), pa time nije jednoznano odreeno po kojem se atributu vri selekcija. Ispravna definicija izraza bila bi: SELECT STUDENT.STUDENT_ID, IME, PREZIME, SEM, SK_GOD FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID uvjetni_izraz logiki izraz koji definira uvjet po kojem se vri pretraivanje.
48

9.6.1. UVJETNI IZRAZI Uvjetni izraz (search condition) SELECT lista_kolona FROM ime_tablice WHERE uvjetni izraz Oblik uvjetnog izraza ima oblik Naziv_kolone Predikat Vrijednost PREDIKATI USPOREDBE (Comparision predicates) Primjenjivo na sve tipove podataka = > < >= <= Jednako Vee od Manje od vee ili jednako manje ili jednako <> !> !< Razliito od Nije vee Nije manje

Primjer: SELECT * FROM STUDENT WHERE IME=Marko PREDIKATI PODRUJA (range predicates) naziv_kolone BETWEEN x and y - atribut zauzima vrijednosti izmeu x i y. Primjenjivo na sve tipove podataka. Primjer: SELECT * FROM MJESTO WHERE POST_BR between 20000 and 30000 naziv_kolone NOT BETWEEN x and y - atribut zauzima vrijednosti izvan opsega izmeu x i y. Primjenjivo na sve tipove podataka. Primjer: SELECT * FROM MJESTO WHERE POST_BR NOT between 20000 and 30000

PREDIKATI LISTE (list predicates) naziv_kolone IN (lista vrijednosti) vrijednost atributa jednaka je nekoj od vrijednosti navedenoj u listi. Primjenjivo na sve tipove podataka Primjer: SELECT * FROM MJESTO WHERE IME_MJESTA IN (Split, Trogir,Makarska) to je jednako kao : SELECT * FROM MJESTO WHERE (IME_MJESTA= Split ) OR (IME_MJESTA= Trogir) OR (IME_MJESTA= Makarska) naziv_kolone NOT IN (lista vrijednosti)atribut ima bilo koju vrijednost osim vrijednosti navedenih u listi. Primjenjivo na sve tipove podataka Primjer: SELECT * FROM MJESTO WHERE IME_MJESTA NOT IN (Split, Trogir,Makarska)

PREDIKATI UZORKA (pattern predicates) naziv kolone LIKE uzorak - vrijednost atributa poklapa se sa navedenim uzorkom Primjenjivo na tekstualne i datum tipove podataka. Vrste uzoraka % - niz karaktera bilo koje duljine. _ - Bilo koji pojedinani karakter [ ] - Bilo koji karakter u navedenim granicama [^] Bilo koji karakter izvan navedenih granica
49

Primjeri: SELECT * FROM STUDENT WHERE PREZIME Like A% Prikazuje sve studente kojima prezime poinje sa slovom A. SELECT * FROM STUDENT WHERE PREZIME Like %i Prikazuje sve studente kojima prezime zavrava sa i. SELECT * FROM STUDENT WHERE IME Like _arko Prikazuje sve studente kojima se u imenu nalazi arko, a ispred je bilo koje slovo.npr. Marko,Darko,arko SELECT * FROM STUDENT WHERE PREZIME Like [P-Z]ili Prikazuje sve studente kojima prezime poinje sa slovom izmeu P i Z, a u nastavku se nalazi ili . SELECT * FROM STUDENT WHERE IME Like [AB]% Prikazuje sve studente kojima ime poinje sa slovom A ili B

PREDIKATI NEPOZNATE VRIJEDNOSTI IS NULL, IS NOT NULL Primjer: SELECT IME, PREZIME, SEM FROM STUDENT LEFT OUTER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SEM IS NULL LOGIKI OPERATORI - AND, OR, NOT Logiki operatori AND i OR povezuju vie uvjeta u uvjetnom izrazu. Logiki izraz AND povezuje dva ili vie uvjeta i vraa rezultat samo ako su svi uvjeti zadovoljeni (istiniti). Primjer: SELECT IME, PREZIME, SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD=1999/00 AND SEM=1. Logiki izraz OR povezuje dva ili vie uvjeta i vraa rezultat ako je bilo koji uvjet zadovoljeni (istinit). Primjer: SELECT * FROM MJESTO WHERE IME_MJESTA= Split OR IME_MJESTA= Trogir OR IME_MJESTA= Makarska Logiki izraz NOT negira uvjet koji mu slijedi Primjer: SELECT * FROM MJESTO WHERE NOT IME_MJESTA= Split PRIORITET LOGIKIH OPERATORA Kada se u uvjetnom dijelu izraza pojavljuje vie logikih operatora, logiki izraz formira se prema prioritetu djelovanja operatora NOT- najvii prioritet AND -srednji prioritet OR - najnii prioritet

Primjer:

50

SELECT IME, PREZIME FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD=1999/00 OR K_GOD=1998/99 AND SEM=1. Kao rezultat dobije se lista svih studenata koji su upisani u 1. semestar k.godine 1998/99 i onih koji su upisani u k.godinu 1999/00 (bilo koji semestar). Prioritet logikih operatora, moe se promijeniti uvoenjem zagrada () u logiki izraz Na primjer: SELECT IME, PREZIME FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE (SK_GOD=1999/00 OR K_GOD=1998/99) AND SEM=1.

9.6.2. OBLIKOVANJE IZLAZNIH REZULTATA Preimenovanje kolona u rezultatu Kod postavljanja upita (select) kojim se dohvaaju podaci, izlazna lista (rezultat) formira se na nain da naziv kolone koja se dohvaa postaje zaglavlje te kolone. Primjer: SELECT PREZIME, IME, SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD=1999/00 Rezultat: Prezime Ime Sem Mati Ivo 1 Bili Ante 3 Ali Josip 1 Za postizanje izlazne liste rezultata, koja je korisniku razumljivija, moe se primijeniti preimenovanje izlaznih rezultata u obliku zaglavlje_kolone=naziv_kolone u sklopu select izraza. Primjer: SELECT PREZIME,IME, UPISANI_SEMESTAR=SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD=1999/00 Prezime Mati Bili Ali Ime Ivo Ante Josip UPISANI_SEMESTAR 1 3 1

Zamjena podataka u rezultatu upita Proirimo tablicu STUDENT atributom koji opisuje status studenta ( R- redovni student, I- izvanredni student) ALTER TABLE student ADD tip_studija char (1) not null CONSTRAINT CK_2 check (tip_studija=R or tip_studija =I) U tablicu student uvodimo novi atribut (kolonu), koja oznaava tip studiranja, te moe poprimiti samo vrijednosti R ili I, kao oznaka za redovne ili izvanredne studente. Upit SELECT IME, PREZIME, TIP_STUDIJA FROM STUDENT daje rezultat u kojem se u koloni tip_studija nalaze znakovi R ili I kao oznaka tipa studiranja. Kako bi se ove kratice uinile razumljivijim mogu se u izlaznom rezultatu dodijeliti puni nazivi koritenjem CASE izraza. SELECT IME, PREZIME,
51

STUDIJ=CASE TIP_STUDIJA WHEN R THEN REDOVNI WHEN I THEN IZBORNI END FROM STUDENT. Upit SELECT IME,PREZIME, SEM, TIP_STUDIJA FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD=1999/00 AND SEM IN (1,3,5) moe se pomou naredbe CASE prikazati u pogodnijem obliku SELECT IME, PREZIME, STATUS=CASE WHEN TIP_STUDIJA=R AND SEM=1 THEN REDOVNI STUDENT 1. GODINE WHEN TIP_STUDIJA=R AND SEM=3 THEN REDOVNI STUDENT 2. GODINE WHEN TIP_STUDIJA=I AND SEM=1 THEN IZVANREDNI STUDENT 1. GODINE WHEN TIP_STUDIJA=I AND SEM=3 THEN IZVANREDNI STUDENT 2. GODINE ELSE APSOLVENT END FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD=1999/00AND SEM IN (1,3,5)

Povezivanje podataka u rezultatu upita Upit SELECT PREZIME,IME, TIP_STUDIJA FROM STUDENT daje listu svih studenata u formatu Prezime Mati Bili Ali ... Ime Ivo Ante Josip ... tip_studija R R I ...

Povezivanjem kolona ime i prezime moe se dobiti uobiajeni prikaz studenta: SELECT STUDENT=PREZIME+ +IME , STUDIJ=CASE TIP_STUDIJA WHEN R THEN REDOVNI WHEN I THEN IZBORNI END FROM STUDENT Student Mati Ivo Bili Ante Ali Josip ... studij Redovni Redovni Izvanredni ...

Izraunate kolone (Computed values)


52

SQL dozvoljava formiranje novih kolona u select izrazu, ije se vrijednosti izraunavaju na temelju podataka koji se nalaze u numerikim kolonama postojeih tablica. Primjer: Prikaz upisnih listova vezanih za pojedine studente uz oznaenu godinu studiranja. SELECT IME,PREZIME, SEM, GODINA_STUDIJA= SEM/2+ SEM%2 FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD=1999/00 AND SEM IN (1,3,5) Pri izraunavanju vrijednosti u pojedinim kolonama mogu se koristiti vrijednosti postojeih kolona za koje su definirani numeriki tipovi podataka i neki od numerikih operatora +,-,*,/, % (Modulo operator ostatak pri cjelobrojnom dijeljenju).

9.6.3. SORTIRANJE IZLAZNIH REZULTATA Za sortiranje izlaznih rezultata koristi se izraz ORDER BY, kao dio select instrukcije. SELECT [ALL | DISTINCT] nazivi_kolona FROM nazivi_tablica|logike veze WHERE uvjetni izraz ORDER BY kolone_sortiranja Sintaksa: ORDER BY naziv_kolone tip_sortiranja, naziv_kolone tip_sortiranja,... Sortiranje moe biti rastue (ascending ASC) ili padajue (descending DESC). Ako nije naveden tip sortiranja podrazumijeva se rastue (ASC) sortiranje. head(STUDENT)={student_id, ime, prezime,jmbg,spol, dat_roenja, mjesto_id} Primjer: SELECT * FROM STUDENT ORDER BY PREZIME, IME Umjesto naziva kolona u izrazu order by moe se koristiti redni broj kolone u select listi. Primjer: SELECT * FROM STUDENT ORDER BY 3 ASC , IME

9.6.4. OGRANIAVANJE ISPISA REZULTATA

53

Upit tipa SELECT [ALL | DISTINCT] imena_kolona FROM imena_tablica|logike veze WHERE uvjetni_izraz prikazuje sve rezultate iz izabranih tablica koji zadovoljavaju uvjetni izraz. U sluaju potrebe za prikazom samo dijela izlaznih rezultata ispis se moe ograniiti primjenom sintakse SELECT [ALL | DISTINCT] [TOP n [PERCENT]] imena_kolona FROM imena_tablica|logike veze WHERE uvjetni_izraz ORDER BY kolone_sortiranja pri emu je select izraz proiren modifikatorom TOP n ili TOP n PERCENT. Ovaj modifikator oznaava da e u ispisu rezultata biti prikazano samo prvih n redova (TOP n), odnosno samo n% (TOP n PERCENT) od ukupnog broja redova koji zadovoljavaju postavljeni uvjet. Primjer: SELECT TOP 50 PREZIME,IME,JMBG FROM STUDENT ORDER BY PREZIME,IME. Iz ukupnog skupa studenata prikazuje samo prvih 50 sortirano po prezimenu i imenu. SELECT TOP 50 PERCENT PREZIME,IME,JMBG FROM STUDENT ORDER BY PREZIME,IME. Iz ukupnog skupa studenata prikazuje prvu polovicu liste u ureenom sortiranju po prezimenu i imenu.

9.7. SELECT INTO (MAKE TABLE QUERY) SELECT [ALL | DISTINCT] nazivi_kolona INTO nova_ tablica FROM nazivi_tablica WHERE uvjetni izraz Izraz select into stvara novu tablicu na osnovi kolona navedenih u nazivi_kolona i redova koji se biraju uvjetnim izrazom iz postojeih tablica u bazi. Podatak nova_ tablica predstavlja ime nove tablice, koja e se formirati iz rezultata upita. Ta tablica ne smije prethodno biti definirana u bazi. SELECT INTO je operacija koja se odvija u dva koraka. U prvom koraku formira se nova tablica , a drugim korakom u novu tablicu unose se redovi koji zadovoljavaju uvjetni izraz. Ako se drugi korak ne izvri iz bilo kojeg razloga, nova tablica ostaje ali u njoj nema nikakvih podataka. Ovim izrazom omogueno je automatsko formiranje nove tablice bez njezinog prethodnog definiranja naredbom CREATE TABLE. Definicija podataka u novoj tablici formira se automatski i ona je identina definiciji pojedinih atributa(kolona) u postojeim tablicama, koje su obuhvaene SELECT izrazom. Primjer: Na temelju strukture podataka u bazi studentske slube potrebno je formirati novu tablicu koja e sadravati podatke o studentima koji su upisani u kolsku godinu 2000/01. Tablica mora sadravati slijedee podatke: Ime , Prezime i Matini broj studenta, upisani semestar, obrazovni program i kolsku godinu.

SQL izraz za rjeavanje ovog zadatka glasi SELECT IME, PREZIME, MAT_BR, SEM, OBR_PROG_IME, SK_GOD INTO STUDENT2
54

FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID = UPISNI_LIST.STUDENT_ID INNER JOIN OBR_PROG ON OBR_PROG.OBR_PROG_ID = UPISNI_ LIST.OBR_PROG_ID WHERE SK_GOD=2000/01. 9.8. APPEND UPITI ( proirivanje tablice podacima iz drugih tablica) Upitima tipa Append (dodavanje) u postojeu tablicu u bazi podataka dodijeljuju se podaci iz drugih tablica prema zadanim uvjetima. Standardna SQL sintaksa ovih izraza je oblika INSERT ime_tablice SELECT nazivi_kolona FROM tablice|veze WHERE uvjetni_izraz gdje ime_tablice predstavlja naziv neke od postojeih tablica u bazi podataka. Primjer: Dobijenu tablicu u prethodnom zadatku treba proiriti sa podacima za kolsku godinu 1999/00. Nakon to smo problem rijeili za kolsku godinu 2000/01. prethodnim zadatkom u bazi smo dobili novu tablicu STUDENT2, koja je definirana: head(STUDENT2)= {IME, PREZIME,MAT_BR, SEM,OBR_PROG_IME, SK_GOD} Postojee podatke u tablici potrebno je proiriti sa onima koji se odnose na kolsku godinu 1999/00. INSERT STUDENT2 SELECT IME, PREZIME, MAT_BR, SEM, OBR_PROG_IME, SK_GOD FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID = UPISNI_LIST.STUDENT_ID INNER JOIN OBR_PROG ON OBR_PROG.OBR_PROG_ID = UPISNI_ LIST.OBR_PROG_ID WHERE SK_GOD=1999/00.

9.9.AURIRANJE PODATAKA U TABLICI Auriranje podataka u tablici provodi se naredbom UPDATE prema sintaksi UPDATE naziv_tablice SET naziv_kolone = nova vrijednost, naziv_kolone2 = nova_vrijednost2 [FROM tablica_1, tablica_2,...] WHERE uvjetni izraz Primjeri: UPDATE STUDENT SET ime=Marko where ime=Darko and prezime=Y UPDATE UPISNI_LIST SET sem=3 FROM STUDENT, UPISNI_LIST WHERE ime=Darko AND prezime=Y AND STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID AND sem=1 UPDATE STUDENT SET mjesto_id=MJESTO.mjesto_id FROM MJESTO, STUDENT WHERE MJESTO.ime_mjesta =Trogir and student_id=21

9.10. BRISANJE PODATAKA IZ TABLICE Brisanje podataka iz tablice provodi se naredbom DELETE prema sintaksi DELETE naziv_tablice [FROM tablica_1, tablica_2,...] WHERE uvjetni izraz Primjeri: DELETE STUDENT where ime=Darko and prezime=Y

55

DELETE UPISNI_LIST FROM STUDENT, UPISNI_LIST WHERE ime=Darko AND prezime=Y AND STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID AND sem=1 ili DELETE UPISNI_LIST FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE ime=Darko AND prezime=Y AND sem=1

Zadatak: Pretpostavimo da posjedujemo podatke o studentima u obliku definiranom u tablici STUDENT2 head(STUDENT2)= {IME, PREZIME,MAT_BR, SEM,OBR_PROG_IME, SK_GOD} IME Ante Marko .... PREZIME X C .... MAT_BR 11-cc 12-dd .... SEM 1 1 ... OBR_PROG_IME Elektronika Elektronika .... SK_GOD 1999/00 1999/00 ...

Iz postojee tablice potrebno je uspostaviti bazu podataka strukture prema slici

Korak1: Formiranje tablice STUDENTI CREATE TABLE STUDENT ( student_id int IDENTITY CONSTRAINT PK_STUDENT PRIMARY KEY, ime varchar(20) NOT NULL, prezime varchar(30) NOT NULL, mat_br char(5) ) Korak 2: U tablicu STUDENT prenijeti podatke o svim studentima INSERT STUDENT SELECT DISTINCT Ime, Prezime,Mat_br FROM STUDENT2 Korak 3: Formiranje tablice OBR_PROG CREATE TABLE OBR_PROG ( obr_prog_id int IDENTITY PRIMARY KEY, obr_prog_ime varchar(20) NOT NULL, ) Korak 4: U tablicu OBR_PROG prenijeti podatke o razliitim obrazovnim programima INSERT OBR_PROG SELECT DISTINCT OBR_PROG_IME FROM STUDENT2 Korak 5: Tablicu STUDENT2 preimenujemo U UPISNI_LIST, te je proirimo kolonama ULIST_ID, STUDENT_ID i OBR_PROG_ID

ALTER TABLE UPISNI_LIST ADD ULIST_ID int IDENTITY PRIMARY KEY, STUDENT_ID int CONSTRAINT FK_STUDENT_ULIST REFERENCES STUDENT(student_id) , OBR_PROG_ID int CONSTRAINT FK_OBR_ULIST REFERENCES OBR_PROG(obr_prog_id) Korak 6: Pridijelimo vrijednosti novostvorenim kolonama STUDENT_ID i OBR_PROG_ID
56

UPDATE UPISNI_LIST SET OBR_PROG_ID=OBR_PROG.OBR_PROG_ID FROM UPISNI_LIST,OBR_PROG WHERE UPISNI_LIST.OBR_PROG_IME=OBR_PROG.OBR_PROG_IME UPDATE UPISNI_LIST SET STUDENT_ID=STUDENT.STUDENT_ID FROM UPISNI_LIST,STUDENT WHERE STUDENT.MAT_BR=UPISNI_LIST.MAT_BR Korak 7: Iz tablice UPISNI_LIST uklanjamo kolone IME,PREZIME, MAT_BR, OBR_PROG_IME ALTER TABLE UPISNI_LIST DROP COLUMN IME,PREZIME, MAT_BR, OBR_PROG_IME 9. 11. ALIAS-i Alias (drugo ime) koristi se u upitima SQL jezika za promjenu naziva objekta (tablice) kojoj se pristupa. Svakoj tablici moe se dodijeliti alias, bilo zbog lake upotrebe ili razlikovanja kod tzv. self-join query postupaka. Sintaksa: Naziv_tablice alias ili Naziv_tablice AS alias Primjer: Ispisati sve parove studenata koji su roeni istog datuma SELECT student_1=STUDENT_1.PREZIME+ +STUDENT_1.IME, student_2=STUDENT_2.PREZIME+ + STUDENT_2.IME FROM STUDENT AS STUDENT_1, STUDENT AS STUDENT_2 where STUDENT_1.DATUM=STUDENT_2.DATUM and STUDENT_1.STUDENT_ID>STUDENT_2. STUDENT_ID ili SELECT student_1=STUDENT_1.PREZIME+ +STUDENT_1.IME, student_2=STUDENT_2.PREZIME+ + STUDENT_2.IME FROM STUDENT STUDENT_1 INNER JOIN STUDENT STUDENT_2 ON STUDENT_1.DATUM=STUDENT_2.DATUM WHERE STUDENT_1.STUDENT_ID>STUDENT_2. STUDENT_ID

9.12. AGREGATNE FUNKCIJE Agregatne funkcije generiraju zbirne(skupne) vrijednosti nad pojedinim kolonama tablice. Agregatne funkcije (SUM, AVG, MIN, MAX, COUNT) koriste se u SELECT izrazu, te mogu biti primjenjene nad svim redovima tablice ili samo nad onim redovima koji su definirani WHERE izrazom. Znaenje agregatnih funkcija SUM zbroj AVG- prosjek MIN-minimum MAX-maximum Sintaksa: SELECT agregate(naziv_kolone), agregate(naziv_kolone) FROM tablice WHERE uvjetni izraz Primjeri: SELECT COUNT(ULIST_ID) FROM UPISNI_LIST WHERE k_god=1999/00 and sem=1 SELECT max(SEM) FROM UPISNI_LIST INNER JOIN STUDENT ON UPISNI_LIST.STUDENT_ID=STUDENT.STUDENT_ID WHERE ime=M and prezime=N COUNT- pobrojavanje

Agregatne funkcije SUM i AVG mogu se koristiti samo za numerike tipove podataka.

9. 13. GRUPNI UPITI (GROUP BY Query) SELECT [ALL | DISTINCT] nazivi kolona, agregatne kolone FROM nazivi_tablica| join veze [WHERE uvjetni izraz] [GROUP BY nazivi kolona] [HAVING uvjetni izraz]
57

[ORDER BY sort_izraz]

GROUP BY Odreuje grupe po kojima se dijele izlazni rezultati, dobijeni pomou select izraza, te primjenu agregatnih funkcija nad pojedinim grupama. GROUP BY izraz moe se primijeniti na sve kolone, osim onih tipa text. Primijenom GROUP BY izraza, rezultati dobijeni dijelom izraza SELECT [ALL | DISTINCT] nazivi kolona FROM nazivi_tablica| join veze [WHERE uvjetni izraz] grupiraju se na nain da oni redovi izlaznog rezultata koji u svim kolonama navedenim u GROUP BY izrazu imaju iste vrijednosti spadaju u istu grupu, nad kojom se moe zadati odreena agregatna funkcija. Primjer: SELECT STUDENT.STUDENT_ID , IME, PREZIME, SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID prikazuje sve upisne listove za pojedine studente u formatu student_id 1 2 ... 1 2 ... 1 ime A C ... A C ... A prezime B D ... B D ... B sem 1 1 ... 2 2 ... 3

Proirimo gornji upit GROUP BY izrazom SELECT STUDENT.STUDENT_ID , IME, PREZIME, BROJ=COUNT(SEM) FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID GROUP BY STUDENT.STUDENT_ID , IME, PREZIME Djelovanje GROUP BY operatora podrazumijeva grupiranje izlaznih rezultata na nain da se svi redovi koji u kolonama navedenim u GROUP BY izrazu imaju iste vrijednosti, povezuju u zajedniku grupu. U gornjem primjeru grupa je odreena kolonama student_id, ime i prezime, to znai da se svi redovi koji u ovim kolonama imaju istu vrijednost, povezuju u zajedniku grupu, nad kojom se provodi odreena agregatna funkcija. student_id 1 2 ... ime A C ... prezime B D ... broj 3 2 ...

Zadanim upitom dobijamo podatke o studentima (student_id, ime, prezime) i broj upisnih listova (semestara) koje je taj student upisao u tijeku studija. HAVING uvjetni izraz Predstavlja ogranienje izlaznih rezultata po zadanom uvjetu nakon izvrenja GROUP BY operacije. Osnovna razlika izmeu WHERE i HAVING izraza jest u injenici da WHERE izraz ograniava izlazne rezultate prije njihovog grupiranja tj. uvjetuje broj redova koji ulaze u grupiranje, dok HAVING izraz postavlja uvjet na izlazne rezultate nakon to je grupiranje zavreno.
58

Primjer: SELECT STUDENT.STUDENT_ID , IME, PREZIME, BROJ=COUNT(SEM) FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD>1997/98 GROUP BY STUDENT.STUDENT_ID , IME, PREZIME Navedeni upit prikazuje podatke o studentima u formatu student_id, ime, prezime, broj, gdje broj predstavlja broj upisnih listova za svakog studenta za kolske godine iznad 1997/98. Izraz SELECT STUDENT.STUDENT_ID , IME, PREZIME, BROJ=COUNT(SEM) FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID GROUP BY STUDENT.STUDENT_ID , IME, PREZIME HAVING SK_GOD>1997/98 je neispravan, budui operator HAVING djeluje nakon to zavri grupiranje rezultata, kada izlazni rezultati imaju oblik student_id 1 2 ... ime A C ... prezime B D ... broj 3 2 ...

Budui se nakon grupiranja gubi podatak o kolskoj godini, ne moe se primijeniti gore navedeni uvjet. Neka su definirane tablice head(STUDENT)={student_id, ime, prezime,jmbg,spol, dat_roenja, mjesto_id} head(MJESTO)={mjesto_id, ime_mjesta, post_br} head(UPISNI_LIST)={ulist_id, student_id,obr_prog_id,sk_god,sem} head(OBR_PROG)={obr_prog_id, obr_prog_ime} Primjeri: Prikazati studente upisane u 1. sem k.god 1999/00 po mjestu roenja SELECT mjesto.mjesto_id , ime_mjesta, broj=count(*) FROM student INNER JOIN upisni_list on student.student_id=upisni_list.student_id INNER JOIN mjesto on student.mjesto_id=mjesto.mjesto_id WHERE sk_god=1999/00 and sem=1 GROUP BY mjesto.mjesto_id, ime_mjesta ORDER BY ime_mjesta Prikazati studente i najvii upisani semestar za svakog studenta SELECT student.student_id, ime, prezime, zadnji_sem=max(sem) FROM student INNER JOIN upisni_list on student.student_id=upisni_list.student_id GROUP BY student.student_id, ime, prezime Prikazati statistiku broja upisanih studenata u 1.sem. kolske godine 1999/00, po obrazovnim programima SELECT obr_prog_ime, broj_upisanih=count(*) FROM obr_prog INNER JOIN upisni_list on obr_prog.obr_prog_id=upisni_list.obr_prog_id WHERE sk_god=1999/00 and sem=1 GROUP BY obr_prog_ime Zadaci za vjebu:

59

Prikazati statistiku broja upisanih studenata u kolskoj godini 1999/00, po obrazovnim programima i semestrima SELECT OBR_PROG_IME,SEM , BROJ_UPISANIH=COUNT(ULIST_ID) FROM OBR_PROG INNER JOIN UPISNI_LIST ON OBR_PROG.OBR_PROG_ID=UPISNI_LIST.OBR_PROG_ID WHERE SK_GOD=1999/00 GROUP BY OBR_PROG_IME, SEM ORDER BY SEM,OBR_PROG_IME Prikazati prosjek ocjena za studente SELECT STUDENTI.STUDENT_ID, IME, PREZIME, Prosjek=AVG(OCJENA) FROM STUDENTI INNER JOIN UPISNI_LIST ON STUDENTI.STUDENT_ID = UPISNI_LIST.STUDENT_ID INNER JOIN UPISUJE ON UPISNI_LIST.ULIST_ID = UPISUJE.ULIST_ID GROUP BY STUDENTI.STUDENT_ID, IME, PREZIME Prikazati statistiku upisanih studenata koji sluaju predmet naziva Fizika po kolskim godinama SELECT SK_GOD, broj=COUNT(UPISUJE.ULIST_ID) FROM UPISNI_LIST INNER JOIN UPISUJE ON UPISNI_LIST.ULIST_ID = UPISUJE.ULIST_ID INNER JOIN PREDMETI ON UPISUJE.PREDMET_ID = PREDMETI.PREDMET_ID WHERE PREDMET_IME = 'Fizika' GROUP BY SK_GOD Prikazati broj apsolvenata po kolskim godinama SELECT SK_GOD, broj=COUNT(*) FROM UPISNI_LIST WHERE (APSOLVENT = 1) GROUP BY SK_GOD

Prikazati statistiku ocjena studenata iz pojedinih predmeta u obliku ime_predmeta ocjena broj studenata koji su dobili ocjenu

SELECT PREDMET_IME, OCJENA, broj=COUNT(ULIST_ID) FROM PREDMETI INNER JOIN UPISUJE ON PREDMETI.PREDMET_ID = UPISUJE.PREDMET_ID GROUP BY PREDMET_IME, OCJENA

60

9.14. UGNJEENI UPITI - PODUPITI Podupit (Subquery) je SELECT izraz ukljuen u glavni SELECT, INSERT, UPDATE ili DELETE upit. Upit koji ukljuuje podupit (subquery), svoj uvjetni dio izraza temelji na rezultatima koji su dobijeni izvrenjem podupita. Pri tome podupit i glavni upit mogu djelovati ne istu tablicu ili na razliite tablice. Mnogi SQL izrazi koji ukljuuju podupite mogu se realizirati i stvaranjem upita sa povezivanjem (join). Podupit se ukljuuje u glavni upit u uvjetnom dijelu izraza tj. u dijelu WHERE ili HAVING. SELECT [ALL | DISTINCT] nazivi kolona, agregatne kolone FROM nazivi_tablica| join veze [WHERE naziv_kolone predikat (subquery)] [GROUP BY nazivi kolona] [HAVING naziv_kolone predikat (subquery)] Pri emu podupit ima sintaksu slijedeeg oblika SELECT [ALL | DISTINCT] nazivi kolona, agregatne kolone FROM nazivi_tablica| join veze [WHERE uvjetni izraz] [GROUP BY nazivi kolona] [HAVING uvjetni izraz] Prilikom izvrenja SQL izraza koji ukljuuje podupit, najprije se izvrava podupit, a rezultati koje podupit daje postaju dio uvjetnog izraza glavnog upita. Primjena podupita podrazumijeva postojanje odreenih ogranienja i pravila: U select listi (lista kolona) koje se dobijaju kao rezultat podupita moe biti sadran naziv samo jedne kolone, osim u sluajevima primjene podupita postojanja (Exists). Podupiti sa operatorom usporedbe moraju uvijek davati samo jednu vrijednost, te ne mogu ukljuivati grupiranje (GROUP BY i HAVING strukturu). Modifikator DISTINCT ne moe se primijeniti sa podupitima koji ukljuuju GROUP BY izraz. Podupit, tj. select izraz kojim se podupit definira uvijek mora biti naveden u zagradama. U sklopu podupita nije mogue koristiti ORDER BY, COMPUTE, ili FOR BROWSE izraze. Postoje tri osnovna oblika oblika podupita (subqueries): podupiti liste na koje se primijenjuje IN predikat podupiti sa predikatom usporedbe podupiti kojima se ispituje postojanje odreenih podataka

Podupiti liste Podupit vraa niz rezultata (listu), koju glavni upit koristi u svom uvjetnom izrazu preko predikata liste (IN ili NOT IN). Primjer: Prikazati studente upisane u 1. sem k.god 1999/00

61

SELECT STUDENT_ID , IME, PREZIME FROM STUDENT WHERE STUDENT_ID IN (SELECT STUDENT_ID FROM UPISNI_LIST WHERE SK_GOD=1999/00 AND SEM=1) ORDER BY PREZIME,IME Izraz se izvrava u dva koraka. Prvo podupit iz tablice upisni_list vraa student_id za sve studente koji imaju upisni list u 1. sem kolske godine 1999/00. Rezultat je lista sa podacima student_id. Potom glavni upit iz tablice student vraa podatke o svim studentima iji se student_id nalazi u listi koristei predikat liste (IN). Isti problem moe se realizirati i primjenom veze(join) izmeu tablica STUDENT i UPISNI_LIST. SELECT STUDENT.STUDENT_ID, IME, PREZIME FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID WHERE SK_GOD=1999/00 AND SEM=1 ORDER BY PREZIME,IME

Primjer: Prikazati studente koji nemaju niti jedan upisni list SELECT STUDENT_ID , IME, PREZIME FROM STUDENT WHERE STUDENT_ID NOT IN (SELECT STUDENT_ID FROM UPISNI_LIST) ORDER BY PREZIME,IME

Podupiti sa predikatom usporedbe Rezultat podupita moe se u glavni upit ukljuiti preko jednog od predikata usporedbe (=,<>,<,....) Takva primjena podupita podrazumijeva da podupit mora vratiti samo jednu vrijednost, a ne kao u prethodnom primjeru listu vrijednosti. Ukoliko podupit vraa vie od jedne vrijednosti javlja se greka u izvravanju glavnog upita. Primjer: Prikazati sve studente koji su roeni u istom mjestu kao i student x y SELECT STUDENT_ID , IME, PREZIME FROM STUDENT WHERE MJESTO_ID = (SELECT MJESTO_ID FROM STUDENT WHERE IME=X AND PREZIME=Y) ORDER BY PREZIME,IME Primjer: Izbrisati upisni list 1 semestra za studenta x y DELETE UPISNI_LIST WHERE STUDENT_ID =(SELECT STUDENT_ID FROM STUDENT WHERE IME=X AND PREZIME=Y) AND SEM=1 to je isto kao DELETE UPISNI_LIST FROM STUDENT, UPISNI_LIST WHERE ime=Darko AND prezime=Y AND STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID AND sem=1 Primjer: Prikazati sve upisne listove za studenta x y osim posljednjega. SELECT SK_GOD ,SEM FROM UPISNI_LIST WHERE STUDENT_ID = (SELECT STUDENT_ID FROM STUDENT WHERE IME=X AND PREZIME=Y) AND SEM<(SELECT MAX(SEM) FROM UPISNI_LIST WHERE STUDENT_ID=( SELECT STUDENT_ID FROM STUDENT WHERE IME=X AND PREZIME=Y)) Primjer: Za sve upisne listove 6. semestra obrazovnog programa Elektronika postaviti apsolventski status. UPDATE UPISNI_LIST SET APSOLVENT=1 WHERE SEM=6 AND OBR_PROG_ID= (SELECT OBR_PROG_ID FROM OBR_PROG WHERE OBR_PROG_IME=ELEKTRONIKA)

62

Poseban sluaj podupita sa predikatom usporedbe predstavlja primjena modifikatora ANY- bilo koji i ALL - svi. U sluaju primjene ovih modifikatora podupiti sa predikatom usporedbe mogu vraati listu vrijednosti, a ne samo jednu vrijednost. Ovi modifikatori primjenjuju se u obliku SELECT [ALL | DISTINCT] nazivi kolona, agregatne kolone FROM nazivi_tablica| join veze WHERE naziv_kolone predikat_usporedbe ANY| ALL (subquery)] Na primjer, operator > (vei od) primjenjen sa modifikatorom ALL , >ALL znai vei od svih vrijednosti koje se nalaze u listi, tj. vei od maksimalne vrijednosti iz liste. >ALL (1,2,3) znai vei od 3. Sa druge strane modifikator ANY znai bilo koji (odnosno barem jedan). > ANY znai vei od bilo kojeg, tj. vei od najmanje vrijednosti u listi. > ANY (1,2,3) znai vei od 1. Modifikator > ANY (lista vrijednosti) > ALL (lista vrijednosti) < ANY (lista vrijednosti) < ALL (lista vrijednosti) = ANY (lista vrijednosti) = ALL (lista vrijednosti) <> ALL (lista vrijednosti) Nain djelovanja >(min(lista_vrijednosti)) >(max(lista vrijednosti)) <(max(lista vrijednosti)) <(min(lista vrijednosti)) IN(lista vrijednosti) Nije dozvoljeno (greka) NOT IN (lista vrijednosti)

Primjer: Prikazati sve upisne listove za studenta x y osim posljednjega. SELECT SK_GOD ,SEM FROM UPISNI_LIST WHERE STUDENT_ID = (SELECT STUDENT_ID FROM STUDENT WHERE IME=X AND PREZIME=Y) AND SEM < ANY (SELECT SEM FROM UPISNI_LIST WHERE STUDENT_ID=( SELECT STUDENT_ID FROM STUDENT WHERE IME=X AND PREZIME=Y)) Primjer: Prikazati studente upisane u 1. sem k.god 1999/00 SELECT STUDENT_ID , IME, PREZIME FROM STUDENT WHERE STUDENT_ID = ANY (SELECT STUDENT_ID FROM UPISNI_LIST WHERE SK_GOD=1999/00 AND SEM=1) ORDER BY PREZIME,IME

Korelirani pod-upiti (Cross-corellated queries) Prethodni primjeri pod-upita bili su izraeni na nain da se podupit izvrio samo jednom i rezultati koje vraa podupit su se proslijeivali u uvjetni dio glavnog upita. U upitima koji ukljuuju korelirane podupite, izraunavanje podupita zavisi od glavnog upita, to znai da se podupit izvodi za svaki podatak glavnog upita. Primjer: SELECT * from STUDENT where mjesto_id= (SELECT mjesto_id from MJESTO where IME_MJESTA=Osijek) je primjer pod-upita koji je nezavisan u glavnom upitu, te se izvodi samo jednom. Isti rezultat moe se dobiti pomou koreliranog podupita SELECT * from STUDENT where Osijek=(SELECT IME_MJESTA from MJESTO where STUDENT.MJESTO_ID=MJESTO.MJESTO_ID) Izvravanje upita poinje od tablice STUDENT. Uzima se prvi red u tablici STUDENT, te se za tog studenta vadi vrijednost mjesto_id i proslijeuje u podupit. Podupit trai redak u tablici MJESTO gdje je
63

vrijednost mjesto_id jednaka onoj koja odgovara prvom studentu. Kad naie na takav podatak u tablici mjesto, provjerava Ime_mjesta i usporeuje sa zadanom vrijednou (Osijek), i tako za sve redove u tablici student. Primjer: Izraditi korelirani podupit kojim se ispisuju podaci o studentima koji su upisali 1 sem u kolskoj godini 1999/00. SELECT * from STUDENT where 1 IN (SELECT sem FROM upisni_list where STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID AND sk_god=1999/00)

Podupiti sa predikatom postojanja (EXISTS, NOT EXISTS) Operator EXISTS ispituje postojanje podataka uz navedene uvjete i najei je nain koritenja koreliranih podupita. U ovakvoj strukturi ugnjeenog upita, uvjetni izraz glavnog upita ispituje postojanje podataka koje vraa podupit. Uvjetni izraz glavnog upita provjerava postojanje podataka u podupitu. Podupit sa predikatom postojanja ne vraa nikakve podatke, ve daje samo rezultat TRUE ili FALSE. Primjer: Prikazati sve studente koji nemaju niti jedan upisni list. SELECT STUDENT_ID,IME, PREZIME FROM STUDENT WHERE NOT EXISTS (SELECT * FROM UPISNI_LIST WHERE STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID) Primjer: Prikazati sva mjesta u kojima je roen neki student SELECT * FROM MJESTO WHERE EXISTS (SELECT * FROM STUDENT WHERE MJESTO.MJESTO_ID=STUDENT.MJESTO_ID)

9. 15. UNIJA Operator unije (UNION) definira relacijsku operaciju unije, tj. povezuje rezultate vie upita u jedinstveni skup rezultata. Sintaksa: Upit_1 UNION [ALL] Upit_2...ORDER BY sort Pri formiranju unije mora vrijediti: - upiti iji se rezultati uniraju moraju imati jednaki broj izlaznih kolona - odgovarajue izlazne kolone u upitima koji se povezuju unijom moraju biti istog tipa podataka Primjer: Definirane su tablice T1 i T2 kao T1 a b c abc 2 4 def 3 5 ghi 4 6

T2 a ghi jkl mno b 4 5 6 c 6 7 8

gdje su kolone a, b i c definirane tipom podataka a varchar(4), b- int , c-int SELECT * from T1 UNION SELECT * from T2 a abc def ghi b 2 3 4 c 4 5 6
64

jkl mno

5 6

7 8

UNION operator uklanja duplicirane redove rezultata obaju upita. Ukoliko se eli prikaz svih redova, bez eliminacije duplikata, potrebno je navesti opciju ALL : SELECT * from T1 UNION ALL SELECT * from T2 a abc def ghi ghi jkl mno b 2 3 4 4 5 6 c 4 5 6 6 7 8

Kod primjene operatora unije, pojedinani upiti ne mogu imati svoje sortiranje (ORDER BY dio), ve je primjena ORDER BY operatora mogua nakon navoenja posljednjeg upita koji sudjeluje u uniji, i sortiranje se primjenjuje na zavrni skup rezultata (uniju). Rezultat uniranja vie upita je skup rezultata ije kolone nose naziv isti kao i kolone rezultata prvog upita koji se navodi u uniji. Primjer: SELECT a,b FROM T1 UNION SELECT a,c FROM T2 Ovakav izraz je valjan jer oba upita SELECT a,b FROM T1 i SELECT a,c FROM T2 daju rezultat u obliku dvije kolone, pri emu su odgovarajue kolone u skupovima rezultata iste po tipu podataka. Rezultat uniranja e biti tablica koja daje dvije kolone iji nazivi odgovaraju nazivu kolona koje vraa prvi upit. a abc def ghi ghi jkl mno b 2 3 4 6 7 8

Broj UNION operatora u okviru SQL izraza nije ogranien, tj. mogue je uniranje po volji velikog broja upita i njihovih rezultata. SELECT * FROM TableA UNION SELECT * FROM TableB UNION SELECT * FROM TableC

9. 16. POGLED (VIEW)

Pogledi su virtualne tablice, koje se formiraju kao posebna organizacijska jedinica u bazi podataka. Osnovne tablice postoje kao stvarne, fizike tablice u bazi podataka. One imaju svoju definiciju koja je pohranjena u sistemskom katalogu baze podataka, svoje podatke koji su pohranjeni na disku i svoje

65

indekse. Pogled (view), kao virtualna tablica , nema svoje indekse, niti datoteke s podacima, ali mu korisnik pristupa kao i svakoj drugoj tablici. Kreiranje pogleda Pogled se definira naredbom CREATE VIEW ime AS SELECT ...select query [WITH CHECK] U sklopu definicije pogleda mogue je navesti bilo koji select query, obini ili grupni uz postojea pravila u okviru SQL-a. Atributi pogleda imaju iste nazive kao i atributi tablica nad kojima je pogled definiran. Primjer:

CREATE VIEW V_UPISNI_LIST AS SELECT IME, PREZIME, MAT_BR, SEM, SK_GOD, OBR_PROG_IME, APSOLVENT FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID INNER JOIN OBR_PROG ON UPISNI_LIST.OBR_PROG_ID= OBR_PROG.OBR_PROG_ID je pogled formiran nad tablicama STUDENT, UPISNI_LIST i OBR_PROG, sa izlaznim atributima IME, PREZIME, MAT_BR,SEM,SK_GOD, OBR_PROG_IME i APSOLVENT. Ovakvom pogledu mogue je pristupati kao i svakoj drugoj tablici: SELECT * FROM V_UPISNI_LIST WHERE IME=X AND PREZIME=Y ORDER BY SK_GOD, SEM SELECT IME, PREZIME FROM V_UPISNI_LIST WHERE SEM=1 AND SK_GOD=1999/00 ORDER BY PREZIME, IME

Preimenovanje atributa pogleda Prilikom uobiajenog definiranja pogleda, njegovi atributi imaju iste nazive kao i atributi tablica nad kojima je pogled definiran. Ako postoji potreba za promjenom naziva pojedinih atributa, to se moe ostvariti na tri naina: 1. Uobiajeno pravilo promjene naziva atributa u SELECT upitima tipa novi_naziv=atribut Primjer: CREATE VIEW V_STUDENTI AS SELECT IME, PREZIME, SK_GOD,UPISANI_SEMESTAR=SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID =UPISNI_LIST.STUDENT_ID
66

2. Koritenjem izraza AS u obliku: atribut AS novi_naziv Primjer: CREATE VIEW V_STUDENTI AS SELECT IME, PREZIME, SK_GOD,SEM AS UPISANI_SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID =UPISNI_LIST.STUDENT_ID 3. Navoenjem novih naziva atributa u definiciji pogleda u obliku CREATE VIEW naziv_pogleda (nazivi atributa) AS Primjer: CREATE VIEW V_STUDENTI (IME, PREZIME, SK_GOD, UPISANI_SEM) AS SELECT IME, PREZIME, SK_GOD, SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID =UPISNI_LIST.STUDENT_ID

Auriranje, unos i brisanje podataka u pogledu Za razliku od stvarnih tablica, mogunosti promjene podataka u pogledu podlijeu znatnim ogranienjima. Mijenjanje, unos i brisanje podataka u pogledu nije dozvoljeno - ako je pogled formiran dohvaanjem podataka iz vie od jedne tablice - ako je pogled formiran grupnim upitom (group by) - ako je bilo koji atribut pogleda stvoren pomou agregatne funkcije - ako se pri formiranju pogleda koristi opcija DISTINCT - ako je pogled formiran kao UNION query - ako je pogled formiran pomou sloenog upita sa podupitom Tako definirana ogranienja ine mogunosti promjene podataka u pogledu vrlo ogranienim. Dodatna ogranienja mogu se aktivirati koritenjem izraza WITH CHECK u definiciji pogleda. Pomou ove opcije provjerava se da li se unosom ili promjenom podataka naruava struktura pogleda, tj. da li promjena ili unos podataka zadovoljava uvjet naveden u upitu. Ako se opcija WITH CHECK ne navede u pogled je mogue unijeti podatke koji naruavaju strukturu pogleda Primjer: CREATE VIEW V1_STUDENT AS SELECT IME, PREZIME, ROD_DAT FROM STUDENT WHERE ROD_DAT>01.01.1980 je pogled koji prikazuje sve studente koji su roeni nakon 1. sijenja 1980. Ovakav pogled moe se aurirati i brisati, budui zadovoljava sva gore navedena pravila. INSERT V1_STUDENT VALUES ( Z,D,01.05.1979) to je isto kao INSERT STUDENT(IME,PREZIME,ROD_DAT) VALUES ( Z,D,01.05.1979)

Primjer: CREATE VIEW V1_STUDENT AS SELECT IME, PREZIME, ROD_DAT FROM STUDENT WHERE ROD_DAT>01.01.1980 WITH CHECK Uvoenjem opcije provjere (WITH CHECK) instrukcija INSERT V1_STUDENT VALUES ( Z,D,01.05.1979) nee dati rezultat jer novi podatak koji se unosi ne zadovoljava uvjet ROD_DAT>01.01.1980 Ako se u tablici STUDENT nalazi podatak sa vrijednostima atributa
67

IME=P, PREZIME=R , ROD_DAT=01.12.1980 instrukcija UPDATE V1_STUDENT SET ROD_DAT=01.11.1980 where IME=P AND PREZIME=R moe se izvesti jer je zadovoljeno ogranienje ROD_DAT>01.01.1980

Uklanjanje pogleda Pogled se uklanja iz baze podataka naredbom DROP VIEW naziv_pogleda Primjer: DROP VIEW V1_STUDENT

9.17. OSNOVE VIEKORISNIKOG RADA Zbog veeg broja korisnika koji pristupaju bazama podataka, administrator baze ima zadatak ograniiti prava pristupa i koritenja podataka. Osnovni razlozi ogranienja prava pristupa podacima u bazi su: mogunosti neovlatenog pristupa podacima nestruno rukovanje podacima mogue zloupotrebe

DBA- Database administrator ( Administrator baze podataka) , kao kljuna osoba u odravanju baze podataka je korisnik najvieg prioriteta, koji ima sva prava pristupa. Ovisno o zad acima koje obavljaju pojedini korisnici DBA formira nove korisnike u bazi ADD USER ime_korisnika: ifra ime_korisnika (login) korisniko ime koje mora biti jedinstveno u bazi podataka, tj. nije dozvoljeno da postoje dva razliita korinika sa istim imenom ifra (password) sigurnosna (tajna) ifra, kojom svaki korisnik potvruje svoj identitet

Dodjeljivanje privilegija (prava) Prava pristupa pojedinim korisnicima dodjeljuju se naredbom GRANT nazivi_prava ON naziv_objekta TO ime_korisnika nazivi_prava lista prava pristupa podacima SELECT pravo itanja podataka UPDATE pravo promjene (auriranja) podataka DELETE pravo brisanja podataka INSERT - pravo unosa podataka naziv_objekta ime objekta (tablice ili pogleda) u bazi na koji se prava odnose ime_korisnika naziv korisnika kojem se prava dodjeljuju

Primjeri: GRANT SELECT, UPDATE ON STUDENT TO K1 Korisniku K1 dodjeljuje se pravo itanja i promjene podataka u tablici STUDENT GRANT SELECT, DELETE ON STUDENT TO K2 Korisniku K2 dodjeljuje se pravo itanja i brisanja podataka u tablici STUDENT
68

Suavanje pojedinih prava na dijelove tablica i pogleda Prava promjene i unosa podataka mogue je suziti na pojedine atribute (kolone) u tablici INSERT (lista_atributa) pravo unosa podataka u samo odreene kolone UPDATE (lista_atributa) pravo promjene podataka u navedenim kolonama tablice Primjer: GRANT SELECT, UPDATE(Datum, MjestoId) ON STUDENT TO K3 Korisniku K3 dodjeljuje se pravo itanja i pravo promjene datuma i mjesta roenja u tablici STUDENT

Kaskadno dodjeljivanje privilegija Administrator baze podataka moe pojedinim korisnicima, uz dodjeljivanje prava dati mogunost proslijeivanja tih prava drugim korisnicima. GRANT nazivi_prava ON naziv_objekta TO ime_korisnika WITH GRANT OPTION Dodjeljivanjem prava uz opciju WITH GRANT OPTION, korisniku se daje mogunost da po potrebi ta prava proslijedi drugima. Primjer: DBA: GRANT SELECT, UPDATE ON STUDENT TO K1 WITH GRANT OPTION K1 : GRANT SELECT ON STUDENT TO K2 Korisnik K1 proslijeuje svoje pravo itanja podataka korisniku K2

Opoziv (uklanjanje prava) Prethodno dodjeljena prava korisnicima mogu se ukloniti naredbom REVOKE nazivi_prava ON naziv_objekta FROM ime_korisnika Primjer: REVOKE UPDATE ON STUDENT FROM K1 Prilikom uklanjanja prava mogue je koritenje dodatnih opcija CASCADE ili RESTRICT Primjer: REVOKE UPDATE ON STUDENT FROM K1 CASCADE Pravo promjene podataka u tablici STUDENT oduzima se korisniku K1, ali i svima onima kojima je korisnik K1 to pravo proslijedio. Primjer: REVOKE UPDATE ON STUDENT FROM K1 RESTRICT Pravo promjene podataka u tablici STUDENT oduzima se korisniku K1 samo u sluaju da on to pravo nije nikome proslijedio. Ako je K1 proslijedio pravo UPDATE prikazuju se podaci o korisnicima koji su to pravo naslijedili.

Ponitavanje prava naslijeivanja Pravo daljnjeg dodijeljivanja privilegija, koje se daje sa opcijom WITH GRANT OPTION mogue je ponititi naredbom REVOKE GRANT OPTION FOR nazivi_prava ON naziv_objekta FROM ime_korisnika

69

Primjer: REVOKE GRANT OPTION FOR UPDATE ON STUDENT FROM K1 Korisniku K1 se oduzima pravo da dijeli UPDATE privilegiju drugima, a ujedno se briu sva UPDATE prava koje je K1 prethodno dodijelio. Pri tome UPDATE pravo samog korisnika K1 ostaje sauvano.

Grupiranje korisnika Radi lakeg i breg dodijeljivanja prava korisnicima koji rade na istim poslovima i imaju sline potrebe za pristup pojedinim podacima, korisnici se povezuju u grupe CREATE GROUP naziv_grupe FOR USERS (lista_korisnika) Primjer: CREATE GROUP KORISNICI FOR USERS (K1, K2, K3) Dodjeljivanjem prava grupi, prava se dodijeljuju svim korisnicima koji su lanovi te grupe GRANT SELECT, UPDATE ON STUDENT TO KORISNICI Grupa korisnika moe se naknadno mijenjati dodavanjem novih ili iskljuenjem nekog od postojeih lanova te grupe ALTER GROUP naziv_grupe ADD|DROP USERS (lista_korisnika) Primjer: ALTER GROUP KORISNICI ADD USERS (K6) ALTER GROUP KORISNICI DROP USERS (K2,K3)

9. 18. OBRADA SQL UPITA Kada baza podataka primi SQL zahtjev za obradu odreenih podataka, mehanizam za izvrenje upita (Database Engine) prolazi kroz niz koraka obrade zahtjeva (query compilation steps), prije neposrednog izvrenja. U prvoj fazi obrade (syntax checking phase), sistem prima upit i provjerava ispravnost sintakse SQL izraza. Izraz mora biti formiran u skladu sa pravilima SQL sintakse, te objekti koji se pozivaju u izrazu moraju postojati u bazi. Druga faza podrazumijeva provjeru prava pristupa pojedinih korisnika, tj. provjerava se da li korisnik koji je postavio upit ima valjano pravo pristupa na objekte koji se pozivaju u SQL upitu. Poto su prve dvije faze zavrene, nastupa faza optimizacije upita (query optimization phase). Optimizacija SQL upita podrazumijeva odabir najboljeg i najbreg naina za izvoenje SQL upita, bilo da se radi o dohvatu podataka ili njihovoj promijeni (auriranju). U suvremenim relacijskim sustavima postoji nuna potreba za optimiranjem SQL upita. Pretpostavimo upit: SELECT IME, PREZIME FROM STUDENT , UPISNI_LIST WHERE STUDENT.STUDENT_ID =UPISNI_LIST.STUDENT_ID AND SEM=1 AND SK_GOD=1999/00 Pretpostavka je da se u tablici STUDENT nalazi 1000 studenata, a u tablici upisni list 3000 upisnih listova, od ega ih je 200 u 1. semestru kolske godine 1999/00. Neka se upit izraunava bez ikakve optimizacije. Mogui tok izvoenja ovakvog upita bio bi slijedei: 1. Izraunava se Kartezijev produkt tablica STUDENT i UPISNI_LIST, tj. svaki student sa svakim upisnim listom. Dobijeni meurezultat sadri 3.000.000 redova. S obzirom da je veliina radne memorije ograniena, sustav ne moe drati toliku koliinu podataka u radnoj memoriji, ve ih pohranjuje na disk. 2. Dobijeni Kartezijev produkt reducira se WHERE uvjetom. Ponovno je potrebno uitati 3.000.000 redova sa diska u radnu memoriju i nad svakim redom provesti WHERE uvjet. Sada rezultat sadri samo 200 redova, koji se projiciraju nad atributima IME i PREZIME.

70

Optimizacijom upita tijek izvravanja bio bi slijedei. 1. Najprije se izvrava restrikcija tablice UPISNI_LIST i izdvajaju se samo oni upisni listovi koji zadovoljavaju uvjetni dio izraza SEM=1 AND SK_GOD=1999/00. Dobijeni meurezultat sadri 200 redova i moe se privremeno drati u radnoj memoriji. 2. Provodi se spajanje dobijenog meurezultata sa tablicom student na temelju izraza STUDENT.STUDENT_ID =UPISNI_LIST.STUDENT_ID. Iz tablice STUDENT dohvaa se 1000 redova a dobijeni rezultat spajanja sadri 200 redova. 3. Rezultat se projicira nad atributima IME i PREZIME Oito je da se jedan upit moe obraditi na vie moguih naina. Pri tome pojedine metode obrade upita troe vie raunarskih resursa (memorije, ulazno/izlaznih operacija itd.). Radi brzine izvoenja upita i racionalnog koritenja resursa pri izvoenju upita bitna je optimizacija tj. odabir najpovoljnijeg naina. Suvremeni sustavi baza podataka rjeavaju problem optimizacije upita automatski, tj. optimizacijski mehanizam ugraen je u sustav baze podataka.

9.19. METODE POVEZIVANJA TABLICA


Povezivanjem (join) dvaju tablica podrazumijevamo proces kombiniranja tj. povezivanja redova jedne tablice sa redovima druge tablice, da bi se dobili rezultati postavljenog SQL upita. Bez obzira da li je upitni izraz formuliran u obliku Kartezijevog produkta ili join veze, interni mehanizmi baze podataka aktiviraju istovjetne postupke. Proces povezivanja dvaju tablica odvija se kroz dva koraka. U prvom,
71

pristupa se redovima u jednoj od zadanih tablica, koja se uobiajeno naziva vanjska (outer).Drugi korak podrazumijeva pristup drugoj tablici (unutranjoj inner), pri emu se redovi druge tablice kombiniraju sa dobijenim meurezultatima iz prvog koraka. Rezultat koji se dobije je sloena tablica, koja sadrava sve redove proizale iz ovakvog povezivanja. METODA UGNJEENE PETLJE (NESTED LOOP JOIN) Pogledajmo primjer slijedeeg upita SELECT T1.C1, T1.C2, T2.C3, T2.C4 from T1,T2 where T1.C1=5 and T1.C2=T2.C3 to je isto kao i izraz SELECT T1.C1, T1.C2, T2.C3, T2.C4 from T1 INNER JOIN T2 ON T1.C2=T2.C3 where T1.C1=5 Za realizaciju veze izmeu ovih tablica smatrajmo tablicu T1 vanjskom (outer table). Prvi korak ovog upita podrazumijeva izdvajanje redova tablice T1 koji zadovoljavaju uvjetni dio izraza T1.C1=5. Izdvajanjem ovih redova dobija se meurezultat koji se pohranjuje u privremenu tablicu (IT1). Nakon to je dobijen meurezultat, za svaki tako izdvojeni redak, pristupa se podacima u tablici T2. IT1 C1 5 5 5 5 5 5 5 T2 C3 17 19 15 19 12 14 13

C2 19 13 15 17 12 19 18

C4 22 24 28 27 29 31 25

Interni pokaziva u tablici IT1 nalazi se na prvom redku, te se izdvaja vrijednost atributa po kojem se vri povezivanje (C2). Ta vrijednost je 19. Zatim se redom pretrauju redovi u tablici T2, te se izdvajaju oni redovi za koje vrijedi da je T2.C3=19. Kada se zavri pretraivanje T2, pokaziva u tablici IT1 pomie se na slijedei redak, ponovno se utvruje vrijednost atributa C2 (13), te se ponovno pretrauje tablica T2 i trae oni redovi za koje vrijedi da je T2.C3=13 itd. U opem sluaju algoritam povezivanja metodom ugnjeene petlje moe se prikazati SELECT * INTO IT1 FROM T1 WHERE T1.C1=5 (m redova) SELECT m=COUNT(*) FROM IT1 SELECT n=COUNT(*) FROM T2 FOR I=1 TO m P1=I FOR J=1 TO n P2=J IF P1->C2 = P2-> C3 THEN ISPIS IT1.C1,IT1.C2, T2.C3,T2.C4 NEXT J NEXT I gdje je P1 pokaziva u tablici IT1, a P2 pokaziva u tablici T2. MERGE JOIN METODA Izvravanje ove metoda sastoji se od dva koraka. Prvi korak u realizaciji podrazumijeva izdvajanje redova koji zadovoljavaju uvjetni izraz, ali u tono ureenom redoslijedu, sortirano po vrijednostima u kolonama preko kojih se vri spajanje. Dakle nakon izdvajanja redova koji zadovoljavaju uvjetni izraz, obje tablice se sortitraju po vrijednosti join kolona .
72

IT1 C1 5 5 5 5 5 5 5

C2 12 13 15 17 18 19 19

IT2 C3 12 13 14 15 17 19 19

C4 29 25 31 28 22 24 27

Za realizaciju veze izmeu tablica, svakoj tablici dodijeljuje se interni pokaziva, koji je na poetku postvaljen na prvi redak u tablici. Za tekui poloaj pokazivaa u svakoj tablici usporeuju se vrijednosti u kolonama po kojima se vri spajanje, te se pokazivai pomiu prema dnu tablica. SELECT * INTO IT1 FROM T1 WHERE C1=5 ORDER BY C2 SELECT * INTO IT2 FROM T2 ORDER BY C3 P1=IT1(1) P2=IT2(1) PETLJA: WHILE (TRUE) { WHILE (P1C2 >P2C3) { P2++ IF (P2 OUT ) EXIT PETLJA; } WHILE (P1C2 < P2C3) { P1++ IF (P1 OUT ) EXIT PETLJA; } IF (P1C2 = P2C3) { MEMP=P2; WHILE (P1C2 = P2C3) { ISPIS IT1.C1.IT1.C2, IT2.C3, IT2.C4 ; P2++; } } P1++; IF( P1 OUT) EXIT PETLJA; IF (P1C2= MEMPC3) P2=MEMP; }

10. TRANSAKCIJE-(TRANSACTIONS) Osnovna namjena suvremenih DBMS sustava za rukovanje bazama podataka je omoguavanje istovremenog rada veoj grupi korisnika nad istom bazom podataka. Pri tome jedni unose podatke, drugi ih auriraju, a trei samo pretrauju. Temeljem takvog rada, esti su sluajevi da vie korisnika dohvaa
73

istu grupu podataka. Pri tome korisnik ima dojam da samo on pristupa podacima, neovisno od ostalih korisnika. Transakcija je skup SQL instrukcija koje se izvravaju zajedno. Transakcija poinje oznakom BEGIN TRAN, a zavrava pozitivnim ishodom (izvrenjem transakcije) COMMIT TRAN, ili negativnim ishodom (ponitenjem transakcije) - ROLLBACK TRAN. Transakcija se sastoji od vie SQL instrukcija. Transakcija i ma pozitivan ishod samo ako se sve instrukcije koje su obuhvaene transakcijom izvre bez greke. Primjer: head (STUDENT)={student_id, ime, prezime}, gdje je student_id =PK(STUDENT), IDENTITY head(UPISNI_LIST)={ulist_id, student_id, sem,sk_god}, gdje je ulist_id=PK(UPISNI_LIST), IDENTITY BEGIN TRAN insert into STUDENT values (X,Y) st=@IDENTITY if st IS NULL ROLLBACK TRAN insert into UPISNI_LIST values (st, 1, 1999/00) ul=@IDENTITY if ul IS NULL ROLLBACK TRAN COMMIT TRAN Sve instrukcije obuhvaene transakcijom izvravaju se po principu sve ili nita, tj. u sluaju prekida transakcije zbog greke u nekoj od instrukcija, ponitavaju se sve akcije koje su transakcijom obuhvaene. Prilikom pokretanja transakcije sve akcije koje su njom obuhvaene, odvijaju se u posebnom dijelu baze, koji se naziva transakcijski log (transaction log). U sluaju uspjenog zavretka transakcije, rezultati tj. podaci koji proizlaze iz transakcije, zapisuju se fiziki na disk u bazu podataka. To znai da su rezultati koje je transakcija dala, vidljivi tek nakon to se stvarno fiziki zapiu u bazu na disku. Znaenje transakcijskog log-a Gore opisani princip izvoenja transakcija eliminira neke mogue probleme koji bi se mogli javiti, kod izravnog djelovanja pojedinih djelova transakcije na samim podacima u bazi. Primjer: BEGIN TRAN UPDATE P1 ... ... ROLLBACK TRAN Problem pamenja prethodnog stanja Kada bi pojedine SQL instrukcije djelovale izravno na podatke u tablicama, javio bi se problem pamenja prethodnog stanja. U gornjoj transakciji instrukcija UPDATE P1, mijenja odreeni skup podataka. Kada bi ona djelovala izravno na podatke, odmah bi izazvala promjene podataka na disku. Ako se ovakva transakcija u svom daljnjem tijeku zavri sa ROLLBACK-om, potrebno je ponititi promjene koje je transakcija izazvala tj. vratiti stanje prije instrukcije UPDATE P1, to znai da bi se moralo pamtiti i pohranjivati podatke kakvi su bili prije te instrukcije.

Problem zavisnosti o nepotvrenoj promjeni Promotrimo primjer meuzavisnosti dvaju transakcija na slici 17. Transakcija T1 vrijeme Transakcija T2
74

AURIRANJE P1 ----ROLLBACK

t1 t2 t3

-----SELECT P1

Slika 17. Zavisnost podataka o nepotvrenoj promjeni Transakcija T1 u prvom koraku aurira podatke P1. Kada bi ovi podaci bili odmah fiziki promijenjeni u tablici, tu promijenu mogli bi vidjeti i drugi korisnici. U trenutku t2 nastupa transakcija T2, koja ita izmjenjene podatke P1. Transakcija T1 izvrava se dalje i zavrava ROLLBACKOM, to znai da se sve akcije te transakcije ponitavaju, pa podaci P1 ostaju u stanju prije promjene. U ovom sluaju P1 bi proitao krive podatke!

Uloga transakcijskog log-a kod sistemskih prekida Raunala na kojima se nalaze baze podataka podlona su sistemskim prekidima (tzv. soft crash). Jedan od estih tipova sistemskih prekida je gubitak napajanja. Nestanak struje se moe dogoditi u trenutku izvravanja neke transakcije, ili u trenutku kad se rezultati neke transakcije zapisuju u bazu podataka na disk. Kako znati gdje je sustav stao, tj. to je od tekuih operacija izvreno a to nije?
Vrijeme

Tf

T1 T2 T3 T4

checkpoint

Slika 18. Stanje transakcija u transakcijskom logu Stanje izvravanja svih transakcija biljei se u transakcijskom log-u (Slika 18). Nakon odreenog perioda sustav uvodi tzv. kontrolne toke (checkpoint). U trenutku kada nastupa checkpoint, pokree se fiziki zapis podataka u tablicu na disku za sve transakcije koje su obavljene u log-u, a iji sadraj nije jo zapisan u bazu. Sve transakcije koje su u tijeku u trenutku uzimanja checkpointa, pamte se u posebnoj checkpoint datoteci. U sluaju prekida u sustavu, nakon ponovnog pokretanja, sustav ulazi u reim oporavka (recovery). Oporavak poinje pregledom checkpoint datoteke i ustanovljavanjem koje su transakcije bile u tijeku. Nakon toga slijedi prijelaz u transakcijski log, gdje poinje pregled onih transakcija koje su zabiljeene u checkpoint logu, kao i svih kasnijih. Transakcije koje su obavljene u transakcijskom logu, a njihov rezultat nije zapisan u tablice, pokreu se ponovo (REDO) , a one koje u trenutku prekida nisu bile dovrene uklanjaju se (UNDO). Primjer: Promatra se stanje izvravanja transakcija u vremenskom periodu prema slici 18. Nastupanjem kontrolne toke (checkpoint), rezultati svih zavrenih transakcija (a to je u ovom sluaju samo T1) zapisuju se fiziki u tablice baze podataka. U checkpoint datoteku pohranjuju se podaci o transakcijama koje su u trenutku uzimanja kontrolne toke bile u izvravanju (T2). Pretpostavka je da sistemski prekid nastupa u trenutku Tf. Transakcije T2 i T4 jo uvijek nisu zavrene, dok je transakcija T3 izvrena u transakcijskom
75

logu, ali je neizvjesno da li je njezin sadraj zapisan u bazu. Kod postupka opora vka, sustav provjerava checkpoint datoteku i utvruje da je u trenutku posljednje kontrole log-a u tijeku bila transakcija T2. Zatim prelazi u transakcijski log, te kontrolira stanje transakcije T2 i onih koje su zapoete poslije T2 (T3 i T4). Budui transakcije T2 i T4 nisu zavrene u transakcijskom logu, one se ponitavaju, a transakcija T3 se ponavlja. Zakljuavanje podataka u bazi Svaka transakcija obavlja se u relativnoj izolaciji u odnosu na druge transakcije, tj. vrijedi pravilo da nitko drugi ne moe pristupiti podacima koje jedan korisnik mijenja ili brie, ali podatke koje jedan korisnik ita mogu itati i drugi korisnici, jer samo itanje podataka ne donosi nikakve promjene na podacima. Ovakav sustav zatite pristupa podacima realizira se zakljuavanjem onih dijelova baze podataka nad kojima se provode pojedine operacije, tj. postavljanjem lokota (lock). Sustavi baza podataka prepoznaju dvije vrste lokota : djeljivi lokot (shared), koji se postavlja na podacima koji se samo iitavaju (select), i ekskluzivni lokot (exclusive), koji se postavlja na podacima koji se obrauju. Lokot nad odreenim podacima postavlja sustav baze podataka automatski u zavisnosti o tipu akcije koja se nad podacima provodi. Kada neka transakcija T2 zahtijeva pristup podacima za obradu, ona ujedno trai lokot nad tim podacima.Ukoliko iste podatke obrauje neka druga transakcija T1, ona ve dri lokot nad tim podacima. Ishod ovakvog stanja zavisi od tipa obrade nad podacima koje pojedine transakcije vre. Slika 19. prikazuje meusobne veze meu lokotima, u redovima su prikazani lokoti koje dri transakcija T1, a po stupcima lokoti koje zahtjeva transakcija T2.

T1\T2 X S

X N N

S N D

Slika 19. Ponaanje sustava u meudjelovanju lokota Iz toga je vidljivo da dvije transakcije mogu pristupiti istim podacima jedino ako obje transakcije iskljuivo itaju podatke. Problem gubitka auriranih informacija Meudjelovanje dvaju transakcija i nunost primjene lokota moe se uoiti na slijedeem primjeru dvaju transakcija: T1 dohvat P1 ---auriranje P1 COMMIT vrijeme t1 t2 t3 t4 t5 T2 ---dohvat P1 ----auriranje P1 COMMIT

Primjer pokazuje meudjelovanje dvaju transakcije, gdje T1 mijenja podatke P1, a T2 trai pristup istim podacima dok T1 jo nije zavren. Transakcija T1 primila je podatke P1 u obradu, i izvrila auriranje podataka P1. U trenutku t2, pristup istim podacima trai T2, ali T1 jo uvijek traje, to znai da promjena podataka P1 jo nije zapisana u odgovarajuu tablicu, pa T2 ita prethodno stanje podataka P1 bez promjena koje je izvrila transakcija T1. Tek u trenutku t4 zavrava T1 i rezultati transakcije se zapisuju u tablicu. U trenutku t5 zavrava transakcija T2 koja svoje rezultate zapisuje fiziki u tablicu, te ponitava promjene koje je izvrila transakcija T1. Rjeenje ovog problema primjenom lokota (lock)

76

T1 dohvat P1 - postavlja S lock ---auriranje P1 trai X lock - ne dobija ga i eka ekanje ekanje

vrijeme t1 t2 t3

T2 ---dohvat P1 - postavlja S lock ---auriranje P1 trai X lock - ne dobija ga i eka ekanje

t4 t5

U trenutku t1 transakcija T1 dohvaa podatke P1 i na njima postavlja djeljivi lokot. U trenutku t2 istim podacima pristupa transakcija T2 i postavlja svoj djeljivi lokot. Transakcija T1 u trenutku t3 treba izvriti promjenu na podacima, te trai pretvaranje svog djeljivog lokota u ekskluzivni (X -lock). Taj lokot ne dobija budui transakcija T2 nad istim podacima dri S-lock. Transakcija T2 takoer trai X-lock, ali bez uspjeha jer postoji S-lock od strane transakcije T1. Ne dolazi do gubitka informacija, ali obje transakcije prelaze u stanje ekanja. Ova pojava se naziva deadlock. Dvije transakcije svojim zahtjevima blokiraju jedna drugu, te onemoguavaju pristup podacima. Sustavi baza podataka imaju ugraene mehanizme za detekciju deadlock-a. Uobiajeni nain razrjeavanja ovakve situacije je prekid jedne od transakcija, to drugoj omoguava normalan nastavak i izvravanje do kraja. Razumljivo deadlock nije zadovoljavajue rjeenje meudjelovanja transakcija. Umjesto toga interni mehanizmi baze podataka vre prilagoavanje lokota strukturi same transakcije. T1 dohvat P1 - postavlja X lock ---auriranje P1 COMMIT oslobaa lokot --vrijeme t1 t2 T2 ---dohvat P1 trai S lock- ne dobija ga i eka ekanje ekanje dohvat P1- dobija S lock

t3 t4 t5

Djelovanje lokota razrjeava ovakve situacije, jer omoguava da se promjene na podacima odvijaju u relativnoj izolaciji, pa u navedenom sluaju, transakcija T2 moe pristupiti podacima P1, tek nakon to T1 izvri promjenu, a u tom sluaju transakcija T2, ita stvarne podatke, dakle nakon njihove promjene. Nivoi zakljuavanja Sustav moe postaviti lokot ili na stranicu memorije (page) ili na cijelu tablicu. Kad god je to mogue, postavlja se lokot na stranicu. Razlog je u injenici da takvo postavljanje lokota ini podatke dostupnijim korisnicima (istovremeno vie korisnika moe pristupiti podacima iz iste tablice, ali sa razliitih stranica), a i dohvat podataka je bri.

11. HIJERARHIJSKI MODEL PODATAKA


Hijerarhijski model baze podataka i sustavi za upravljanje pojavili su se na tritu potkraj 60-ih godina prolog stoljea, a neki od tih sustava jo i danas su u upotrebi. Zanimljivo je da ove baze nisu nastale na temelju prethodno definiranog modela, kao to je to sluaj sa relacijskim bazama.Umjesto toga osnove

77

hijerahijskog modela razvijene su na osnovu ve implementiranog IBM -ovog IMS sustava (Information Managment System).

STRUKTURA HIJERARHIJSKOG MODELA PODATAKA Hijerarhijski model podataka baziran je na slogovima (record) koji se sastoje od polja (field). Ureeni skup slogova u hijerarhijskom modelu naziva se stablo (three), a baza podataka sastavljena je od ureenog skupa stabala. Svako stablo ima jedan osnovni slog (root) i nula ili vie slogova podstabla. Odnos izmeu tih slogova naziva se odnos roditelj dijete (parent-child relationship). Jedan slog kao roditelj (parent) moe imati vie slogova djece (child), ali jedan child slog moe imati samo jedan parent slog. Primjer: Baza podataka obrazovanja Baza podataka opisuje podatke o odravanju teajeva. Svaki teaj ima svoje osnovne podatke, te moe zahtjevati odreeno predznanje, tj. preduvjet za pohaanje jednog teaja moe biti da je polaznik zavrio neki drugi teaj. Baza sadri podatke : za svaki teaj: ifru i naziv teaja za svaki teaj koji ima uvjet o potrebnom predznanju, ifru teaja koji mora biti prethodno zavren. za svaki termin odravanja tog teaja: datum, mjesto, podaci o nastavniku koji odrava teaj, te podaci o polaznicima teaja za svakog nastavnika: ifra, prezime i ime za svakog polaznika: ifra polaznika, prezime, ime i ocjena

Slogovi kojima se opisuje ovakva baza podataka su: TECAJ s poljima TECAJID i NASLOV ---- TECAJ(TECAJID,NASLOV) PREDUVJET(PREDUVJETID) TERMIN(TERMINID, DATUM,MJESTO) NASTAVNIK(NASTID,PREZIME,IME) POLAZNIK(POLID, PREZIME,IME,OCJENA)
TECAJID PREDUVJET PREDUVJETID TECAJ NASLOV

TERMIN TERMINID

DATUM

MJESTO

NASTAVNIK NASTID IME

PREZIME

POLID

POLAZNIK IME PREZIME

OCJENA

Baza podataka ima osnovni slog TECAJ koji ima dva podstabla TERMIN i PREDUVJET. Slog podstablo PREDUVJET je root-only tj. nema svoje podslogove, a slog TERMIN ima dva child-sloga NASTAVNIK i POLAZNIK. Za svaku pojavu parent sloga postoji n child slogova , gdje vrijedi (n0). Veza izmeu parent i child sloga naziva se link. Ovdje se moe uoiti razlika u odnosu na relacijski model: podaci koji su u relacijs koj bazi povezani pomou stranih kljueva, u hijerarhijskoj bazi su povezani preko veze roditelj -dijete ( parent-child). Dakle veza izmeu slogova TECAJ i TERMIN nije definirana posebnim poljem TECAJID (koje bi predstavljalo strani klju), ve vezom TECAJ-TERMIN. Struktura IMS sustava Jezik za manipulaciju podacima u hijerarhijskoj bazi sastoji se od skupa operatora pomou kojih se obrauju podaci u stablima. Operatori ukljuuju:

78

operator za lociranje pojedinog stabla u bazi, tj. operator za lociranje osnovnog root sloga za pojedino stablo operator za pomicanje s tekueg stabla na slijedee operator za pomicanje sa sloga na slog unutar stabla, hijerarhijski prema gore ili prema dolje operator unosa podataka na tono specificirano mjesto u strukturi stabla operator brisanja pojedinog sloga u stablu

Cjelovitost i konzistentnost podataka, tj. njihov integritet u hijerarhijskom modelu, zasnovan je na samoj koncepciji modela. Postoje odreena pravila definirana modelom, koja moraju zadovoljavati svi podaci: - niti jedan slog ne moe postojati kao child slog ako za njega ne postoji parent slog - u sluaju brisanja parent sloga, sustav automatski brie sve child slogove

Definicija podataka IMS sustav koristi tri osnovna elementa za definiciju podataka: DBD (Database description) element za opis baze podataka, i definiranje strukture baze. U gruboj aproksimaciji moe se rei da DBD odgovara relacijskoj naredbi CREATE TABLE PCB (Program Communication Block) blok za kreiranje pogleda kojima korisnik pristupa. Ekvivalent relacijskoj instrukciji CREATE VIEW. Naredbe za definiciju sloga (SEGM) i polja (FIELD)

Prethodno opisana baza podataka mogla bi se prikazati slijedeom strukturom 1. DBD 2. SEGM 3. FIELD 4. FIELD 5. SEGM 6. FIELD 7. SEGM 8. FIELD 9. FIELD 10.FIELD 11.SEGM 12.FIELD 13.FIELD 14.FIELD 15.SEGM 16.FIELD 13.FIELD 14.FIELD 15.FIELD NAME=TECAJDB NAME=TECAJ, BYTES=36 NAME=(TECAJID, SEQ), BYTES=3, START=1 NAME=NASLOV, BYTES=33, START=4 NAME=PREDUVJET, PARENT=TECAJ, BYTES=3 NAME=(PREDUVJETID,SEQ), BYTES=3, START=1 NAME=TERMIN, PARENT=TECAJ, BYTES=21 NAME=(TERMINID,SEQ), BYTES=3, START=1 NAME=DATUM, BYTES=6, START=4 NAME=MJESTO, BYTES=12, START=10 NAME=NASTAVNIK, PARENT=TERMIN, BYTES=27 NAME=(NASTID,SEQ), BYTES=3, START=1 NAME=IME, BYTES=12, START=4 NAME=PREZIME, BYTES=12, START=16 NAME=POLAZNIK, PARENT=TERMIN, BYTES=28 NAME=(POLID,SEQ), BYTES=3, START=1 NAME=IME, BYTES=12, START=4 NAME=PREZIME, BYTES=12, START=16 NAME=OCJENA, BYTES=1, START=28

IMS ne podrava specifine tipove podataka poput onih koji se definiraju u relacijskom modelu, ve sva polja smatra bajt stringovima (nizovima bajtova). Stoga se pri definiciji pojedinog polja navodi samo njegova duljina u bajtovima.
Korisniki pogled je dio hijerarhije baze podataka slian konceptu pogleda u relacijskoj bazi. Primjer: 1. PCB 2. SENSEG 3. SENSEG DBDNAME=VTECAJ NAME=TECAJ, PROCOPT=G NAME=TERMIN, PARENT=TECAJ, PROCOPT=G
79

4. SENFLD 5. SENFLD 6. SENSEG

NAME=TERMINID, START=1 NAME=DATUM, START=4 NAME=POLAZNIK, PARENT=TERMIN, PROCOPT=G

Manipulacija podacima u IMS sustavu IMS ima vlastiti jezik za manipulaciju podacima (data manipulation language), koji se pomou obinih poziva ukljuuje u programe pisane u nekom od jezika tree generacije (COBOL, PL/I). Primjer jednog poziva iz PL/I jezika izgledao bi: CALL PLITDLI (5, GU, VTECAJ, OUT, TECAJ WHERE NASLOV=Fizika,POLAZNIK WHERE OCJENA=4) gdje je znaenje pojedinih argumenta 5 ukupan broj argumenata u pozivu instrukcije GU Get unique, dobavlja prvi slog koji zadovoljava postavljene kriterije VTECAJ struktura (pogled) u kojoj se pristupa podacima OUT struktura koja prihvaa podatke ostali argumenti predstavljaju uvjete temeljem kojih se pristupa podacima

Strukture pohrane podataka Hijerarhijski sustav podrava dvije osnovne strukture pohrane (spremanja ) podataka. 1. HSAM hierarhic sequential access method direktna metoda pristupa, cijela baza je predstavljena kontinuirano, kao na magnetskoj traci (Slika 20). Dapae, est sluaj u praksi bi o je da su ovakve baze pohranjivane na magnetsku traku.
TECAJ M11 POLAZNIK3 PREDUVJET1 TERMIN2 PREDUVJET2 NASTAVNIK2 TERMIN1 POLAZNIK4 NASTAVNIK1 POLAZNIK5 POLAZNIK1 TECAJM12 POLAZNIK2 ...

Slika 20. HSAM struktura pohrane podataka


2.

HISAM - hierarhic indexed sequential access method (indeksna metoda) doputa indeksni pristup do osnovnih slogova stabla (root) i sekvencijalni pristup do child slogova (Slika 21). Indeks
M10 M11 M12 ...

TECAJ M11 POLAZNIK3

PREDUVJET1 TERMIN2

PREDUVJET2 NASTAVNIK2

TERMIN1 POLAZNIK4

NASTAVNIK1 POLAZNIK5

POLAZNIK1 TECAJM12

POLAZNIK2 ...

Slika 21. HISAM struktura pohrane podataka

LITERATURA
1. P. ONeil: Database - Principles, Programming, Performance, Morgan Kaufmann Publishers, 1994.
80

2. C.J. Date: An Introduction to Database Systems I, Addison-Wesley Publishing Company, 1990. 3. J.L. Harrington: Relational Database Design Clearly Explained, Morgan Kaufmann Publishers, 1998. 4. T.J. Teorey: Database Modeling & Design, Morgan Kaufmann Publishers, 1999. 5. R. Vujnovi: SQL i relacijski model podataka, Znak, Zagreb, 1995. 6. Microsoft SQL server, Database Developers Companion, Microsoft Press, 1996.

81