ton ći dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/dadic_bazepodataka.pdf · 5 1...

114
Fakultet prirodoslovno-matematičkih znanosti Sveučilišta u Splitu Tonći Dadić BAZE PODATAKA Split, 2012.

Upload: lamduong

Post on 06-Feb-2018

232 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

Fakultet prirodoslovno-matematičkih znanosti Sveučilišta u Splitu

Tonći Dadić

BAZE PODATAKA

Split, 2012.

Page 2: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

2

Sadržaj:

1 UVOD ......................................................................................................................... 5

1.1 Što je baza podataka?.....................................................................................5

1.2 Vrste baza podataka .......................................................................................9

1.2.1 Datotečna baze podataka......................................................................10

1.2.2 Hijerarhijska baza podataka.................................................................10

1.2.3 Mrežna baza podataka..........................................................................11

1.2.4 Relacijska baza podataka .....................................................................11

1.2.5 Objektna baza podataka .......................................................................12

2 Relacijski model podataka ....................................................................................... 15

2.1 Mala knjižara ...............................................................................................15

2.2 Pojmovi relacijskog modela podataka .........................................................19

2.3 Relacijska algebra ........................................................................................20

2.4 Coddova pravila ...........................................................................................23

2.5 Ograničenja relacijskog modela...................................................................25

2.5.1 Ograničenja strukture...........................................................................25

2.5.2 Ograničenja ponašanja .........................................................................26

2.6 Normalizacija...............................................................................................28

2.6.1 Prva normalna forma............................................................................28

2.6.2 Druga normalna forma.........................................................................31

2.6.3 Treća normalna forma..........................................................................32

2.6.4 Boyce-Coddova normalna forma.........................................................34

2.6.5 Četvrta normalna forma .......................................................................35

2.6.6 Peta normalna forma............................................................................36

3 Životni ciklus baze podataka.................................................................................... 38

3.1 Faze životnog ciklusa baze ..........................................................................38

3.2 Vrste baza podataka .....................................................................................41

3.3 Postupak oblikovanja baze podataka ...........................................................42

3.3.1 Izrada modela.......................................................................................42

3.3.2 Različiti aspekti sustava.......................................................................43

Page 3: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

3

3.3.3 Model entiteti – veze............................................................................44

3.3.4 Veze .....................................................................................................45

3.3.5 Rješenje veze više prema više..............................................................48

3.3.6 Rekurzivna veza...................................................................................49

3.3.7 Učestalost pojedinih vrsta veza u realnim modelima ..........................50

3.3.8 Atributi .................................................................................................51

3.3.9 Opcionalnost atributa ...........................................................................52

3.3.10 Jedinstveni identifikator.......................................................................52

3.4 Videoteka - model praktičnog primjera .......................................................54

3.5 Model entiteti – veze ( MS SQL Server 2008) ............................................61

3.6 Funkcije ( metode ) ......................................................................................61

3.7 Impementacija objekata baze podataka – primjer dviju tablica ( Microsoft

SQL Server 2008 ): ..................................................................................................62

4 Indeksi ...................................................................................................................... 64

5 SQL Upitni jezik ....................................................................................................... 70

5.1 Uvod.............................................................................................................70

5.2 Upiti u relacijskoj bazi podataka..................................................................70

5.2.1 Projekcija i restrikcija ..........................................................................70

5.2.2 Prirodno spajanje .................................................................................74

5.2.3 Vanjsko ( Outer Join ) spajanje............................................................75

5.2.4 Unutrašnje ( Inner Join ) spajanje ........................................................78

5.2.5 Funkcije u SQL Upitu..........................................................................79

5.2.6 Grupiranje podataka i sumarna izračunavanja.....................................85

5.2.7 ZbrojOcjena .........................................................................................90

5.2.8 Logički složeni uvjeti...........................................................................91

5.2.9 Pobrojane vrijednosti ...........................................................................93

5.2.10 Ugniježđeni upiti..................................................................................94

5.3 SQL komande za definiciju objekata relacijske baze podataka.................100

5.3.1 Stvaranje, promjena i uništavanje tablice ..........................................100

5.3.2 Stvaranje i uništavanje pogleda – view-a...........................................104

5.3.3 Stvaranje indeksa ...............................................................................106

5.3.4 Uništavanje indeksa ...........................................................................107

5.4 Naredbe za upisivanje, promjenu i brisanje podataka ...............................108

5.4.1 Upisivanje ( insertiranje ) retka..........................................................108

Page 4: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

4

5.4.2 Upisivanje svih kolona.......................................................................109

5.4.3 Upisivanje iz jedne tablice u drugu....................................................110

5.4.4 Pomjena podataka ( update )..............................................................110

5.4.5 Promjena podataka tablice vrijednostima druge tablice ....................111

5.4.6 Brisanje ( delete ) retka ......................................................................112

6 Literatura: .............................................................................................................. 114

Page 5: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

5

1 UVOD

1.1 Što je baza podataka?

Intuitivno nam je jasno da su baze podataka sastavnica informacijskog sustava. Stoga

krenimo od definicije informacijskog sustava.

Informacijski sustav prikuplja, pohranjuje, čuva, obrađuje i isporučuje informacije

važne za pojedinca, organizaciju i društvo, tako da budu dostupne i uporabljive za

svakog tko ih želi koristiti. Informacijski sustav aktivni je društveni sustav koji može,

ali ne mora, koristiti suvremenu informacijsku tehnologiju ( M. Varga, «Baze

podataka», DRIP, Zagreb 1994).

Informacija je «sirovina» i «proizvod» informacijskog sustava.

Elementarna informacija je opis jednog obilježja određenog objekta ( S. Tkalac,

1993).

Informacija je novo znanje, koje primatelju donosi nove činjenice. Ona ima karakter

novosti, otklanja neizvjesnost i služi kao podloga za odlučivanje ( Birolla i dr., 1988).

Po svojoj prirodi, informacija je nematerijalna. Da bi ostala sačuvana, treba je

materijalizirati, odnosno zapisati. Taj se zapis zove podatkom:

Podatak je skup prepoznatljivih znakova na određenom mediju.

Obrnuto gledano, informacija je protumačeni podatak, koji primatelju donosi novost,

čiju vrijednost on sam mora procijeniti ( M. Varga, «Baze podataka», DRIP, 1994).

Informacijski sustav možemo podijeliti na sastavnice:

- Sklopovsku podršku ( Hardware )

- Programsku podršku ( Software )

- Ljudske resurse ( Humanware )

- Organizacijske metode i postupke ( Orgware )

Programska podrška se, pak, dijeli na sistemsku i primjenjenu ili aplikacijsku

programsku podršku. Nije jednostavno povući strogu granicu između ove dvije vrste

programske opreme, no kažimo da sistemsku podršku sačinjavaju programi koji

Page 6: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

6

osiguravaju rad računalnog sustava kao cjeline. Naime, računalni hardver je prvi

proizvod stvoren ljudskim umom i rukama, koji je toliko univerzalan, da sam, bez

programske podrške, praktično nije ni od kakve koristi. Potrebano ga je instruirati,

mogli bismo kazati «naučiti» da obavlja koristan posao. U tom postupku instruiranja

hardvera, uočene su i podijeljene po kategorijama različite vrste poslova. Tako,

računalni hardver mora prepoznati pritiske na tipke tipkovnice, prikazati na opremi za

ispis, kao što su monitori, znakovne i slikovne poruke itd. Isto tako, računalni hardver

se često koristi za istovremeno izvođenje različitih zadataka, te za pamćenje podataka

u radnoj memoriji i vanjskim jedinicama za masovnu pohranu podataka. Kako će

računalni hardver obaviti ovu vrtstu osnovnih poslova, instruira ga programska

podrška koju nazivamo operacijski sustav. Nadalje, račuanlni sustav koji obavlja gore

navedene poslove još uvijek nija iskoristiv u svakodnevnom poslu, jer ljudima treba

pomoć u obavljanju konkretnih, strogo definiranih poslova. Lepeza tih poslova je vrlo

široka, a svaki pojedini posao traži strogo definirane postupke, pa proizvođači

računalnih sustava, dakle hardvera i sistemske podrške nisu u stanju definirati sve

detalje aplikativnih postupaka. Njih definiraju, te instruiraju računalo kako da ih

obavi, kreatori primjenjene ili aplikativne programske podrške. S druge pak strane,

ako bi kreatori aplikacije morali voditi računa o svim detaljima rada računalnog

sustava, kao spremanjem podataka na medije za masovnu pohranu, njihovim

pretraživanjem , ispisom na ekranske forme i izvještaje, od silnog posla i

mnogobrojnih detalja koji moraju biti razrađeni do najsitnijih potankosti, nebi imali

vremena i mogućnosti usredotočiti se na sam problem koji rješavaju. Osim toga,

edukacija ljudi koji bi morali znati sve, počev od rada hardvera do detalja, do

tehnološkog posla kojeg informatiziraju, uzela bi toliko vremena, da bi vjerojatno

učili do mirovine.

Pojasnimo to primjerom: Želimo izraditi informacijski sustav koji bi automatizirao

rad studentske referade, od upisa studenta na fakultet, preko prijave i polaganja ispita,

do izdavanja diplome. Vjerojatno na svakom fakultetu u Hrvatskoj postoje razlike u

postupku prijave ispita. Štoviše, čak i na jednom fakultetu neke je ispite potrebno

prijaviti četiri dana ranije, radi rezerviranja dvorane za ispit, do organizacije putovanja

nastavnika iz drugog grada, dok se drugi ispiti, recimo iz izbornih predmeta, koje

sluša svega nekoliko studenata, ispitni termin dogovara s nastavnikom i nije potrebana

Page 7: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

7

rezervacija dvorane. Nadalje, postupak prijave ispita u Kini i Hrvatskoj se sigurno

razlikuje uzme li se u obzir broj studenata na sveučilištima.

Očito je, da nije moguće izraditi jedinstvenu aplikaciju u prihvatljivom vremenu i po

isplatljivoj cijeni, koja bi informatizirala rad studentske referade u Kini i Hrvatskoj. S

druge pak strane, spremanje podataka na magnetski medij trebaju kreatori aplikacija u

obje zemlje. Stoga je tržište odredilo specijalizaciju poslova, pa je moguće proizvesti

identičanu programsku podršku koja će spremati i pretraživati podatke, kako za

aplikaciju u Kini, tako i u Hrvatskoj. Štoviše, ljudi specijalizirani za poslove

spremanja podataka, toliko su ušli u detalje tog problema, da ga mogu riješiti brže i

bolje nego li bi mogao univerzalni programer, koji bi morao voditi računa o svim

aspektima računalnog sustava i tehnologije koja se automatizira. Nadalje, dobar

proizvod kojeg su napravili specijalisti, prodaje se s takvom tiražom da su njegvi

autori visoko stimulirani, a kupcima je cijena prihvatljiva. Nadalje, specijalizirani opći

posao spremanja podataka na magnetski medij trebaju kreatori različitih aplikacijskih

programa, pa su tijekom vremena pronađeni presjeci poslova, koji su identični svakoj

aplikaciji tog tipa.

Prema izloženoj logici su nastali specijalizirani programi za obavljanje općih poslova

vezanih uz rad informacijskog sustava, te primjenjeni programi, koji koriste njihove

programske usluge i obavljaju poslove koje ljudi trebaju u konkretnom, strogo

određenom poslu.

Iskustveno znamo da je ljudima značajna informacija, koja mora biti prikazana na

podesan način. Na primjer, zanima nas broj permutacija šest znamenkastog broja

123456, ali često nas ne zanima kako je rezultat izračunat, samo gotovi rezultat. Ako

će netko napraviti program za izračunavanje broja permutacija – operaciju «faktorjel»,

on će to napraviti općenito, recimo za izračunavanje broja faktorjela Fakt(x), pri čemu

je x ulaz u program, koji će izračunati izlaz y i prikazati ga na monitoru računalnog

sustava:

y = Fakt(x)

Dakle, program, bio on jednostavan ili složen, na temelju ulaza izračunava izlaze.

Korisnike zanimaji izlazi, a da bi ih dobili moraju program snabdjedi traženim

ulazima. Program može imati veći broj ulaza, te izračunati veći broj izlaza. Označimo

li s X skup svih ulaza, te s Y skup svih izlaza, program f transformira ulaze u izlaze:

Page 8: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

8

Y = f(X)

Neki ulazi mogu biti zadani ad hock, neposredno prije izračunavanja izlaza, kao u

primjeru izračunavanja faktorjela. No, mnogo je češći slučaj kada izlazni odziv nije

moguće dobiti odmah. Pretpostavimo da tražimo posao preko interneta. Jedan mogući

pristup je: prijavimo se u neki «chat-room» i unesemo poruku:

«Zovem se Toni, tražim posao programera u programskom jeziku C# itd.»

Nakon nekoliko sekundi poruka bi nestala s ekrana i trebali bismo je ponoviti svako

nekog vremena. Vrlo nepraktično i s minimalnim izgledima na uspjeh, jer je malo

vjerojatno da će se u isto vrijeme u istom «chat-roomu» naći i osoba iz tvrtke koja

traži čovjeka sa znanjem dot.net i C#, a sigurno je danas to tražena specijalnost.

Mnogo prikladniji način traženja angažmana je ako možemo pohraniti podatke o sebi

i svom znanju, te da oni budu na raspolaganju onima koji trebaju programere, tako

dugo dok naša potraga traje. U ovom slučaju, program će generirati izlaze na temelju

dvije vrste ulaza:

- ranije unijetih i pohranjenih ( podaci naše ponude )

- zadanih neposredno prije izvođenja programa ( podaci potrage )

Označimo li s X skup ulaznih podataka kod izvođenja programa, sa Z skup ranije

unijetihi pohranjenih ( perzistentnih ) ulaza, izlazni podaci Y će biti generirani

transformacijom ulaza X i Z:

Y = f( X, Z )

Bazu podataka možemo shvatiti kao elektroničko skladište za pohranu podataka, koji

će biti korišteni kao programski ulazi s odgodom. Kako je moguće predvidjeti i

generalizirati poslove spremanja te pretraživanja pohranjenih ulaznih podataka, to je

bilo moguće kreirati programski sustav za obavljanje ovih poslova. U početku je

kreator aplikacije koristio unaprijed napravljene programe koji su zapisivali i čitali

podatke na magnetski medij u obliku datoteka. Ove usluge su stavljali na raspolaganje

operacijski sustavi. Kreator aplikacije je morao voditi računa o zapisivanju i čitanju

svakog pojedinog znaka. Vremenom su stvoreni specijalizirani programi za

upravljanje «elektronskim skladištem» podataka.

Vjerojatno je svatko od nas koristio usluge garderobe na putovanjima. Osoblje

garderobe prima od nas prtljag na pultu, sprema ga na police, izdaje nam potvrdu i

Page 9: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

9

kod podizanja prtljaga vrlo brzo ga pronađe i izruči. Uočio sam da u velikim

garderobama pitaju putnike: «Kada ćete podići?». Odgovorio sam «Za 2-3 sta». Onda

su moj prtljag stavili na policu sasvim blizu primopredajnog pulta. Ja im ništa nisam

govorio o tome kako i gdje će spremiti moje putne torbe. Jedna dama je kazala, kako

će trebati svoj prtljag tek za 7 dana, pa su njen spremili na udaljenu policu, na samom

kraju skladišta. Zaključio sam kako oni vode računa o spremanju prtljaga, a mi im

samo kažemo što trebamo.

Na sličan način rade i sustavi za upravljanje bazom - «elektronskim skladištem»

podataka. Kreator aplikacije im preda podatke na «pultu», oni ih spreme i sami vode

računa o organizaciji podataka, kako bi ih brzo pronašli, te nam ih ponovno predaju

na «pultu» kada ih trebamo. Štoviše, iste spremljene podatke mogu transformirati i

predati nam u različitim oblicima, poredane na jedan ili drugi način, baš kako ih u

datom momentu zahtijevamo.

Baza podataka je elektroničko skladište podataka zapisanih na mediju za

masovnu pohranu, pri čemu su podaci tako organizirani da se lako i brzo

pronađu i to u onom opsegu koji zadovoljava postavljeni kriterij, te prezentiraju

u pogodnom obliku. Spremanjem, pronalaženjem i sortiranjem podataka

upravlja poseban programski sustav: DBMS ( database management system).

Karakteristika baze podataka je:

1. velika količina podataka

2. znatan broj dnevnih promjena

3. različite razine izvještaja, kao:

- detaljni podaci

- sumarni podaci

- izračunati podaci

1.2 Vrste baza podataka

Prema stupnju usluge u smislu spremanja, održavanja, čitanja i pretraživanja podataka

koju kreator aplikacije dobija od ugrađene programske opreme, te načinu organizacije

podataka, baze možemo podijeliti na datotečne, hijerarhijske, mrežne, relacijske i

objektne.

Page 10: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

10

1.2.1 Datotečna baze podataka

Najstarije baze podataka koristile su datotečni sustav i to:

- sa sekvencijalnim pristupom

- sa slučajnim pristupom

Osnovna karakteristika datotečnih baza je, da je sustav za upravljanje datotekama

kreatoru aplikacije pružao vrlo skromnu uslugu. U pravilu, kreiranje i uništavanje

datoteke, te pisanje i čitanje. Kreator aplikacije je morao voditi računa o položaju

svakog znaka na disku. Najčešće se podacima pristupalo prema apsolutnom položaju

na disku.

Naročite poteškoće kod velikih datoteka, zadavalo je pretraživanje podataka, koje je u

pravilu radilo sporo, a programeri su morali utrošiti značajno vrijeme i napr da opće

implementiraju pretraživanje. Dakle, glavni napor programera bio je usredotočen na

organizaciju podataka na disku i izradu procedura za spremanje, čitanje, te

pretraživanje zapisa – slogova podataka. Problemi bi tek dolazili s održavanjem i

potrebom naknadnih modifikacija. Dodavanje jednog polja zahtijevalo je pomicanje

slogova, te izmjenu cijelih aplikacija koje sa slogom rade, jer je položaj svakog polja

bio određen apsolutnom pozijom kao npr.: Ime studenta počinje s 35. byte-om sloga i

završava na 64 poziciji.

Kako su programeri imali potpunu slobodu u organizaciji podataka, to je praktično

svaka aplikacija, čak i unutar jedne tvrtke, bila inkompatibilna s drugima. O

povezivanju aplikacija koje rade na različitim sustavima, nije se moglo ni sanjati.

1.2.2 Hijerarhijska baza podataka

Hijerarhijski model podataka nastao je šezdesetih godina, nakon što je IBM razvio

sustav za upravljanje hijerarhijskom bazom IMS/VS, 1968. IMS je razvijen pod MVS

operacijskim sustavom za mainframe računala. Element zapisa podatka je polje

(field), pri čemu skup polja koji opisuju isti objekt čini slog ili rekord. Slogovi su u

odnosu roditelj – dijete, pri čemu niti jedan slog ne može postojati kao dijete, ako za

njega ne postoji roditeljski čvor. Podaci hijerarhiskog modela se organiziraju u stablo:

Page 11: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

11

Hijerarhijske veze, te veze roditelj dijete realiziraju se hijerarhijskim i «Child-twin»

pokazivačima.

1.2.3 Mrežna baza podataka

Mrežni model podataka nastao je unapređenjem hijerarhiskog modela. Uočavamo da

zaposlenici Ivan i Ana Perić mogu biti supružnici, te u tom slučaju dijete Hrvoje

Perić može biti dijete kako Ivana, tako i Ane Perić:

Mrežni model implementira mogućnost pripadnosti jednog čvora u hijerarhiji većem

broju nadređenih čvorova. Jednako tako, svaki roditeljski čvor može imati više djece.

Veze isprepletene na ovaj način tvore mrežu, po čemu je mrežni model dobio ime.

1.2.4 Relacijska baza podataka

Programski sustav za upravljanje relacijskom bazom podataka RDBMS ( Relational

database management system) nastao je kao implementacija pravila relacijskog

modela podataka, koje je definirao Codd 1971. godine. Naravno, tijekom vremena,

Poduzeće

Zaposlenik: Ante Ivić 1958

Zaposlenik:Ivan Perić 1946 Zaposlenik: Ana Perić 1949

Dijete : Ivo Ivić 1980

Dijete: Hrvoje Perić 1981

Dijete: Ana Ivić 1980

«Child-twin» pokazivač

Zaposlenik:Ivan Perić 1946

Zaposlenik:Ana Perić 1946

Dijete: Hrvoje Perić 1981

Page 12: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

12

kako je raslo iskustvo i uočavane potebe, RDBMS je evoluirao, te danas postoje na

tržištu programska rješenja koja omogućuju pridržavanje svih pravila relacijskog

modela, a da istovremeno odzivna vremena budu zadovoljavajuća, sve

«nestrpljivijim» pretražiteljima baza. Isto tako, cijena programske opreme, iskazana u

$/transakciji ( provedenoj operaciji ) za cjelokupnu instalaciju je sasvim prihvatljiva.

Relacijski model je skup pravila koji mora biti zadovoljen kod projektiranja baze

podataka. Isto tako, Codd je definirao operacije nad relacijskim modelmom, koje

kasnije implementira upitni jezik SQL ( Structured Query Language). Uspjeh

relacijskog modela leži u činjenici njegove utemeljenosti na dva dobro definirana

područja matematike: teoriji skupova i matematičke logike.

1.2.5 Objektna baza podataka

U posljednjem desetljeću je objektni pristup promatranja i analize aplikacijskih

zadataka, te oblikovanja programskih rješenja, istisnuo raniji proceduralni pristup.

Glavna razlika ova dva pristupa proizlazi iz činjenice, da su u realnom svijetu objekti

opisani svojim atributima, te znaju izvršavati određene metode. Proceduralni pristup

nas uči da usredotočimo svoju pažnju na niz koraka kojima se rješava programski

problem. Nasuprot tome, objektni pristup upućuje koncentraciju kreatora objektnog

modela na atribute i metode objekata iz realnog okruženja. Dakle, objektni pristup je

bliži mišljenju u realnom svijetu, gdje objekti surađuju jedan s drugim, pri čemu je

važno sučelje njihove interakcije, a manje su važni mehanizmi koji transformiraju

ulazne podražaje u izlazne reakcije.

Oslikajmo gornju ideju primjerom: na ulicama New York-a već dvadesetih godina

prošlog stoljeća su bili postavljeni automati za automatsku prodaju osvježavajućih

pića ( i duhanskih proizvode, koji su jako štetni po ljudsko zdravlje, no to tada njihova

prodaja na ovaj način, nije bila zabranjena ). Automat komunicira s kupcem preko

tipki za izbor pića, te «prozora» za ubacivanje i povrat novca. Automati korišteni prije

80 godina su bili potpuno mehaničke naprave, a današnji koriste mikroračunala. No

kupcu je svejedno, jer sučelje preko kojeg komunicira s automatom je praktično

nepromijenjeno svih ovih godina: uvijek je to tipka sa slikom i natpisom pića koje

naručuje.

Page 13: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

13

Ideja objektno oblikovanog programa leži u dobro definiranom sučelju preko kojeg

pozivač snabdjeva programski objekt ulazima i od njega dobija izlaze. Procedura

obrade ostaje skrivena unutar pozvanog objekta. Upravo izrečeno, zapravo je ideja

strukturnog programiranja, jedino objektni model donosi dobro definiran odnos među

objektima, poboljšava komunikaciju među objektima preko interfejsa, te što je

najvažnije, programske prevoditelje koji implementiraju objektni programski model.

Objektni pristup unapređuje timsku izradu softvera, te povećava mogućnost ponovne

upotrebe već napisanog koda ( eng. reusebility ).

Karakteristike objektnog programskog model su:

Enkapsulacija – program pozivač ( klijent ) pristupa pozvanoj strukturi (poslužitelju)

isključivo preko svojstava ( property ) programskog sučelja, te pozivom izloženih

metoda. Drugim riječima, neke varijable i procedure poslužiteljskog objekta su

dostupne pozivaču, dok su druge skrivene. Kreator poslužiteljskog objekta u

potpunosti kontrolira prava pristupa.

Nasljeđivanje – objekti se nalaze u jednom od dva moguća odnosa:

- jedna vrsta od ( a kind of )

- jedan dio od ( a part of )

Pojasnimo primjerom: Osoba je opisana imenom, prezimenom i datumom rođenja.

Student je jedna vrsta osobe, pa prema tome ima sve značajke osobe, ali povrh toga je

njegova značajka godina studija koju pohađa. Zaposlenik je isto tako osoba, koji

dodatno ima atribute: datum zaposlenja i plaća. Umirovljenik je osoba, čiji je

specifičan atribut iznos mirovine ( drukčija poreska opterećenja u odnosu na plaću

zaposlenika ).

U objektnom programskom modelu se definira prototip – klasa – Osoba, s atributima

ime, prezime i godina rodjenja. Zatim klasa Student nasljeđuje sva svojstva osobe i

njima dodaje specifičnost studenta – godina studija. Shodno tome, Zaposlenik

nasljeđuje svojstva Osobe i dodaje datum zaposlenja i plaću, dok Umirovljenik

nasljeđuje svojstva Osobe i dodaje mirovinu. Naravno, moguće je da netko «studira

uz rad», pa bi objekt ZaposleniStudent nasljedio svojstva Zaposlenika i Studenta.

Page 14: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

14

Dobitak ovakovog pristupa se iskazuje i tijekom razvoja klasa i tijekom održavanja.

Naprimjer, ako klasa Osoba podržava metodu Godine starosti na dan, uz ulazni

parametar Datum, onda se metoda implementira samo jednom, a koristi kod

izračunavanja godina starosti u svakoj od nasljeđenih klasa. Dodatno, naslijeđene

klase mogu neke metode polaznih klasa nadjačati, pa se istim pozivom, zapravo

odrađuje druga metoda specifična toj klasi.

Polimorfizam – sposobnost korištenja istog izraza za izvođenje različitih operacija.

Osnov ovog svojstva je poznat od najranijih programa. Zbrajamo li cijele brojeve, to

se obavlja drukčijom metodom, nego kad zbrajamo brojeve u tekućem zarezu.

Objektno programiranje je dosljedno, pa kreator klase određuje način izvršavanja

izraza. Uzmimo na primjer klasu Boje. Poznato je da miješanjem npr. žute i plave

boje dobijemo zelenu. Klasa boje može promijeniti značenje operatora plus (+) i dati

kao rezultat zelenu boju, kad god se zbrajaju žuta i plava.

Poruke – objekti komuniciraje putem poruka. Najčešće se implementira kao

pridjeljivanje vrijednosti svojstvima ( set – get property) i funkcijskim pozivima.

Postojanost (eng. Persistence) - Gore izrečena svojstva odnose se na paradigmu

objektog programiranja. Objektna baza mora implementirati gornja svojstva, ali isto

tako implementirati svojstvo postojanosti ( perzistencije) velike količine podataka.

Dakle, zapisati, čitati i pretraživati vrijednosti atributa svake instance objekta na

mediju za masovnu pohranu podataka.

Koliko je autoru ovih redaka poznato, za sada ne postoji stroga, formlno prohvaćena

definicija objektne baze. Doduše, mnogi proivođači sustava za upravljanje bazom

podataka tvrde da su njihove baze objektne, ali je teško ići u ocjenu opravdanosti

takva naziva, dok se ne prihvati formalna definicija što je objektna baza.

Page 15: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

15

2 Relacijski model podataka

Osnovne principe i strukturu relacijskog modela podataka iznio je 1971. matematičar

E.F. Codd, u to vrijeme član «IBM San Jose Research Laboratory». Najveća prednost

relacijskog modela podataka je njegova utemeljenost na matematičkoj teoriji

relacijske algebre ( R. Vujnović: SQL i relacijski model podataka, Znak 1995.).

Prije iznošenja definicija i pravila relacijske algebre, najprije krenimo s primjerom, na

kome ćemo ilustrirati maljkavosti mogućeg rješenja, koje se otklanjaju primjenom

relacijskih pravila.

2.1 Mala knjižara

Kako je rečeno u definicijama informacijskog sustava i baze podataka, nije nužno da

informacijski sustav bude podržan informacjskom tehnologijom. Pretpostavimo

potrebu informacijskog sustava, dakle određenog ustroja, zapisivanja i korištenja

informacija male trgovine knjigama. Raspoloživih naslova je tako mali broj, da se sve

pregledno i bez napora može voditi olovkom na papiru.

Knjižara «FOKUS» prodaje mali broj naslova različitih izdavača. Svaki naslov je

tiskan od strane samo jednog izdavača, ali jedan izdavač može izdati više naslova. IS

mora raspolagati adresnim podacima izdavača, radi održavanja kontakata, poštom i

telefonom. Naslov je napisan od strane jednog ili više autora. Potrebano je raspolagati

podacima o autoru kao što su Ime i Prezime.

Luka, vlasnik i prodavač u knjižari, je na papiru napravio tablicu i pregledno unio

slijedeće podatke:

Tablica:Knjige1

Red. broj Naslov Izdava č Pošta Mjesto Ulica i kbr Telefon Autori

1 Baze podataka DRIP 10000 ZAGREB Ilica 121 01/123-456 Mladen Varga

2 SQL i relacijski model podataka ZNAK 10000 ZAGREB Vukovarska 56

01/413-8567

Ratko Vujnović

3 ORACLE 7 ZNAK 10000 ZAGREB Vukovarska 56 01/413-8567 Darko Hrenić

4 Dalmatinska kuhinja LOGOS 21000 SPLIT Narodni trg 4

021/345-678

Ankica Biluš, Marija Rode

5 Dalmatinski kolači LOGOS 21000 SPLIT Narodni trg 4 021/345-678

Ankica Biluš, Tanja Kesić

Page 16: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

16

Luka prve probleme uočava nakon saznanja da je ZNAK preselio na novu adresu:

Maksimirska 161, te da je izmijenjeni telefonski broj: 01/656-7879. Morao bi u

svakom retku, gdje se pojavljuju ove informacije o izdavaču ZNAK, mijenjati. Čim bi

knjižara prodavala veći broj Znakovih naslova, Luka bi uočio maljkavost svog modela

podataka, jer bi morao u mnogo redaka brisati stare i upisivati nove podatke.

Luka ocjenjuje svoj model podataka i nalazi.

Nedostatak: isti podatak o izdavačima je zapisan više puta, što ga izluđuje kod

izmjena podataka. Već mu je na vrh glave brisanja i upisivanja potpuno istog podatka

u mnogo redaka. Stoga zaključuje: podijelit ću jedinstvenu tablicu Knjige1 u dvije

tablice i to Knjige2 i Izdavači2, tako da svi podaci o izdavaču budu napisani samo

jednom, pa će izmjenu adrsnih podataka izdavača, morati mijenjati na samo jednom

mjestu.

Prednost: Sve informacije o jednoj knjizi su lako dostupne, čim se pronađe knjiga,

odmah može pročitati izdavač i autore.

Tablica:Knjige2

Red. broj Naslov Izdava č Autori

1 Baze podataka DRIP Mladen Varga 2 SQL i relacijski model podataka ZNAK Ratko Vujnović 3 ORACLE 7 ZNAK Darko Hrenić

4 Dalmatinska kuhinja LOGOS Ankica Biluš, Marija Rode

5 Dalmatinski kolači LOGOS Ankica Biluš, Tanja Kesić

Tablica: Izdavači2

Izdavač Pošta Mjesto Ulica i kbr Telefon DRIP 10000 ZAGREB Ilica 121 01/123-456 ZNAK 10000 ZAGREB Vukovarska 56 01/413-8567 LOGOS 21000 SPLIT Narodni trg 4 021/345-678

Nadalje, Luka uočava da je mjesto odmah jednoznačno određeno, čim je poznat

poštanski broj, dakle 10000 je ZAGREB, a 21000 SPLIT, pa odlučuje uštedjeti papir i

napraviti novu tablicu Pošte, te iz tablice Izdavači ukloniti kolonu Mjesto.

Page 17: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

17

Tablica:Knjige3

Red. broj Naslov Izdava č Autori

1 Baze podataka DRIP Mladen Varga 2 SQL i relacijski model podataka ZNAK Ratko Vujnović 3 ORACLE 7 ZNAK Darko Hrenić

4 Dalmatinska kuhinja LOGOS Ankica Biluš, Marija Rode

5 Dalmatinski kolači LOGOS Ankica Biluš, Tanja Kesić

Tablica: Izdavači3

Izdavač Pošta Ulica i kbr Telefon DRIP 10000 Ilica 121 01/123-456 ZNAK 10000 Vukovarska 56 01/413-8567 LOGOS 21000 Narodni trg 4 021/345-678

Tablica Pošte3:

Pošta Mjesto 10000 ZAGREB 10000 ZAGREB 21000 SPLIT

Luki se ovo rješenje činilo dobro, sve dok nije odlučio tiskati prospekt o knjigama

koje prodaje. Naime, u prospektu je trebao ispisati bibliografske podatke o svim

autorima koji su napisali knjige. Uočio je veliki problem kod knjiga što su ih napisala

dva ili više autora, te ponavljanje bibliografskih podataka autora u svakom retku. Isto

tako, jedan autor je mogao napisati više knjiga za različite izdavače, s različitim

koautorima. Nije bilo druge, nego iz tablice knjige izdvojiti kolonu autori, a da ne

izgubi vezu između autora i knjiga, napraviti posebnu tablicu u koju će upisivati samo

identifikaciju autora i knjiga. Kako su knjigu istog naslova, npr. SQL, mogli izdati

različiti izdavači, odluči knjigu identificirati naslovom i nazivom izdavača:

Tablica:Knjige4

Red. broj Naslov Izdava č

1 Baze podataka DRIP 2 SQL i relacijski model podataka ZNAK 3 ORACLE 7 ZNAK 4 Dalmatinska kuhinja LOGOS

Page 18: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

18

5 Dalmatinski kolači LOGOS

Tablica: Izdavači4

Izdavač Pošta Ulica i kbr Telefon DRIP 10000 Ilica 121 01/123-456 ZNAK 10000 Vukovarska 56 01/413-8567 LOGOS 21000 Narodni trg 4 021/345-678

Tablica Pošte4:

Pošta Mjesto 10000 ZAGREB 10000 ZAGREB 21000 SPLIT

Tablica: Autori4

Ime Prezime Datum ro đenja Mladen Varga Ratko Vojnović Darko Hrenić Ankica Biluš Marija Rode Tanja Kesić

Tablica: Knjige_Autori4

Red. broj Naslov Izdava č Autor_ime Autor_prezime 1 Baze podataka DRIP Mladen Varga

2 SQL i relacijski model podataka ZNAK Ratko

Vujnović

3 ORACLE 7 ZNAK Darko Hrenić 4 Dalmatinska kuhinja LOGOS Ankica Biluš 4 Dalmatinska kuhinja LOGOS Marija Rode 5 Dalmatinski kolači LOGOS Ankica Biluš 5 Dalmatinski kolači LOGOS Tanja Kesić

Na kraju, Luka uočava da bi značajno štedio papir i trud oko upisivanja u tablicu

Knjige_Autori4, ako bi tablicu povezao s Knjige4 služeći se rednim brojem knjige.

Page 19: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

19

Nažalost, prednost polazne tablice Knjige1, da svi podaci o knjizi budu pregledni i

lako dostupni više nije očuvana. Srećom, računalo može obavito ovo povezivanje brzo

i lako, te je Luka odlučio naučiti pravila relacijskog modela i upotrijebiti programski

sustav za upravljanje relacijskom bazom.

2.2 Pojmovi relacijskog modela podataka

Entitet je sve ono o čemu želimo i možemo skupljati informacije i čije se pojave

mogu međusobno razlikovati ( identificirati).

Tako na primjer, studenti jesu entitet jer razlikujemo svakog studenta imenom,

prezimenom, datumom rođenja. Kamenčići na pješčanoj plaži nisu entitet, jer ne

možemo razlikovati svakog od njih.

( Riječ entitet posuđena je iz latinskog jezike i znači: ens = biće, summ = jesam,

esse=biti, i znači bitnost, ono što jest)

Neki autori razlikuju pojmove entitet i tip entiteteta, smatrajući svaku pojavu objekta

entitetom, a prototipsku definiciju – klasu - tipom. Tako je Ivo Ivić, rođen 22.06.1981.

entitet, a prototip ime, prezime, datum rođenja tip entiteta.

Atribut – opisuje svojstva entiteta. Svaki entitet opisan je skupom atributa. Tako je

osoba opisana imenom, prezimenom, datumom rođenja. Svaki atribut može primiti

jednu vrijednost: ime=Ivo, prezime=Ivić, datum rođenja=22.06.1981.

Domena – je imenovani skup svih mogućih ( dopuštenih ) vrijednosti jednog atributa.

Očito su onda moguće pojave entiteta Kartezijev produkt svih domena.

Tako Hrvatska pošta katalogizira poštanske brojeva u Hrvatskoj, dakle definira

domenu poštanskih brojeva, a Državni sabor je donio Zakon o registraciji trgovačkih

društava, definirajući moguće djelatnosti koje ova mogu obavljati, dakle domenu

djelatnosti.

Odgovor na pitanje: koje djelatnosti mogu biti obavljane u mjestima Hrvatske (svako

mjesto za razliku od naselja ima poštanski broj) ćemo potražiti u Kartezijevom

produktu pošta i djelatnosti, jer koliko je meni poznato, svaka djelatnost zakonski

može biti obavljana u svakom mjestu. Naravno da skup postojećih pošta i djelatnosti

predstavlja podskup Kartezijevog produkta.

Page 20: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

20

Relacija je imenovani podskup Kartezijevog produkta domena:

Neka su Di domene atributa Ai, te neka su di elementi domene Di. Tada je relacija R

podskup Di x Dj, pri čemu je i, j=1,2,3 … n & i <> j, gdje je n broj atributa entiteta.

Relacijska shem R sastoji se od naziva relacije i konačnog skupa (naziva) atributa

odnosno stupaca ( A1, A2, … An ), koji opisuju istoimenu relaciju.

Uobičajeni način pisanja relacijske sheme je R(A1,A2, … An), odnosno, R(A1:D1,

A2:D2, … An:Dn).

Ime relacije mora biti jedinstveno, jednako kao i imena atributa iste relacije.

Redoslijed atributa relacije nije bitan.

N-torka je jedan element iz skupa Kartezijevog produkta svih atributa. U relaciji ne

mogu postojati dvije identične n-torke.

Klju č relecije je minimalni skup atributa čije vrijednosti jednoznačno identificiraju

svaku n-torku relacije.

Klju č relacije R skup je atributa K iz R, tako da svake dvije n-torke r1 i r2 relacije R

imaju različite vrijednosti atributa K, tj. da je r i(K)=tj(K), samo za i=j.

Relacijska shema baze podataka je skup relacijskih shema.

Relacijska baza podataka je skup relacija definiranih relacijskom shemom baze

podataka.

U praksi je uobičajeno korištenje pojmova implementacijske razine:

tablica – je fizička implementacija relacijske sheme

kolona – implementacija atributa

redak – implementacija n-torke

2.3 Relacijska algebra

Relacijska algebra definira skup formaliziranih operacija nad relacijama. Rezultat bilo

koje operacije je relacija. Neke od operacija dobro su poznate u teoriji skupova.

Osnovne operacije su:

- unija

Page 21: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

21

- razlika

- Kartezijev produkt

- projekcija

- restrikcija

- prirodno i theta spajanje

- presjek

- dijeljenje

Unija

Unija dviju unijski kompatibilnih relacija R(A1, A2, … An) i S(A1, A2, … An) je

nova relacija T(A1,A2, … An) koja se sastoji od svih n-torki sadržanih u R i S.

Studenti1:

Ime Prezime Ivo Ivić Ana Marić Josip Petrić

Studenti2:

Ime Prezime Luka Dadić Ana Marić

Studenti1_UNIJA_Studenti2:

Ime Prezime Ivo Ivić Ana Marić Josip Petrić Luka Dadić

Razlika

Razlika – diferencija dviju unijski kompatibilnih relacija R(A1,A2, … An) i S(A1,A2,

… An) je nova relacija T(A1,A2, … An) koja obuhvaća sve n-torke iz R, koje nisu

sadržane u S.

Page 22: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

22

Studenti1:

Ime Prezime Ivo Ivić Ana Marić Josip Petrić

Studenti2:

Ime Prezime Luka Dadić Ana Marić

Studenti1_MINUS_Studenti2:

Ime Prezime Ivo Ivić Josip Petrić

Studenti2_MINUS_Studenti1:

Ime Prezime Luka Dadić

Kartezijev product dviju relacija R(A1,A2, … An) i S(B1,B2, … Bm) je nova

relacija T(A1,A2, … An,B1,B2, …Bm) koja se sastoji od n-torki nastalih spajanjem

svake n-torke relacije R sa svakom n-torkom relacije S. Jasno je, broj n-torki u novoj

relaciji T produkt je broja n-torki u R i S.

Projekcija relacije R nova je relacija T koja se sastoji od atributa relacije R po kojima

je obavljena operacija projekcije i u kojoj su uklonjene jednake n-torke.

R(A1,A2,A3,A4) � ( A1, A3 ) � T(A1,A3)

Restrikcija relacije R(A1,A2, … An) je nova relacija T(A1,A2, …An) koja se sastoji

od n-torki relacije R koje ispunjavaju zadani uvjet.

Spajanje - Theta-spoj je restrikcija Kartezijevog produkta relacija R i S opisana

formulom A<operator>B, gdje je A atribut relacije R, a B atribut relacije S.

Page 23: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

23

Vanjsko spajanje - operacija vanjskog spoja relacija R i S je nova relacija T, koja je

jednaka operaciji spoja R i S, uz dodatak n-torki iz relacija R i S koje nisu sadržane u

spoju. Te n-torke su popunjene null-vrijednostima na mjestima nedostajućih atributa.

2.4 Coddova pravila

Radi izbjegavanja nesuglasja oko toga koji sustav za upravljanje bazom podataka je, a

koji nije relacijski, Codd je 1985. definirao 12 pravila od kojih barem 6 sustav mora

ispunjavati, kako bi se smatrao relacijskim. Za nas su značajna ova pravila, kako

bismo razumjeli što podržava relacijska baza i kako bismo mogli iskoristiti njene

mogućnosti, kod projektiranja relacijske baze podataka. Drugim rječima,

narušavanjem ovih pravila postupkom projektiranja aplikacijske baze, naša baza ne

može nositi atribut relacijska, iako koristimo relacijski sustav za upravljanje bazom.

Pravilo 0: Bilo koji sustav za upravljanje bazama podataka koji se smatra relacijskim,

mora upravljati bazom podataka na potpuno relacijski način i relacijskom metodom.

1. Predstavljanje informacija: Sve informacije u relacijskoj bazi podataka logički

su predtavljene isključivona jedan način: vrijednostima u tablicama, tj. relacijama

2. Obvezna logička dostupnost: Svaka najmanja vrijednost ( atom informacije, tj,

jedna vrijednost atributa u jednoj n-torci) u relacijskoj bazi mora biti logički

dostupna preko kombinacije imena relacije, vrijednosti promarnog ključa i imena

atributa.

3. Prezentacija nepostojeće informacije: Relacijska baza podataka mora

podržavati koncept Null vrijednosti, neovisno o tipu podatka. Pod pojmom Null

vrijednosti se podrazumijeva vrijednost atributa koja nije poznata u datom

vremenskom trenutku.

4. Dinamički on-line katalog: Na lokalnoj razini baza podataka opisana je na isti

način kao i obični podaci, tako da ovlašteni korisnici mogu koristiti isti upitni

jezik za pretraživanje strukture baze, opisa objekata baze, kao i za pretraživanje

podataka.

5. Sveobuhvatni jezik za manipulaciju podacima: Relacijski sustav mora

podržavati najmanje jedan jezik čiji se izrazi pomoću dobro definirane sintakse,

mogu prezentirati kao nizovi znakova i koji mora podržavati:

Page 24: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

24

- definiranje podataka

- definiranje pogleda

- manipulaciju podacima ( interaktivno i iz aplikacije)

- ograničenja vezana uz integritet podataka

- autorizaciju orisnika

- upravljanje transakcijama

6. Ažuriranje pogleda: Svi pogledi koji se po relacijskoj teoriji mogu ažurirati,

moraju se moći ažurirati i u implementiranom modelu ( tablicama na kojima se

pogled temelji).

7. Visok nivo unosa, ažuriranja i brisanja: Svojstvo manipulacije relacijom ili

pogledom kao običnim operandom mora biti moguće ne samo kod pretraživanje,

već i pri unosu, ažuriranju i brisanju podataka.

8. Fizička neovisnost podataka: Aplikacije i aktivnosti koje korisnik poduzima

prema bazi potpuno su neovisne o metodi pristupa ili o strukturi spremanja

podataka.

9. Logička neovisnost podataka: Aplikacije i aktivnosti koje korisnik poduzima

prema bazi, ostaju nepromjenjene kad god je učinjena promjena na relacijama

koja je po teoriji dopuštena i koje ne narušava neovisnost podataka.

10. Neovisnost integriteta: Ograničenja na integritet podataka ne smiju biti dio

aplikacije već moraju biti sadržana u katalozima baze.

11. Neovisost distribucije: : Bez obzira na to, podržava li sustav distribuciju ili ne,

jezik sustava mora biti takav da podržava distribuciju bez uticaja na aplikativne

programe.

12. Pravilo o nesubverzivnosti: Ako sustav podržava jezik niskog nivoa, taj jezik ne

smije biti korišten da bi se zaobišla ili ignorirala pravila o integritetu.

Page 25: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

25

2.5 Ograni čenja relacijskog modela

Ograničenja su definirana kako bi se podržala ispravnost i istinitost podataka. Pravila

se nazivaju i pravilima integriteta podataka.

Važno je imati na umu, da dobar informacijski sustav počiva na dobro definiranoj

bazi podataka. Baza se pak temelji na dobro definiranom modelu podataka. Ključni

činitelj dobrog modela podataka su ispravno uočena i provedena ograničenja.

Ograničenja dijelimo na:

- ograničenja strukture

- ograničenja ponašanja

2.5.1 Ograni čenja strukture

Ograničenja strukture nasljeđuju se iz definicije relacijskog model i izražavaju

specifična svojstva elemenata relacijskog modela.

Ograničenje domene – definira skup vrijednosti koje može primiti neki atribut.

Provodi se definiranjem:

- Minimalne i maksimalne vrijednosti atributa

- Uvjetom koji vrijednost mora zadovoljiti

- Nabrajanjem vrijednosti

Ograničenje Null vrijednosti – definira da li vrijednost atributa može biti

nedefinirana. Ako je dopuštena null vrijednost, ne moramo unijeti podatak, a ako nije

dopuštena, često se kaže da je podatak mandatoran – obvezan, nije moguće upisati

redak, ako se ne navede dopuštena vrijednost atributa.

Ograničenje jedinstvenosti ključa ili entitetski integritet – vrijednost primarnog

ključa ne smije biti Null – vrijednost. Isto tako nije moguće unijeti dvije n-torke s

istom vrijednosti primarnog ključa. Ista vrijednost primarnog ključa znači ili da je

unijeta pogrešna vrijednost jednog od atributa koji identificiraju objekt, ili da se radi o

istom objektu ili pak, da skup atributa koji moraju jedinstveno identificirati objekt nije

dostatan.

Page 26: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

26

Referencijsko ograničenje ili integritet stranog klju ča – strani ključ u relaciji mora

biti jednak jednoj od vrijednosti u relaciji gdje je on promarni ključ ili pak može ostati

nedefiniran, tj. primiti Null-vrijednost.

Navedena ograničenja odnose se na strukturu podataka.

2.5.2 Ograni čenja ponašanja

Ograničenje ponašanja vodi eliminaciji redudantnosti zapisa, a time olakšanim

promjenama podatka i ušedi prostora za pohranu. Ograničenje ponašanja promatramo

kroz različite tipove ovisnosti. Najvažnije su funkcijska, višeznačna i spojna ovisnost.

2.5.2.1 Funkcijska ovisnost

Neka su A i B podskupovi atributa u relacijskoj shemi R. Funkcijska ovisnost f:A�B

vrijedi onda i samo onda, ako za bilo koje dvije n-torke t1(A) i t2(A) za koje vrijedi

t1(A)=t2(A), istovremeno vrijedi i t1(B)=t2(B). Tada kažemo da A funkcijski

određuje B.

Na primjer, u tablici Knjige1, kad god je poštanski broj 10000, mjesto je Zagreb i kad

god je poštanski broj 21000, određeno je mjesto Split. Kažemo da poštanski broj

funkcijski određuje mjesto.

Definirani su aksiomi za izvođenje funkcijskih ovisnosti:

F1) Refleksivnost: ako je A podskup od B, tada B � A. ( znak � «čitat

funkcijski određuje»)

F2) Proširenje: ako j A� B, tada AC � B.

F3) Aditivnost : ako A � B i A � C, tada A � BC

F4) Projektivnost: ako A � BC, tada A � B.

F5) Tranzitivnost : ako A � B i B � C tada A � C.

F6) Pseudotranzitivnost: ako A � B i BC � D, tada AC � D.

Aksiomi F1, F2 i F6 nazivaju se Armstrongovi aksiomi i oni čine potpuni skup

aksioma, jer se aksiomi F3, F4 i F5 daju izvesti iz njih. Navedene aksiome dobro je

znati jer su temelj za pronalaženje funkcijskih ovisnosti i modifikacije nad strukturom

podataka.

Page 27: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

27

2.5.2.2 Višeznačna ovisnost

Neka su A i B disjunktni podskupovi atributa u relacijskoj shemi R i neka je relacijska

shema Z jednaka Z = R – AB. Kažemo da relacija r udovoljava uvjetima višeznačne

ovisnosti (VZO), odnosno A ->>, ako vrijedi: uvijek kada relacija r sadrži n-torke

t1(ABC)=a(b1)(c1) i t2(ABC)=a(b2)(c2), onda mora sadržavati i n-torke

t3(ABC)=a(b1)(c2) i t4(ABC)=a(b2)(c1). Pojasnimo višeznačnu ovisnost primjerom.

Student Sport Jezik Ivić PLIVANJE NJEMAČKI Ivić TRČANJE ENGLESKI Ivić PLIVANJE ENGLESKI Ivić TRČANJE NJEMAČKI

Dakle, student Ivić se bavi sportovima PLIVANJE i TRČANJE; te govori strane

jezike NJEMAČKI i ENGLESKI. Dakle, ukoliko postoji n-torka da se jedan student

(a=Ivić), bavi (b1=PLIVANJEM) i zna (c1=NJEMAČKI), te (b2=TRČANJEM) i

(c2=ENGLESKI), onda moraju postaojati i n-torke

(a=Ivić)(b1=PLIVANJE)(c2=ENGLESKI), kao i

(a=Ivić)(b2=TRČANJE)(c1=NJEMAČKI).

To dokazuje da atributi Sport i Jezik nemaju nikakvih međusobnih ovisnosti, dok

Student funkcijski određuje i Jezik i Sport, pa vrijede višeznačne ovisnosti:

STUDENT ->> SPORT i STUDENT ->> JEZIK

To dokazuje da se mogu pojavljivati redundantni podaci, koji mogu dovesti do

anomalija u ažuriranju baze podataka, zato što moraju postojati sve kombinacije

parova sport – jezik. Anomalija ove vrsti, odnosno ovisnost, riješit će se

«razbijanjem» početne relacije na dvije:

Student Sport Ivić PLIVANJE Ivić TRČANJE

Student Jezik Ivić NJEMAČKI Ivić ENGLESKI

Page 28: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

28

Dekompozicija tablica je reverzibilna, to jest, da se prirodnim spajanjem tablica po

ključu student, dobija izvorna tablica kombinacija sportova i jezika.

2.6 Normalizacija

Normalizacija je postupak uklanjanja nepoželjnih funkcijskih ovisnosti, a provodi se

radi postizanja dobrih statičkih i dinamičkih svojstava baze podataka:

- učinkovitost pristupa podacima i jednostavnost njihova pretraživanja

- kontrola nad redundancijom ( višestrukim pojavljivanjem podataka u bazi)

- kontrola nad anomalijama koje se mogu pojaviti kod ažuriranja podataka

Definirano je šest normalnih formi, a u praksi je potrebno i najčešće dovoljno, dovesti

sve relacije u treću normalnu formu.

2.6.1 Prva normalna forma

Relacija se nalazi u prvoj normalnoj formi (1NF) ako je svaki njen atribut atomičan,

što znači da sadrži samo jednu vrijednost, nikako više vrijednosti odvojenih npr.

zarezom. Dvodimenzionalna tablica ima u svakoj ćeliji samo jednu elementarnu

vrijednost, koja se ne može dalje rastaviti bez gubitka smisla informacije. Ključ uvijek

ima jedinstvenu vrijednost, a za svaku njegovu vrijednost može se pojaviti samo jedna

vrijednost neključnog atributa:

Definicija: Relacija se nalazi u prvoj normalnoj formi (1NF) ako su svi neključni

atributi funkcijski zavisni o ključu relacije.

Primjer 1: Čest je slučaj da se cijene artikala vode u Eurima, a prikazuju u Kunama,

množeći iznos u Eurima tečajem Kune:

Tablica:Knjige_0

#Naslov Cijena u EURIMA

Tečaj Kune

SQL 50,00 7,42 Baze podataka 60,00 7,42 DOS 30,00 7,42

Ključ tablice Knjige_0 je Naslov ( # ispred imena označava primarni ključ). Jasno je

da cijena svake knjige ovisi o kojoj se knjizi radi, a to nam jednoznačno određuje

Page 29: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

29

naslov knjige. Prema tome, neključni atribut cijena ovisi o ključu. Tečaj Kuna – Euro,

nipošto ne ovise o naslovu knjige, dakle, tablica Knjige_0 nije u prvoj normalnoj

formi. Tablica koja nije u prvoj normalnoj formi ne može se zvati relacijom, jer je po

definiciji relacija barem u prvoj normalnoj formi.

Rješenje: dekomponirati tablicu Knjiga_0 u dvije:

Tablica:Knjige_1

#Naslov Cijena u EURIMA

SQL 50,00 Baze podataka 60,00 DOS 30,00

Tablica:Tečajna_Lista_1

#Datum Tečaj Kune 09.12.2002 7,42

Knjige_1 je u prvoj normalnoj formi, jednako kao i Tečajna_Lista_1.

Primjer 2:

Tablica:Knjige_0

Kataloška oznaka Naslov

Broj strnica Izdavač Pošta Mjesto Autori

1 Baze podataka 162 DRIP 10000 ZAGREB Varga 2 SQL i relacijski

model podataka 419

ZNAK 10000 ZAGREB Vujnović 3 ORACLE 7 780 ZNAK 10000 ZAGREB Hrenić 4 Dalmatinska

kuhinja 420

LOGOS 21000 SPLIT Biluš Rode

5 Dalmatinski kolači

360 LOGOS 21000 SPLIT

Biluš Kesić

U tablici Knjige_0, upisana je adresa izdavača, ali isto tako prezimena svih autora

naslova. Tablica nije u prvoj normalnoj formi, jer podaci u koloni autori nisu atomični

( dakle, niti se ne može utvrđivati funkcijska ovisnost, jer jedan atom može funkcijski

ovisiti, a drugi ne).

Page 30: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

30

Rješenje: Rascijepiti neatomične podatke u koloni Autori, dodavanjem redaka za

svakog autora, kako bi u jednoj ćeliji Autor, bude samo jedno prezime.

Tablica:Knjige_0A ( nema primarni ključ)

Kataloška oznaka Naslov

Broj stranica Izdavač Pošta Mjesto Autor

1 Baze podataka 162 DRIP 10000 ZAGREB Varga 2 SQL i relacijski model

podataka 419

ZNAK 10000 ZAGREB Vujnović 3 ORACLE 7 780 ZNAK 10000 ZAGREB Hrenić 4 Dalmatinska kuhinja 420 LOGOS 21000 SPLIT Biluš 4 Dalmatinska kuhinja 420 LOGOS 21000 SPLIT Rode 5 Dalmatinski kolači 360 LOGOS 21000 SPLIT Biluš 5 Dalmatinski kolači 360 LOGOS 21000 SPLIT Kesić

Sada imamo atomične podatke, te moramo definirati primarni ključ relacije. Postavlja

se pitanje što određuje atribut Broj stranica? Jasno je da broj stranica knjige ovisi o

Kataloškoj oznaci. Ključ mora imati jedinstvenu vrijednost, a u slučaju kada su jedan

naslov napisala dvojica ili više autora, vrijednost atributa Kataloška oznaka se

ponavlja. Stoga, definirajmo primarni ključ slaganjem atributa Kataloška oznaka +

Autor (Relacija Knjige_1B). Primjetimo, hipotetski slučaj kada bi jedan naslov mogao

napisati samo jedan autor, tada bi ključ mogao biti jednostavan, činio bi ga samo

atribut Kataloška oznaka. ( Relacija Knjige_1A).

Relacija:Knjige_1A ( jednostavan ključ)

#Kataloška

oznaka Naslov

Broj stranica

Izdavač Pošta Mjesto Autor 1 Baze podataka 162 DRIP 10000 ZAGREB Varga 2 SQL i relacijski

model podataka 419

ZNAK 10000 ZAGREB Vujnović 3 ORACLE 7 780 ZNAK 10000 ZAGREB Hrenić 4 Dalmatinska

kuhinja 420

LOGOS 21000 SPLIT Biluš 5 Dalmatinski kolači 360 LOGOS 21000 SPLIT Biluš

Page 31: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

31

Tablica:Knjige_1B(složeni ključ)

#Kataloška oznaka Naslov

Broj stranica Izdavač Pošta Mjesto #Autor

1 Baze podataka 162 DRIP 10000 ZAGREB Varga 2 SQL i relacijski

model podataka 419

ZNAK 10000 ZAGREB Vujnović 3 ORACLE 7 780 ZNAK 10000 ZAGREB Hrenić 4 Dalmatinska

kuhinja 420

LOGOS 21000 SPLIT Biluš 4 Dalmatinska

kuhinja 420

LOGOS 21000 SPLIT Rode 5 Dalmatinski kolači 360 LOGOS 21000 SPLIT Biluš 5 Dalmatinski kolači 360 LOGOS 21000 SPLIT Kesić

Svi neključni atributi ovise o ključu, pa možemo kazati da smo doveli relaciju u prvu

normalnu formu ( u oba slučaja).

Usprkos tome što smo relaciju doveli u prvu normalnu formu, uočavamo značajne

anomalije, prije svega u redundantnosti podataka, što vodi nepotrebnom trošenju

medija za spremanje podataka i vrlo je otežano mijenjanje. Dakle, nije dovoljno

dovesti relaciju u prvu normalnu formu.

2.6.2 Druga normalna forma

Zavisnost neključnih atributa o dijelovima ključa je uzrok anomalija. Poželjna je

potpuna funkcijska zavisnost o cijelom ključu, odnosno o svim dijelovima složenog

ključa.

Relacija se nalazi u drugoj normalnoj formi (2NF) ako su svi neključni atributi

potpuno funkcijski zavisni o bilo kojem (mogućem) ključu relacije i to o svim

dijelovima ključa.

Relacija Knjige_1A ima jednostavan ključ, dakle čini ga samo jedan atribut i ona

samim tim zadovoljava pravilo druge normalne forme. Dakle, možemo reći da je

relacija odmah u drugoj normalnoj formi, ako joj je ključ jednostavan.

Relacija Knjige_1B nije u drugoj normalnoj formi, jer neključni atributi Pošta i

Mjesto, doduše ovise o dijelu ključa Kataloški broj, tranzitivno preko Izdavača, ali ne

ovise o dijelu ključa Autor. Isto tako, određeni autor funkcijski određuje Naslov, ali

ne i izdavača, jer isti autor može napisati Naslov i za drugog izdavača.

Page 32: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

32

Rješenje: Napraviti pouzdanu dekompoziciju relacije ( reverzibilnu), tako da se

neključni atributi koji ovise samo o dijelu ključa premjeste u novu relaciju, skupa s

dijelovima ključa koji ih funkcijski određuje. U našem primjeru, o dijelu ključa Autor,

ne ovisi izdavač, pa prema tome niti atributi koji ovise o izdavaču. Kataloška oznaka

određuje autora, pa ćemo izdvojiti atribute Kataloška oznaka i Autor u posebnu

relaciju.

Relacija:Knjige_2

#Kataloška oznaka Naslov

Broj starnica Izdavač Pošta Mjesto

1 Baze podataka 162 DRIP 10000 ZAGREB 2 SQL i relacijski

model podataka 419

ZNAK 10000 ZAGREB 3 ORACLE 7 780 ZNAK 10000 ZAGREB 4 Dalmatinska

kuhinja 420

LOGOS 21000 SPLIT 5 Dalmatinski kolači 360 LOGOS 21000 SPLIT

Relacija: Knjige_Autori_2

#Kataloška

oznaka #Autor 1 Varga 2 Vujnović 3 Hrenić 4 Biluš 4 Rode 5 Biluš 5 Kesić

Nakon dekompozicije, obje su relacije u drugoj normalnoj formi.

2.6.3 Treća normalna forma

Još uvijek nalazimo na redundantnost podataka. Naime, Izdavač jednoznačno

određuje Poštu i Mjesto izdavača. Štoviše, Mjesto je funkcijski određeno poštanskim

brojem. Anomalija ovakvih podataka se ogleda u nepotrebnom trošenju medija za

spremanje, kao i potrebom za promjenama u više redaka poštanskog broja i mjesta

kad se izdavač preseli u drugo mjesto.

Page 33: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

33

Relacija se nalazi u trećoj normalnoj formi(3NF) ako ni jedan neključni atribut nije

tranzitivno ovisan o bilo kojem ključu relacije.

Iz prethodne definicije slijedi jednostavna i popularna definicija 3NF, koja se lako

pamti:

Svaki neključni atribut mora ovisiti o ključu, cijelom ključu i ni o čemu drugom

osim o ključu.

U našem primjeru nalazimo tranzitivne zavisnosti: Izdavač je određen Kataloškim

brojem, te Izdavač funkcijski određuje Poštu. Dakle, Pošta ovisi o ključu, ali

tranzitivno preko Izdavača. Nadalje, Mjesto ovisi o Izdavaču tranzitivno preko Pošte.

Dvije tranzitivne ovisnosti uklanjamo pouzdanim dekomponiranjem relacije Knjige_2

u relacije, Knjige_3, Izdavači_3 i Pošte_3:

Relacija:Knjige_3

#Kataloška oznaka Naslov

Broj stranica Izdavač

1 Baze podataka 162 DRIP 2 SQL i relacijski

model podataka 419

ZNAK 3 ORACLE 7 780 ZNAK 4 Dalmatinska

kuhinja 420

LOGOS 5 Dalmatinski kolači 360 LOGOS

Relacija:Izdavači_3

Izdavač Pošta DRIP 10000 ZNAK 10000 LOGOS 21000

Relacija:Pošte_3

Pošta Mjesto 10000 ZAGREB 21000 SPLIT

Page 34: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

34

2.6.4 Boyce-Coddova normalna forma

Dovođenje relacije u treću normalnu formu je zadovoljava većinu praktičnih

primjena. Iako ona rješava ponašanje neključnih atributa, ne rješava problem koji se

javlja kod složenih primarnih ključeva. Prepostavimo trgovačku kuću koja ima više

referenata prodaje. Svaki od njih održava kontakt s jednim kupcem i prodaje mu jedan

ili više artikala.

Relacija: Referent_Artikal_3

#Referent #Artikal Kupac Ivić Papir Naprijed Jurić Olovke Polet Marić Omotnice Srima Marić Bilježnice Srima Tomić Flomasteri Swing

U gornjoj relaciji vrijede funkcijske zavisnosti: (Referent,Artikal) � Kupac, te

Kupac � Referent, jer referent veže određeni artikal uz jednog kupca, a kupac je

vezan samo uz jednog referenta. Iako je relacija u trećoj normalnoj formi, uočava se

redundancija podataka, koja uzrokuje anomalije u obradi: informacija da je kupac

Srima vezan uz referenta Marić, jednom po artiklu omotnice, a drugi put po artiklu

bilježnice, prisutna je u dvije n-torke. Ova se redundancija otklanja dekompozicijom

na dvije relacije.

Relacija je u Boyce-Coddovoj normalnoj formi (BCNF) ako sve funkcijske

zavisnosti relacije proizlaze iz njezinog ključa.

Relacija je u BCNF ako ne postoji ni jedan tranzitivno zavisan atribut, uključujući i

atribute ključa. BCNF je gotovo identična 3NF, s time da uvjete o tranzitivnoj

neovisnosti proteže i na sam ključ.

Iz definicije je jasno zašto relacija Referent_Artikal_3 nije u BCNF. Funkcijska

zavisnost Kupac � Referent ne proizlazi iz ključa.

Page 35: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

35

Relacija: Kupac_Artikal_BCNF

#Kupac #Artikal Naprijed Papir Polet Olovke Srima Omotnice Srima Bilježnice Swing Flomasteri

Funkcijska zavisnost: (Kupac, Artikal) � 0.

Relacija: Kupac_Referent_BCNF

#Kupac Referent Naprijed Ivić Polet Jurić Srima Marić Swing Tomić

Funkcijska zavisnost: Kupac � Referent.

Gore provedena dekompozicija nije reverzibilna, jer je izgubljena funkcijska

zavisnost Referent � Artikal, dakle sačuvana je informacija o tome koji se artikli

prodaju svakom kupcu, te koji referent opslužuje svakog kupca, ali je izgubljena

informacija po kojim artiklima referent poslužuje kupca.

U nekim prilikama možemo zaključiti, da je bolje sačuvati relaciju u 3NF, nego li

izgubiti dio informacija.

2.6.5 Četvrta normalna forma

Kod višeznačne ovisnosti smo već vidjeli moguću anomaliju:

Relacija: Student_Sport_Jezik_BCNF

#Student #Sport #Jezik Ivić PLIVANJE NJEMAČKI Ivić TRČANJE ENGLESKI Ivić PLIVANJE ENGLESKI Ivić TRČANJE NJEMAČKI

Kako je očito da u relaciji ne vrijedi niti jedna funkcijska zavisnost, relacija je u

BCNF. Ipak, velika redundancija rezultira u manjkavosti korištenja medija za

spremanje podataka i otežava izmjene podataka.

Page 36: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

36

Relacija u kojoj je zadan skup funkcijskih i višeznačnih ovisnosti, u četvrtoj je

normalnoj formi (4NF), ako je svaka višeznačna ovisnost X ->> Y trivijalna ili je X

ključ relacije.

Pouzdanim dekomponiranjem se relacija prevodi u dvije nove relacije, koje spajanjem

rezultiraju polaznom relacijom, pa kažemo da je dekompozicija reverzibilna, dakle

pouzdana.

Relacija: Student_Jezik_5

#Student #Jezik Ivić ENGLESKI Ivić NJEMAČKI

Relacija: Student_Sport_5

#Student #Sport Ivić PLIVANJE Ivić TRČANJE

2.6.6 Peta normalna forma

Relacija R, u kojoj je zadan skup funkcijskih i spojnih ovisnosti, u petoj je

normalnoj formi (5NF), ako je svaka spojna zavisnost *(R1,R2, ... Rn) trivijalna ili

je svaki Ri ključ u R.

Relacija je u 5NF, ako su iz nje izbačene sve spojne zavisnosti, odnosno, ako se više

ne može pozdano (reverzibilno) dekomponirati.

Relacija: Student_Instrument_Nastavnik

Br.Indeksa Instrument Nastavnik 1 Violina Anić 1 Flauta Perić 2 Violina Perić

Page 37: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

37

Problem se rješava dekompozicijom na 3 relacije:

Relacija: Student_Nastavnik_5

Br.Indeksa Nastavnik 1 Anić 1 Perić 2 Perić

Relacija: Student_Instrument_5

Br.Indeksa Instrument 1 Violina 1 Flauta 2 Violina

Relacija: Instrument_Nastavnik_5

Instrument Nastavnik Violina Anić Flauta Perić Violina Perić

No, većina se relacija koje predstavljaju implementaciju n – arne ( n>2) veze ne može

dekomponirati, jer ponovnim spajanjem nastaju nepostojeće n-torke:

Relacija: Student_Instrument_Nastavnik_S

Br.Indeksa Instrument Nastavnik 1 Violina Anić 1 Violina Perić 1 Flauta Perić 2 Violina Perić

nova pogrešna n-torka

Page 38: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

38

3 Životni ciklus baze podataka

Životni ciklus baze podataka slijedi identične korake koji se primjenjuju u analizi i

oblikovanju programske podrške, koji su dobro utvrđeni sedamdesetih godina. Valja

kazati, kako postavke programskog inženjerstva vuku svoje korijene iz inženjerstva

općenito, odnosno graditeljstva. Naime, životni ciklus jedne zgrade, započinje

stvaranjem idejnog rješenja, praćenog skicama i modelima, koje izrađuju arhitekti,

surađujući s investitorom i budućim korisnicima. Metodom usmjerenog razgovora

(interview) arhitekt saznaje želje investitora i uklapa ih u estetski prihvatljiva i

tehnički izvediva rješenja. Nakon toga građevinski inženjeri izvode statičke i

dinamičke proračune, s ciljem izračunavanja nosivosti temelja, zidova, kako bi zgrada

izdržala teret vlastite konstrukcije, te dinamička naprezanja uzrokovana vjetrom ili

možebitnim zemljotresom. Dizajneri interijera oblikuju unutrašnje uređenje do

najsitnijeg detalja.

Nakon što je zgrada izgrađena, slijedi njeno korištenje, održavanje, otklanjanje

uočenih nedostataka, a ponekad i naknadne modifikacije u cilju zadovoljavanja

zahtjeva koji su definirani tijekom eksploatacije objekta. Identični životni ciklus

prolazi informacijski sustav, pa tako i baza podataka, kao njegova sastavnica.

Možemo povući usporedbu baze podataka s temeljem građevine.

Dakle, životni ciklus baze podataka možemo podijeliti na korake:

- Analiza

- Oblikovanje

- Implementacija

- Eksploatacija

- Održavanje i naknadne modifikacije

3.1 Faze životnog ciklusa baze

Analiza – vrlo je vjerojatno da je neki posao odavna obavljan primjenom postojećih

tehnoloških postupaka, prije informatizacije. Postupkom analize, primjenom metode

usmjerenog razgovora (interview), s osobljem koje pozna tehnologiju posla, se

identificiraju izlazi koje informacijski sustav mora producirati. Da bi se izlazi mogli

producirati, potrebno je programsku podršku snabdjeti određenim ulazima. Neki ulazi

Page 39: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

39

će se definirati u tijeku izvođenja programa, no neki drugi moraju biti pohranjeni na

mediju za mosaovnu pohranu podataka, najčešće magnetskim diskovima. Projektant

baze podataka mora identificirati upravo te, tzv. perzistentne ulaze. Naprimjer, kod

prodaje automobil, sve relevantne informacije o vozilu valja pohraniti u bazi

podataka. Kupac definira kriterije koje mora zadovoljiti automobil od njegova interesa

– kriterije pretraživanja. Ovi kriteriji ne moraju biti perzistentni, već se definiraju prije

početka pretraživanja, te se zaboravljaju nakon obavljene potrage. Dakako, podržava

li informacijski sustav naknadno pretraživanje, onda će i kriterije valjati sačuvati.

Naime, u momentu pretrage kupac može ne pronaći željeni auto, a IS može osigurati

spremanje njegovih kriterija, te po njima pretraživati, npr. jednom dnevno, da li se u

međuvremenu pojavio auto koji zadovoljava kriterije i o tome kupca obavijestiti e-

mailom.

Logičko ( konceptualno) oblikovanje – faza analize završava definicijom pojmova i

opisom entiteta, njihovih atributa, te mogućih domena, najčešće prirodnim jezikom

(hrvatskim ili engleskim). Nakon toga, valja identificirati entitete, atribute i domene,

te metode - funkcije. Najčešće imenice iz opisa prirodnim jezikom vode entitetima i

njihivim atributima, a pridjevi i brojčani podaci definiraju domene. Rezultat ovog

koraka su relacije prikazane prikladnim simbolima. Vrlo je vjerojatno da će u ovoj

fazi relacije posjedovati nepoželjnu redundantnost, kao posljedicu nedopuštenih

funkcijski zavisnosti, pa se primjenjuje postupak normalizacije, iterativno, sve dok ne

dovedemo sve relacije barem i obavezno u treću normalnu formu (3NF). Nakon toga

slijedi utvrđivanje međusobnih veza među relacijama i njihov prikaz modelom

Entiteti – veze. Dakako, u prikazu se koristimo simbolima, zavisno izabranoj metodi.

Implementacija – je postupak definicije relacija u bazi podataka, pri čemu entiteti (ili

tipovi entiteta) postaju tablice, atributi kolone, a domena služi kao podloga za izbor

tipa podatka i eventualna integritetska ograničenja ( ograničenje null vrijednosti,

ograničenje područja vrijednosti uvjetom koji podaci moraju zadovoljiti ili

referencijalnim, tj. integritetom stranog ključa). Slijedi izrada objekata baze podataka,

najčešće pomoću grafičkog korisničkog sučelja na razvojnom računalu proizvođača

IS, te generiranje komandi upitnog jezika (SQL), koje se koriste za prenošenje

objekata na odredišna računala kupca.

Page 40: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

40

Statička i dinamička analiza – uvrđivanjem tipova podataka svake kolone, te

poznavanjem načina kako korišteni RDBMS sprema podatke na mediju, a na temelju

procjene broja n-torki, odnosno redaka svake tablice, procjenjuje se fizička veličina

tablica. Isto tako, u najranijoij fazi definicije projeta, potrebno je definirati odzivna

vremena kritičnih, često izvođenih upita. Najbolje je da definicija odzivnih vremena

bude kvantificirana ( npr. 3 sekunde nakon klika na dugme «Traži» ). Da bi odzivna

vremena bila zadovoljena, važno je pravilno procijeniti važnost i ušestalost pojedinih

upita, te broj klijenata koji će istovremeno «napadati» bazu podataka. Analiza upita i

odzivnih vremena rezultira definiranjem odgovarajućih indeksa, koji značajno

ubrzavaju pretraživanje, ali nažalost usporavaju izmjene ( upisivanje – insert,

promjene – update i brisanje – delete ), jer kod svake izmjene indeksi moraju biti

reorganizirani. Stoga težimo identifikaciji minimalnog broja indeksa, koji

zadovoljavaju kritične upite nad «vrućim» tablicama. Kako indeksi «troše» prostor na

mediju za pohranu podataka, izračunava se «statika» indeksa na temelju broja redaka

tablice i poznavanja organizacije indeksa korištenog RDBMS. Ova veličina, zajedno

s veličinom prostora za pohranu tabličnih podataka, služe za procjenu veličine

potrebnog prostora medija za masovnu pohranu ( diska).

Eksploatacija i održavanje baze podataka - već prije početka eksploatacije

potrebno je planirati sigurnost podataka i to u smislu neovlaštenog pristupa podacima,

te čuvanja pričuvnih podataka – backupa. Naime, moguće elementarne nepogode ili

teroristički napadi mogu uništiti cijeli računalni sustav, skupa s podacima. Isto tako

kvar računalnog hardvera ili čak upad «hackera» mogu uzrokovati gubitak podataka. I

pored takvih katastrofa, organizacija mora nastaviti s radom i imati na raspolaganju

podatke unijete u bazu do momenta katastrofe. Vremenski period ponovne

raspoloživosti podataka može biti nekoliko sekundi ili nekoliko dana nakon gubitka,

pa zavisno definiciji ovog intervala, izrađujemo strategiju backupa, počev od «stand-

by-backup-baze» za brzi nastavka rada, do klasničnog pristupa zamjene neispravnih

dijelova računala i restauracije podataka, što može potrajati nekoliko sati ili čak dana.

Tijekom eksploatacije potrebno je pratiti odzivna vremena i korist predviđenih

indeksa, te po potrebi brisati nekorisne i kreirati nove korisne indekse.

Page 41: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

41

U ranim fazama projekta, nije moguće predvidjeti sve funkcionalnosti informacijskog

sustava, ili još češće svjesno se ide s minimalnim funkcijama, kako bi se izišlo na

tržište prije konkurencije i ostvariovao prihod. Potom se sustav obogaćuje, a to

zahtijeva i promjene strukture baze podataka. Vrlo je važno promjenama ne ugroziti

postojeće stanje, kako u smislu funkcionalnosti, tako i u smislu odzivnih vremena.

3.2 Vrste baza podataka

Prije razrade svih koraka životnog ciklusa baze, osvrnimo se na vrste baze podataka.

Na jednom polu su sustavi koji podupiru donošenje odluka, DSS (Decision support

system), koji se samo i isključivo pretražuju. Dakle nema izmjena podataka, samo se

čitaju. Kod ovakvih sustava možemo definirati neograničeni broj indeksa ( jasno, on

je ograničen veličinom medija i maksimalnim brojem indeksa koje RDBMS

podržava).

Na drugom polu su baze koje nitko nebi pretraživao, već bi samo upisivale podatke

(insertirale) podatke, pa niti ne trebamo definirati indekse. Naravno, ovo su samo

ekstremni slučajevi, dok je najčešće istovremeno pretraživanje i promjena podataka, a

takve baze nazivamo OLTP ( on-line transaction processing), dakle, promjene se

obavljaju u živo, usporedno s pretraživanjem. Baze ove vrsti, mogu imati ograničeni

broj indeksa, jer indeksi ubrzavaju pretraživanje, ali usporavaju promjene, jer se

zajedno s promjenom podataka, mora ažurirati i stablo svih indeksa, koji sadrže

promijenjeni podataka. Ovdje je to istaknuto iz razloga denormalizacije baze. Naime,

normalizacija uklanja redundantnost i anomalije održavanja podataka, ali vodi većem

broju tablica, koje su zapisane na različitim cilindrima diska, najčešćeg medija za

pohranu baza. Upitima se tablice spajaju, a to je «skupa» operacija, pa su upiti mnogo

sporiji, nego li kad nema spajanja, tj. kad su podaci «pregledno» u istoj tablici.

Potrebno je pomiriti ove dvije suprotnosti, postupkom denormalizacije. Moramo

razlikovati pojmove ne-normalizirane i denormalizirane strukture. Naime, dopušteno

je postojanje redundantnih zapisa podataka, ali uz jasno razlikovanje «master»

podatka, koji implementira atribut iz normalizirane relacije, od «slave» podatka, koji

ubrzava pretraživanje i mora vjerno slijediti promjene vrijednosti «master» podatka.

Funkcija slijeđenja se može ostvariti definiranjem okidača ( trigera ), koje «okida»

promjena «master» podatka, te oni izvođenjem adekvatne SQL naredbe ažuriraju

«slave» podatak. Drugi način denormalizacije se može provesti upotrebom

Page 42: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

42

materijaliziranih pogleda. Naime, pogled (view) se definira pomoću SQL naredbe

koja spaja više relacija ( tablica i drugih pogleda), radi olakšanog pisanja kasnijih

upita, te radi ograničenja pristupa objektima baze ( primjenom operacija projekcije i

restrikcije). Klasični pogled nema fizičkog zapisa podataka na mediju, već obavlja

projekciju, restrikciju i spajanje dinamički, kada se upit definiran pogledom izvodi.

Možemo sebi predočiti pogled, kao zamjenu složenog upita jednim imenom, a

pozivom pogleda, se zapravo izvodi upit koji leži iza tog imena.

Nasuprot tome, materijalizirani pogled ima fizički zapis podataka na magnetskom

mediju, kao «slave» podatke, pa se pozivom imena materijaliziranog pogleda, zapravo

čita fizički zapis kopije podataka. RDBMS osigurava da kopija podataka iz različitih

izvornih tablica vjerno slijedi promjene izvornoh, «master» podataka. Promjene

kopije se obavljaju kod izmjene «master» podataka, pa se tijekom upita nad

materijaliziranim pogledom ne obavlja dinamički spajanje većeg broja tablica.

Ovom tehnikom možemo postići bazu koja apsolutno udovoljava i najstrožim

teoretskim zahtjevima, a da isto tako kritični upiti budu pokriveni materijaliziranim

pogledima, čime se ostvaruju iznimno dobra odzivna vremena. Naravno, broj

materijaliziranih pogleda mora biti ograničen, jer bi u protivnom usporio promjene

podataka kod OLTP baza, pa treba vrlo brižljivo odabrati upite pokrivene

materijaliziranim pogledom.

3.3 Postupak oblikovanja baze podataka

3.3.1 Izrada modela

Aktivnost oblikovanja na svakom polju djelatnosti, karakterizira izrada modela. Od

male djece koja izrađuju modele realnih objekata pomoću Lego kockica, do

nuklearnih fizičara koji izrađuju modele ponašanja jezgre atoma, fizički i mentalni

modeli objekata iz realnog svijeta pomažu shvaćanju ponašanja realnih objekata i

zbivanja, istraživanju ideja i razumijevanju događaja.

Modeli se mogu koristi za:

- opis

- specifikaciju

- istraživanje

Page 43: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

43

- komunikaciju

- analizu

- kategorizaciju

- imitaciju

ponašanja realnih objekata i zbivanja.

Važno je uočiti konflikt: model koji osigurava mnogo detalja da bi sustav opisao

potpuno, može sakriti ili otežati shvaćanje cjelovitosti. To je stvorilo ideju stvaranja,

tzv. ugniježđenih ili postupnih modela. Uzmimo na primjer izučavanje povijesti

Hrvata, koju ne možemo učiti izolirano od povijesnih zbivanja europske i svjetske

povijesti u svakom razdoblju. Učimo li istovremeno i svjetsku i hrvatsku povijest,

dolazimo do toliko detalja, da od njih ne vidimo osnovne značajke razdoblja. Zato se

učenje provodi najprije učenjem svjetske povijesti u osnovnim crtama, pa onda

hrvatske povijesti detaljnije ( u osnovnoj školi), onda se postupak ponavlja s više

detalja o svjestkoj povijesti itd. ( u srednjoj školi).

Dakle, uočavamo postupnost u razumijevanju i svladavanju problema, pa isti pristup

valja primijeniti i kod modeliranja objekata i zbivanja – odnosno tehnoloških

postupaka – predmeta informatizacije.

3.3.2 Različiti aspekti sustava

Model mora prikazivati realne objekte i zbivanja selektivno, uzimajući u obzir bitna

obilježja. U pravilu model ispušta mnogo više detalja,nego li ih uključuje. Ako bi

model uključio sve moguće detalje realnih objekata, pretpostavimo li da je to opće

moguće, bio bi identičan realnom životu, pa vjerojatno teško razumljiv i prihvatljiv.

Oslikajmo ideju primjerom. Bacimo kamenčić s visine 10 m i zanima nas brzina

kojom udari pri padu na tlo. Kao što je poznato iz fizike, brzinu računamo po modelu

opisanom formulom:

v= SQRT( 2gh)

gdje je g ubrzanje zemljine sile teže ( 9.81 m/s2) a h visina ( 10 m ) i dobijemo:

v = 14.8 m/s

Page 44: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

44

Pri tom smo zanemarili brojne činjenice koje utiču na slobodan pad, kao trenje zraka,

tlak zraka, utjecaj mogućeg vjetra itd. Ako bi vrlo kompleksnim modelom uvažili sve

te utjecaje, odstupanje rezultata bi bilo neznatno, a račun složen.

Ako pak računamo brzinu kojom satelit može pasti na zemlju, ranije zanemareni

utjecaji se moraju uzeti u račun, jer je njihov doprinos značajan. Dakle, osnovno u

izradi modela je izbor parametara od utjecaja na konačan rezultat, a u inženjerskom

pristupu, nastojimo što jednostavnijim modelom dobiti najmanje loše rezultate.

Slijedi zaključak, da u cilju postizanja što boljeg modela valja koristiti različite

tehnike zajedno. Na primjer, kod medicinskog ispitivanja pacijenta, liječnik stvara

model njegova zdravstvenog stanja koristeći nalaze krvi, krvni tlak, rentgentske i

ultrazvučne snimke, te analizom svih nalaza zaključuje o zdravstvenom stanju.

Isto tako moramo i mi, upotrijebiti različite tehnike koje se fokusiraju na različite

aspekte sustava, ali koje se nadovezuju i isprepliću, dajući kompletnu sliku sustava.

Koristit ćemo:

- Model entiteti – veze

- Funkcijski model

- Model toka podataka

3.3.3 Model entiteti – veze

Cilj modeliranja je definirati i razumjeti činjenice značajne za poslovnu aktivnost,

koje informacije mora pamtiti, te vezu među njima.

Koristi se pristup od vrha nadolje (Top-Down), polazeći najprije od utvrđivanja

entiteta, a potom njihovih atributa.

Pojmovi od značaja u analizi entiteta

- Entitet

- Veza

- Atribut

- Jedinstveni identifikator (primarni ključ)

Page 45: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

45

- Podtip

- Nadtip

Što može biti entitet ?

Bilo što o čemu možemo prikupljati informacije. Bilo koja imenovana stvar. Sve ono

što ima posebna svojstva, koja se mogu razlikovati, bilo u domenu realnih objekata i

zbivanja ili u sferi apstraktnog mišljenja. Entitet je obično imenica u rečenici

napisanoj tijekom usmjerenog razgovora (interview) s korisnicima postojeće

tehnologije.

Primjer entiteta:

OSOBA, POSAO, PROJEKT, TVRTKA, ODJEL, ZAPOSLENIK, K UPAC,

DOBAVLJA Č

Dobro je potražiti i sinonime: drukčija imena koja znače isto. Na primjer, što je

KUPAC, TVRTKA, DOBAVLJA Č ? Vjerojatno ORGANIZACIJA.

Zavisno od izabrane metode za prikazivanje modela, entiteti se mogu prikazati jednim

od grafičkih simola:

3.3.4 Veze

Veza predstavlja bilo koji način na koji dva objekta istog ili različitog tipa mogu biti

upućeni jedan na drugoga. Svaku je vezu dobro imenovati, naprimjer:

ZAPOSLENIK obavlja POSAO

POSAO je dodijeljen ZAPOSLENIK-u

Veze su opisane stupnjem veze i opcionalnošću:

U našem primjeru, stupanj veze odgovara na pitanje: «Koliko poslova može obavljati

jedan zaposlenik?»

OSOBA OSOBA OSOBA

Page 46: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

46

Odgovor: Jedan zaposlenik može obavljati više poslova.

Pitanje: «Koliko zaposlenika može obavljati isti posao?»

Odgovor: Više zaposlenika može obavljati istu vrst posla.

Dakle, veza ZAPOSLENIK – POSAO je M:N, tj. više prema više.

Opcionalnost veze

Postavlja se pitanje, da li ZAPOSLENIK-u uvijek mora biti dodijeljen POSAO, ili

može i ne mora biti ?

Odgovor: ZAPOSLENIKU mora biti dodijeljen POSAO.

Sada vezu možemo čitati: Svaki ZAPOSLENIK obavlja jedan ili više POSLOVA, ili

obratno, svaki POSAO je dodijeljen jednom ili više ZAPOSLENIKA.

Prikaz veze:

Martinova notacija:

Chenova notacija:

ORACLE notacija:

ZAPOSLENIK

POSAO

obavlja

dodijeljen

ZAPOSLENIK

POSAO obavlja

M

N

ZAPOSLENIK POSAO

Page 47: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

47

Stupanj ili kardinalni broj veze:

Naziv veze Martinova notacija Chenova notacija ORACLE notacija

Jedan prema više

1:N 1:N

Više prema više

M:N M:N

Jedan i samo jedan

1:1 1:1

Opcionalnost veze:

Naziv veze Martinova notacija Chenova notacija ORACLE notacija

Opcionalna veza

(može biti) jedan

0,1 0,1

Opcionalna veza

(može biti) više

0,N 0,N

Obvezna veza

(mora biti ) jedan

1 1

Obvezna veza

(mora biti ) barem

jedan ili više

1,N 1,N

Page 48: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

48

Pravilo čitanja veza:

«Svaki ( entitet )

mora biti /1/

ili ( veza )

može biti /0/

jedan ili više /N/

ili (entitet)

jedan i samo jedan /1/.»

Primjer: Svaki zaposlenik obavlja barem jedan ili više poslova, te svaki posao je

dodijeljen jednom ili više zaposlenika.

Evo nekih korisnih parova imena veza:

temelji se na – osnov za

kupuje se od – isporučuje

imenovan za – povjeren

dio od – sastavljen od

odgovoran za – u nadležnosti

3.3.5 Rješenje veze više prema više

Jedan projekt može obavljati više zaposlenika, a isto tako jedan zaposlenik može

istovremeno ili u različitim vremenima, raditi na više projekata.

Vezu više prema više ( M:N) teško je implementirati i održavati, stoga se ona

dekomponira u dvije veze 1 naprema više ( 0,1:N + 0,1:M ).

ZAPOSLENIK

PROJEKT uključen

0,M

0,N

Page 49: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

49

Dakle, veza M:N se dekomponira u dvije veze 1:N, umetanjem presječnog (eng.

intersection) entiteta, pri čemu je kardinalni broj (stupanj veze), na strani polaznih

entiteta 1 uz zadržanu opcionalnost, dakle 1 ili 0,1, a na strani presječnog entiteta 1,M.

Dakle, polazna veza «Svaki Zaposlenik može biti uključen u više projekata i Svaki

projekt može uključivati više zaposlenika» je sačuvana. Presječni entitet će imati dva

strana ključa, koji su primarni ključevi u polaznim entitetima, a oni zajedno čine

primarni ključ u presječnom entitetu.

3.3.6 Rekurzivna veza

Rekurzivna veza predstavlja vezu entiteta sa samim sobom. Koristi se za prikazivanje

hijerarhije nelimitiranog broja kompatibilnih elemenata.

Na primjer, u organizaciji koja je u pravilu hijerarhiski uređena, svaki zaposlenik ima

pretpostavljenog (šefa), pri čemu ovaj ima svog pretpostavljenog i tako dalje, sve do

vrha piramide.

ZAPOSLE

NIK

ZAP_PROJ

PROJEKT

0,1

M

N

0,1

OSOBA

šef od 0,1

ima šefa 0,N

Page 50: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

50

Dakle, «Svaka osoba može ( glavni šef nema nad-šefa) imati jednog i samo jednog

neposrednog šefa, a neke osobe su šefovi većem broju osoba.»

Rekurzivna veza je zgodna za prikazivanje sastavnica, dio od – sastavljen od,

teritorijalne pripadnosti itd.

3.3.7 Učestalost pojedinih vrsta veza u realnim modelima

Oznaka veze Naziv veze Učestalost

1,M : 0,1 barem jedan ili više prema može biti

jedan

(5) VRLO ČESTO

0,M : 0,1 može biti više prema može biti jedan (4) ČESTO

0,M : 1 može biti više prema jedan i samo

jedan

(3) NIJE RIJETKO

1,M : 1 barem jedan ili više prema jedan i

samo jedan

(2) RIJETKO

0,M : 0,N može biti više prema može biti više (4) ČESTO U POČETNOJ

FAZI

1,M : 0,N barem jedan ili više prema može biti

jedan

(4) ČESTO U POČETNOJ

FAZI

1,M : 1,N barem jedan ili više prema barem

jedan ili više

(1) VRLO RIJETKO

1 : 0,1 jedan i samo jedan prema može biti

jedan

(2) RIJETKO

0,1 : 0,1 može biti jedan prem amože biti

jedan

(2) RIJETKO

1 : 1 jedan i samo jedan prema jedan i

samo jedan

(1) VRLO RIJETKO

Brojevi u zagradama određuju učestalost pojave, 1 = vrlo rijetko, 5=vrlo često.

Page 51: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

51

3.3.8 Atributi

Općenito kazano atributi opisuju entitet.

Namjena atributa je da:

- Kvalificiraju

- Identificiraju

- Klasificiraju

- Kvantificiraju

- Izraze stanje

Postupkom oblikovanja utvrđujemo atribute od značaja u opisu entiteta, a

izostavljamo iz modela one koji nisu.

Tako na primjer, entitet Student može biti opisan atributima:

Atribut Kategorija Opis

Ime Identificira

Prezime Identificira

Završena srednja škola Kategorizira Npr. u statističkoj analizi

prolaznosti s obziro iz koje

škole dolazi

Studijska grupa Klasificira Prema studijskim grupama

Položeni ispiti Kvalificira Za upis na višu godinu

Težina Kvantificira Nije od značaja u IS

Status Izražava stanje Redovito upisan, ponavlja,

parcijalno upisan

Bračno stanje Izražava stanje Noženjen, neudata,

oženjen, udata

Page 52: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

52

Jasno je da neki atributi u IS «Studentska služba» nisu značajni, kao npr. težina pa ih

ispuštamo iz određenog modela. Kod modela nekog drugog IS, npr. «Zdravstvena

ustanova» atribut težina je od značaja, jer je poznato da može biti povezana s nekim

bolestima, pa atribut mora biti uvršten u model.

3.3.9 Opcionalnost atributa

Vrijednosti nekih atributa mogu biti nepoznate i ostati nedefinirane, dok drugi atributi

moraju obavezno biti definirani. Označimo u modelu opcionalnost simbolima:

* mora biti definiran

o može ostati nedefiniran

Na primjer, entitet osoba je opisan atributima:

Osoba

* Ime

* Prezime

* Spol

o Datum rođenja

o Adresa

3.3.10 Jedinstveni identifikator

Kako je već rečeno, svaki entitet ( npr. svaki student ) mora biti identificiran na

jedinstven način, jednim atributom ili skupom atributa. Jedinstveni identifikator u fazi

implementacije postaje primarni ključ.

Atribute koji jedinstveno identificiraju pojavu entiteta simbolički označimo znakom #.

Evo nekih primjera jedinstvenog identifikatora:

Proizvod

# Bar kod

Ispit

#Predmet

Page 53: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

53

#Datum

Osoba

#JMBG

Osoba

#Ime

#Prezime

#Datum rođenja

#Adresa

Naravno, atributi koji identificiraju svaku pojavu entiteta, moraju biti definirani. Što

ćemo izabrati za identifikator, ovisi o konkretnom informacijskom sustavu.

Motorno vozilo

#Broj šasije

Tako na primjer, broj šasije motornog vozila je odličan identifikator, jer svako

motorno vozilo na svijetu ima jedinstvenu oznaku, ali u IS «Trgovina rabljenim

motornim vozilima» cilj je oglasiti prodaju što većeg broja vozila, pa tako imati veću

zaradu, a vlasnici motornih vozila često ne znaju napamet ovaj broj, pa bi izbor

takvog identifikatora, koji mora biti definiran, odvratio mnoge klijente da isti posao

odrade kod konkurentskog internet site, koji ne traži unos kompliciranih oznaka.

Dakle, izbor atributa koji identificiraju entitet, mora biti pažljiv i razlikovat će se

prema namjeni informacijskog sustava.

U fazi implementacije baze podataka, jedinstveni identifikator će postati primarni

ključ tablice. Čest je slučaj da jedan objekt iz realnog svijeta može jedinstveno

identificirati skup većeg broja atributa. Tako osobu u mnogim IS ne može

identificirati samo Prezime, nego npr. skup atributa Ime, Prezime, Datum rođenja i

Adresa stanovanja. Veze među tablicama ostvarujemo odnosom primarni – strani

ključ. To znači, da bi u tablici – djetetu, svaka pripadnost roditelju, bila definirana

skupom od više kolona, s tekstualnim vrijednostima, koji ponekad mogu imati

nekoliko stotina znakova. Pri spajanju tablica računalni hardver mora usporediti da li

su vrijednosti u svim relevantnim kolonama identične traženim vrijednostima,

vjerojatno znak po znak, pri čemu sva mala slova moraju biti pretvorena u velika

Page 54: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

54

(pretpostavljamo da baza radi «case insensitive», dakle ne razlikuje malo i veliko

slovo (a i A su isti znak). Da bi izbjegli narušavanje odzivnih vremena iz ovog

razloga, vrlo često, u fazi implementacije biramo primarni ključ kao apstraktan, tj.

definiramo kolonu cjelobrojnog tipa od 4 byta, čije vrijednosti baza automatski

generira, čime je osigurana jedinstvenost. Spajanje tablica onda ostvarujemo ovim

apstraktnim identifikatorom, jer računalo vrlo brzo uspoređuje 4-bytne brojeve.

Primarni ključ nazivamo apstraktnim, jer on ne identificira objekt u realno svijetu,

samo interno u našem IS. Kako bi spriječili pojavu dva retka s istom vrijednošću

atributa, koji su zapravo trebali biti primarni ključ, jer oni identificiraju objekt u

realnom svijetu, definiramo jedinstveni indeks nad skupom tih atributa. Na taj način

imamo osiguranu jedinstvenost i dobili smo na brzini spajanja tablica, te uštedjeli

prostor za pohranu.

3.4 Videoteka - model prakti čnog primjera

Nakon obavljenog usmjerenog razgovora s naručiteljem informacijskog sustava

Videoteka, napravljene su slijedeće bilješke:

Videoteka upisuje članove koji posuđuju na određeni period kasete različitih

naslova. Članovi su opisani imenom, prezimenom, kućnom adresom i brojem

telefona. Član se ne može upisati ako nisu poznati ovi atributi, radi vraćanja

zaboravljenih kaseta. Na svaku kasetu je snimljen samo jedan naslov ( film ). Naslov

je opisan nazivom djela ( filma), žanrom, trajanjem u minutama, kratkim sadržajem

te akterima, kao što su producent, režiser, glavni i ostali glumci. O svakoj kaseti se

vodi evidencija njenog stanja (istrošenosti), radi planiranja zamjena. Kasete se izdaju

za trajanje od jednog do više dana, a najam se naplaćuje na dan vraćanja, po

jedinstvenoj cijeni Kuna/dan.

Članovi često žele izabrati jedan od naslova njihovih omiljenih glumaca.

Među imenicama (tiskanim masnim podvučenim kurzivom), tražimo imena entiteta ili

(imenice tiskane masnim kurzivom) su kandidadti za atribute, a glagoli sugeriraju

metode ( SQL upit ).

Entitetski kandidati:

Page 55: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

55

Članovi

# Identifikator člana

* Ime

* Prezime

* Poštanski broj

* Mjesto

* Ulica i Kućni broj

* Telefon

o Datum Rodjenja

o Spol

Naslovi

# Identifikator naslova

* Naslov

o Trajanje minuta

o Žanr

o Opis

Kasete

# Identifikator kasete

* Naslov

* Stanje

Akteri

# Identifikator aktera

o Ime

Page 56: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

56

* Prezime

PosudbaKaseta

# Identifikator člana

# Identifikator kasete

# Datum izdavanja

o Planirani datum vraćanja

o Stvarni datum vraćanja

Analizom entiteta, zaključujemo na relacije:

Clanovi

Max

dužina

Prosječna

dužina

# ClanID Int4 – Autoident 4 4

* Ime varchar(30) 30 7

* Prezime varchar(30) 30 8

$ PostaID Int4 - Strani ključ – ref:

Poste

4 4

* Ulica varchar(50) 50 12

* Kbr Int2 2 2

o KbrDodatak varchar(10) 10 1

o Kat Int2 2 2

o DatumRodjenja smalldatetime 4 4

$ Spol Int1 – Strani ključ ref:

Spolovi

1 1

Total: 137 45

Page 57: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

57

Poste

Max

dužina

Prosječna

dužina

# PostaID Int4 4 4

* Posta varchar(30) 30 9

Total: 35 13

Spolovi

Max

dužina

Prosječna

dužina

# SpolID Int1 1 1

* Spol varchar(30) 30 6

Total: 31 7

Naslovi

Max

dužina

Prosječna

dužina

# NaslovID Int4 – Autoident 4 4

* Naslov varchar(80) 80 16

o TrajanjeMin Int2 2 2

$ ZanrID Int1 1 1

o Opis varchar(1024) 1024 250

Total: 1111 273

Zanrovi

Page 58: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

58

Max

dužina

Prosječna

dužina

# ZanrID Int1 1 1

* Zanr varchar(30) 30 6

Total: 31 7

Kasete

Max

dužina

Prosječna

dužina

# KasetaID Int4 - Autoident 4 4

$ NaslovID Int4 – ref: Naslovi 4 4

$ StanjeKaseteID Int1 1 1

Total: 9 9

StanjeKaseta

Max

dužina

Prosječna

dužina

# StanjeKaseteID Int1 1 1

* StanjeKasete varchar(30) 30 10

Total: 31 11

Page 59: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

59

Akteri

Max

dužina

Prosječna

dužina

# AkterID Int4 – Autoident 4 4

o Ime varchar(30) 30 10

* Prezime varchar(30) 30 10

o Opis varchar(255) 255 60

Total: 219 84

AkteriUloge

Max

dužina

Prosječna

dužina

# $ AkterID Int4 ref: Akteri 4 4

# $ NaslovID Int4 ref: Naslovi 4 4

# $ UlogaID Int1 ref: Uloge 1 1

Total: 9 9

Uloge

Max

dužina

Prosječna

dužina

# UlogaID Int1 1 1

* Uloga varchar(30) 30 12

Total: 31 13

Page 60: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

60

PosudbeKaseta

Max

dužina

Prosječna

dužina

# $ KasetaID Int4 ref: Kasete 4 4

# $ ClanID Int4 ref:Clanovi 4 4

# DatumIzdavanja smalldatetime 4 4

o PlaniraniDatumVracanja smalldatetime 4 4

o DatumVracanja smalldatetime 4 4

Total: 20 20

Pojašnjenje:

- varchar(n) je varijabilni tekst maksimalne dužine n znakova, s tim da stvarno

zauzeti prostor odgovara broju stvarno unijetih znakova (+ m byte-ove za

zapis dužine teksta).

- Int1 – 1 byte-ni cio broj, 0 ... 255 ili –128 ...0 ... 127, ovisno bazi

- Int2 – 2 byte-ni cio broj, -32786 ...0 ... 32767

- Int4 – 4 byte-ni cio broj ( -2**31 ...0 ... 2**31 –1 )

- Autoident – baza generira broj kod insertiranja zapisa

- smalldatetime – zapis datuma, način zapisa ovisi o bazi, rezolucija reda

minuta, ( kod MS SQL Server 2000, 4 byte)

- * - Obvezan unos, Null vrijednost nije dopuštena

- $ - Strani ključ

- ref – Referentna tablica

- o – unos nije obvezan, dopuštena je Null vrjednost

- # - dio primarnog ključa, unos obvezan

Page 61: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

61

Maksimalna i očekivana dužina služe kao podloga za izračunavanje potrebnog

prostora za pohranu tablica.

3.5 Model entiteti – veze ( MS SQL Server 2008)

3.6 Funkcije ( metode )

Članovi

- Upis novog člana

- Promjena podataka člana

- Brisanje člana

- Traženje

Naslovi

- Upis novog naslova

- Promjena podatakao o naslovu

Page 62: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

62

- Brisanje naslova

- Traženje

Kasete

- Upis nove kopije

- Promjena stanja kopije ( uključuje otpis datoteke )

- Traženje

Akteri

- Upis

- Promjena

- Brisanje

- Traženje

Izdavanje – vraćanje kaseta

- Izdavanje

- Vraćanje

3.7 Impementacija objekata baze podataka – primjer dviju

tablica ( Microsoft SQL Server 2008 ):

CREATE TABLE [dbo].[Akteri] (

[AkterID] [int] IDENTITY (1, 1) NOT NULL ,

[Ime] [varchar] (30) NULL ,

[Prezime] [varchar] (30) NOT NULL ,

[DatumRodjenja] [smalldatetime] NULL

) ON [PRIMARY]

CREATE TABLE [dbo].[Clanovi] (

[ClanID] [int] IDENTITY (1, 1) NOT NULL ,

Page 63: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

63

[Ime] [varchar] (30) NOT NULL ,

[Prezime] [varchar] (30) NOT NULL ,

[DatumRodjenja] [smalldatetime] NULL ,

[JMBG] [bigint] NULL ,

[PostaID] [int] NOT NULL ,

[Ulica] [varchar] (50) NOT NULL ,

[Kbr] [smallint] NOT NULL ,

[KbrDodatak] [varchar] (10)NULL ,

[Kat] [smallint] NULL ,

[TelefonOperater] [smallint] NULL ,

[TelefonBroj] [int] NOT NULL ,

[email] [varchar] (100) NULL

) ON [PRIMARY]

ALTER TABLE [dbo].[Akteri] WITH NOCHECK ADD

CONSTRAINT [PK_Akteri] PRIMARY KEY CLUSTERED

(

[AkterID]

) ON [PRIMARY]

ALTER TABLE [dbo].[Clanovi] WITH NOCHECK ADD

CONSTRAINT [PK_Clanovi] PRIMARY KEY CLUSTERED

(

[ClanID]

) ON [PRIMARY]

Page 64: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

64

4 Indeksi

Pojasnimo najprije pojam indeksa, primjerom. Želimo pronaći značenje engleske

riječi «event». U englesko – hrvatskom rječniku, u zaglavlju svake stranice su

napisane početna i završna riječ koje se nalaze na toj stranici. Brzo listamo stranice,

gledajući samo zaglavne riječi i pronalazimo onu na kojoj u zaglavlju stoji: «even ...

excess». Kako se riječ «event» u abecednom poretku nalazi između ove dvije riječi,

zadržavamo se na toj stranici i pronalazimo traženu riječ (sa značenjem događaj).

Dakle, riječ smo pronašli brzo, zato što su sve riječi u riječniku poredane po

abecednom redu engleskih riječi. Kažemo da je rječnik indeksiran po engleskim

riječima. Kada bi ovaj isti englesko-hrvatski rječnik upotrijebili za nalaženje

engleskog prijevoda hrvatske riječi «nebo», morali bismo prelistati cijeli rječnik, jer

nije poredan po hrvatskim riječima. Naravno, hrvatsko-engleski rječnik, koji sadrži

iste riječi kao i prethodni, bi pomogao, jer je indeksiran po hrvatskim riječima.

Ovakvu vrstu indeksa, kod kojeg su podaci fizički poredani po indeksiranoj koloni (ili

kolonama), sustav MS SQL Server naziva klasterirani indeks. Jasno je da se podaci

fizički mogu poredati samo na jedan način, pa je isto tako moguć samo jedan

klasterirani indeks u tablici. Ova vrsta indeks pomaže kod pretraživanja područja

(ranga) vrijednosti.

Potražimo sada u knjizi R. Vujnović «SQL i relacijski model podataka», pojašnjenje

pojma «indeksiranje». Na kraju knjige pronalazimo indeksno kazalo, te pod slovom

«I», «indeksiranje, 151». Dakle, na stranici 151 započinje pojašnjenje pojma, te brzo

pronalazimo stranicu s traženim podatkom. Ovakav indeks podržavaju i sustavi

relacijskih baza, a MS SQL Server ga naziva neklasterirani indeks. Može se definirati

veći broj indeksa ovog tipa i svaki od njih može uključiti jednu ili više kolona.

Pogledajmo primjer organizacije podataka ( MS SQL Server 2000, no slično podatke

organiziraju i ostali sustavi) na mediju za pohranu. Poznato je da se podaci čitaju i

zapisuju, dakle prenose u radnu memorije, u kvantima, stranicama.

Stoga i baze podataka organiziraju podatke po stranicama, kako bi koristile uslugu

operacijskog sustava na sukladan način. Stoga su i podaci zapisani u jednoj tablici,

zapravo razbacani po stranicama, koje mogu biti na bilo kojem cilindru diska.

Page 65: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

65

Primjer organizacije tablice Studenti(Ime, Prezime, Spol) slijedi. Poredani su po

stranicama stohastički, kako su dodavani u tablicu, jer nije definiran indeks.

Želimo pronaći sve studente s prezimenom između Horvat i Koštić, uključivo i njih

same, zato jer svi one obavljaju vježbe kao članovi grupe B. SQL upit će biti:

SELECT * FROM Studenti

WHERE Prezime BETWEEN 'Horvat' AND 'Košti ć'

Kako tablica nije indeksirana, RDBMS će krenuti od prvog zapisa na prvoj stranici,

uspoređivati da li prezime nalazi u zadanom intervalu, te ga prikazati, nastavljajući

zapis po zapis sve do zadnjeg zapisa na zadnjoj stranici.

Stranica Zapis Ime Prezime Spol

1 Ivo Ivić M

2 Ante Perić M

3 Jure Padovan M 1

4 Anica Zubčić Z

1 Damir Kelava M

2 Kristian Brunner M 2

3 Marina Bajramović Z

1 Ivica Tomić M

2 Slavko Dešković M

3 Slavica Perović Z 3

4 Miranda Poljak Z

1 Ivan Goran Penić M

2 Ivana Marić Z

3 Nikolina Meštović Z

4 Mate Antić M

4

5 Paško Ivanković M

1 Domagoj Horvat M

2 Hrvoje Orlandini M 5

3 Danijela Klisović Z

1 Ana Belić Z

2 Ivana Zubović Z

3 Domina Aljinović Z 6

4 Kata Reić Z

1 Doris Koštić Z

2 Mario Lojpur M 7

3 Franka Dodić Z

Page 66: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

66

Ovakvo pretraživanje zovemo potpuno pretraživanje tablice (full table scaning). Kod

tablica s velikim brojem zapisa, uzima značajno vrijeme i odziv je spor. Kreiramo li

klasterirani indeks po koloni Prezime, podaci će biti reorganizirani po stranicama i

poredni po abecedi prezimena, kako prikazuje donja slika. Pri tome, se kreira korijen

indeksa, u našem primjeru sa dva zapisa, koji senalaze na stranici 14. i koji dijele

čitavu sortiranu tablicu u dva podjednaka dijela. Ovi zapisi pokazuju na srednju razinu

indeksa, odnosno da se Prezime Aljinović nalazi na stranici 15. srednje razine

indeksa, a Lojpur na stranici 16. Srednja razina indeksa dijeli tablicu na još manje

segmente, pokazujući stranicu slijedeće razine koja sadrži isti podatak. Konačno,

zadnja razina klasteriranog indeksa sadrži same podatke.

Napomenimo da ovako klasterirani indeks kreira sustav za upravljanje relacijskom

bazom Microsoft SQL Server 2008. Neki drugi sustavi ne poznaju ovaj tip indeksa, te

štoviše pod istim nazivom – klasterirani indeks – mogu podrazumijevati potpuno

drukčiju strukturu, no smatram da je korisnije pokazati organizaciju indeksa na

konkretnom primjeru izabrane baze.

Page 67: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

67

Klasterirani indeks: Prezime

Posljednja razina ( leaf)

Str Zap Ime Prezime Spol

1 Domina Aljinović Z

2 Mate Antić M

1 3 Marina Bajramović Z

Srednja razina ( intermediate)

Str Na str 1 Ana Belić Z

Aljinović 1 2 Kristian Brunner M

Belić 2

2

3 Slavko Dešković M

Dodić 3

15 Kelava 4 1 Franka Dodić Z

2 Domagoj Horvat M

3 Paško Ivanković M

3

4 Ivo Ivić M

Korijen (root) 1 Damir Kelava M

Str Na str 2 Danijela Klisović Z

Aljinović 15

4

3 Doris Koštić Z 14 Lojpur 16

1 Mario Lojpur M

2 Ivana Marić Z

3 Nikolina Meštović Z

5

4 Hrvoje Orlandini M

Str Na str 1 Jure Padovan M

Lojpur 5 2 Ivan Goran Penić M

Padovan 6 3 Ante Perić M

Poljak 7

6

4 Slavica Perović Z

16 Zubčić 8

1 Miranda Poljak Z

2 Kata Reić Z

7

3 Ivica Tomić M

1 Anica Zubčić Z

8

2 Ivana Zubović Z

Kako se traži prezime «Horvat» ?

Polazi se od korjena indeksa i pronalazi da je «Horvat» veće od «Aljinović» i manje

od «Lojpur», pa se slijedi zadnji pokazivač od kojeg nije manji ( tj. veće ili jednako),

dakle «Aljinović» i odlazi na stranicu 15. Tu se pronalazi da je «Horvat» veće od

«Dodić» i manje od «Kelava», pa se slijedi pokazivač od «Dodić» i odlazi na stranicu

3. Zatim se pronalazi «Horvat», prikazuje i nastavlja po zapisima u slijedu i prezime

uspoređuje s «Koštić», prikazujući ih, sve dok je prezime manje ili jednako «Koštić».

Očito je ubrzanje traženja, jer broj srednjih razina nije velik, čak ni kod velikih

tablica.

Page 68: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

68

Pronađimo sada studenta s imenom «Ivo».

Indeks: Ime

Zadnja razina ( leaf)

Str Ime Na str Zap

Ana 2 1

Anica 8 1

Ante 6 3

Srednja razina(interm) Damir 4 1

Str Ime Na str Danijela 4 2

Ana 23 Domagoj 3 2

Doris 24

23 Domina 1 1

21 Str Na str Zap

Doris 4 3

Franka 3 1

Hrvoje 5 4

Ivan Goran 6 2

Korijen(root) Ivana 5 2

Str Ime Na str Ivana 8 2

Ana 21

24 20

Ivica 22

Str Na str Zap

Ivica 7 3

Ivo 3 4

Jure 6 1

Kata 7 2

Str Na str Kristian 2 2

Ivica 25 Marina 1 3

Mate 26

25 Mario 5 1

22 Str

Mate 1 2

Miranda 7 1

Nikolina 5 3

Paško 3 3

Slavica 6 4

Slavko 2 3

26

Indeks po koloni Prezime nam ne pomaže u pronalaženju imena. Zato kreirajmo

indeks po koloni Ime. Indeks ponovo ima korijen, srednje razine, te posljednju razinu,

koja pokazuje na stranicu i zapis na kojoj se nalaze svi podaci studenta kojem je ime

«Ivo».

Dakle, «Ivo» je veći od «Ivica», no kako je to posljedni zapis na stranici korjena,

slijedi se pokazivač od «Ivica» i odlazi na stranicu 22. srednje razine indeksa. Tu je

«Ivo» veći od «Ivica», ali manji od «Mate», pa se odlazi na stranicu 25, gdje se

Page 69: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

69

pronalazi «Ivo», jer zadnja razina uvijek sadrži sve zapise indeksiranih kolona cijele

tablice i odlazi na stranicu 3, zapis 4, što je kompletan zapis studenta s imenom «Ivo».

Ovakva struktura indeksa se naziva «B-tree»,tj. uravnoteženo stablo (eng. balanced

tree). Karakterizira je da uvijek dijeli ciljelu tablicu na približno jednake segmente, a

to znači da se nakon svake promjene podataka u tablici, koji obuhvaćaju i indeksne

kolone, stablo mora reorganizirati. Naravno, to uzima vrijeme, pa je jasno da indeks

ubrzava traženje, ali usporava izmjene: dodavanje, ažuriranje ili brisanje zapisa. Stoga

je važno kreirati razuman broj indeksa, prema iskustvima iz prakse 5-7 i njima

zadovoljiti često izvođene upite.

Potražimo sada sve zapise koji imaju vrijednost kolone Spol = «Z». Sada nam ne

pomaže ni jdan ni drugi indeks, pa će se pretraživati cijela tablica.

Da li bi nam pomogao neklasterirani indeks po koloni Spol ? Nebi, jer je 50% zapisa s

vrijednošću «Z», pa bi pretraživanje stabla indeksa više trajalo, nego potpuno

pretraživanje tablice. Ova vrsta indeksa je korisna, ako su podaci dobro distribuirani,

dakle ako se ista vrijednost pojavljuje u 5 – 10 % slučajeva ( dakako, točan postotak

ovisi o baznom sustavu i konkretnoj tablici).

Page 70: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

70

5 SQL Upitni jezik

5.1 Uvod

SQL jezik inovirala je tvrtka IBM, polazeći od osnovnih operacija relacijskih baza

podataka, kako ih je definirao Codd . SQL je neproceduralni jezik IV generacije. Pod

time se podrazumijeva, da nije potrebno definirati korake ( proceduru) izvođenja,

nego se definira «što želimo kao rezultat i način kako će rezulatat biti prikazan».

Naredbe jezika dijele se u dvije skupine:

DML Data

Manipulation

Language

Komande za traženje, umetanje, izmjene i brisanje

podataka.

DDL Data

Definition

Language

Komande za definiciju objekata ( tablica, indeksa, pgleda )

relacijske baze podataka.

5.2 Upiti u relacijskoj bazi podataka

5.2.1 Projekcija i restrikcija

Definirana je relacija ( tablica ) u relacijskoj bazi Studenti, s atributima ( kolonama ):

Ime

Prezime

DatumRodjenja

StudijID

PostaID

Izlistajmo sadržaj tablice i prikažimo ga na konzoli komandom:

SELECT * FROM Studenti;

Rezulta ovog upita je:

Page 71: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

71

Ime Prezime DatumRodjenja StudijID PostaID

Ivo Ivic 22.06.1981 1 21000

Ana Matic 01.01.1980 1 22000

Tomislav Butorovic 21.01.1982 1 21000

Ana Marija Tomic 21.12.1981 1 20000

Marko Markovic 24.07.1981 2

Helena Topic 05.08.1979 20000

Hrvoje Antic 21.03.1981 1 23000

Ante Zelic 08.09.1981 1 53000

Dakle, prikazane su sve kolone i svi retci tablice, pri čemu je poredak redaka slučajan,

najčešće onim redom kako su retci upisivani u tablicu.

Često nam nisu potrebne sve kolone, pogotovu kod tablica s većim brojem kolona.

Kolone koje želimo prikazati pobrojimo poslije ključne riječi SELECT, pa komanda

kojom ćemo prikazati samo Ime i Prezime studenta izgleda:

SELECT Ime, Prezime FROM Studenti;

Rezultat izvođenja komande je:

Ime Prezime

Ivo Ivic

Ana Matic

Tomislav Butorovic

Ana Marija Tomic

Marko Markovic

Helena Topic

Hrvoje Antic

Ante Zelic

Page 72: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

72

Često želimo prikaz samo nekih redaka tablice i to onih koji zadovoljavaju određeni

uvjet. Prikažimo Ime i Prezime studenata koji su upisani na studij «Matematike –

Informatike». Pregledom tablice Studiji:

SELECT * FROM Studiji;

StudijID Studij

1 Matematika - Informatika

2 Tehnicka kultura - Informatika

3 Matematika

4 Matematika - Fizika

5 Biologija - Kemija

nalazimo, da studij Matematike – Informatike ima oznaku StudijID=1. Tako će upit za

prikaz imena i prezimena studenata Matematieke – Informatike biti:

SELECT Ime, Prezime

FROM Studenti

WHERE StudijID=1

Ime Prezime

Ivo Ivic

Ana Matic

Tomislav Butorovic

Konačno, želimo studente Matematike – Informatike ali po abecednom redu

prezimena:

SELECT Ime, Prezime

FROM Studenti

WHERE StudijID=1

ORDER BY Prezime

Page 73: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

73

Ime Prezime

Tomislav Butorovic

Ivo Ivic

Ana Matic

Dakle, SQL – upitna komanda nad jednom tablicom ima opći oblik:

SELECT Kolona1, Kolona2, Kolona... | *

FROM Tablica

[ WHERE uvjet ]

[ ORDER BY Kolona2 [DESC], Kolona [DESC]... ]

pri čemu je redoslijed kolona proizvoljan i u SELECT klauzuli i u ORDER BY

klauzuli. Želimo li prikazati sve kolone tablice u poretku kako je tablica definirana,

možemo upotrijebiti simbol zvjezdice ( * ) koji uključuje sve kolone. Uvjet u

WHERE klauzuli mora za svaki redak rezultirati s jednom od dvije moguće

vrijednosti: ISTINA ili LAŽ. Prikazani će biti oni retci čija je vrijednost ISTINA.

SELECT klauzula provodi relacijsku operaciju projekcije, a WHERE provodi

operaciju restrikcije. Kada restrikcija nije potrebna, tj. žele li se prikazati svi reci,

onda se WHERE klauzula ispušta ( uglate zagrade u gornjoj definiciji), jednako kao i

ORDER BY klauzula, kada poredak nije eksplicitno definiran.

Kako Sustav za upravljanje relacijskom bazom podataka ( RDBMS ) izvodi ovaj upit

(tablica nema definiranih indeksa ):

� Prevede upit u niz poziva primitivnih procedura

� Utvrdi optimalan slijed izvođenja

� Kako nema definiranih indeksa ( ili kada je tablica s malim brojem redaka) izvodi

potpuno skeniranje tablice, dakle kreće od prvog do posljednjeg retka

� Stvori privremenu radnu tablicu, s kolonama

- Ime varchar(50)

- Prezime varchar(50)

uzimajući definiciju kolona iz temeljne tablice Studenti

Page 74: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

74

� Pročita prvi redak tablice Studenti i ako je vrijednost kolone StudijID=1, upiše

vrijednosti Ime i Prezime u radnu tablicu. U slučaju da StudijID nije 1, ide na

slijedeći redak.

� Poreda retke u radnoj tablici po abecednom redu prezimena

� Ispiše rezultat u prozoru konzole

5.2.2 Prirodno spajanje

Nedostatak gornjih upita je taj, što brojčane oznake StudijID nisu dovoljno opisne, tj.

iako vidimo oznaku studija, ne znamo o kojem se studiju radi, naravno, ne želimo li

stalno tražiti naziv studija u tablici Studiji. Na sreću, SQL upitni jezik provodi i

operaciju prirodnog spajanja dviju ili više tablica:

SELECT Ime, Prezime, Studenti.StudijID, Studiji.*

FROM Studenti, Studiji

ORDER BY Prezime

Ime Prezime StudijID StudijID Studij

1 Hrvoje Antic 2 1 Matematika - Informatika

2 Hrvoje Antic 2 2 Tehnicka kultura - Informatika

3 Hrvoje Antic 2 3 Matematika

4 Hrvoje Antic 2 4 Matematika - Fizika

5 Hrvoje Antic 2 5 Biologija - Kemija

6 Tomislav Butorovic 1 1 Matematika - Informatika

7 Tomislav Butorovic 1 2 Tehnicka kultura - Informatika

8 Tomislav Butorovic 1 3 Matematika

- - -

38 Ante Zelic 3 3 Matematika

39 Ante Zelic 3 4 Matematika - Fizika

40 Ante Zelic 3 5 Biologija - Kemija

Page 75: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

75

Rezultat ovog upita je relacija, prikazana kao Kartezijev produkt tablica Studenti i

Studiji. Dakle, svaki redak tablice Studenti je udružen sa svakim retkom tablice

Studiji. Kako Studenti sadrži 8 redaka, a Studiji 5, to rezultantana tablica sadrži 40

redaka. Uočavamo da neki retci ne sadrže istinite podatke: student Hrvoje Antić je

upisan na studij 2 – Tehnicka kultura – Informatika ( lijeva kolona StudijID u tablici ), pa

povezivanje sa studijima 1, 3, 4 i 5 ne odgovara istini. Zato u pravilu, operaciju prirodnog

spajanja ograničavamo na retke koji sadrže istinite podatke, dakle:

SELECT Ime, Prezime, Studenti.StudijID, Studiji.*

FROM Studenti, Studiji

WHERE Studenti.StudijID=Studiji.StudijID

ORDER BY Prezime

Ime Prezime StudijID StudijID Studij

Hrvoje Antic 2 2 Tehnicka kultura - Informatika

Tomislav Butorovic 1 1 Matematika - Informatika

Ivo Ivic 1 1 Matematika - Informatika

Marko Markovic 2 2 Tehnicka kultura - Informatika

Ana Matic 1 1 Matematika - Informatika

Ana Marija Tomic 3 3 Matematika

Helena Topic 2 2 Tehnicka kultura - Informatika

Ante Zelic 3 3 Matematika

Rezultat upita je virtualna tablica, pod čime se misli da ne postoji njen fizički zapis

na mediju, npr. disku, nego se dinamički izgrađuje pri izvođenju upita.

Uobičajeni naziv za ovakav oblik spajanja tablica je «spajanje jednakosti» ( eng.

«equi – join»).

5.2.3 Vanjsko ( Outer Join ) spajanje

Izvedimo sličan upit, kojim ćemo prikazati ime, prezime, poštanski broj i naziv pošte

studenta:

Page 76: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

76

Ime Prezime PostaID PostaID Posta

Hrvoje Antic 23000 23000 Zadar

Tomislav Butorovic 21000 21000 Split

Ivo Ivic 21000 21000 Split

Ana Matic 22000 22000 Sibenik

Helena Topic 20000 20000 Dubrovnik

Ante Zelic 53000 53000 Gospic

Nažalost, umjesto očekivanih 8 redaka, tablica ne sadrži retke:

Ana Marija Tomic

Marko Markovic

Razlog leži u nedefiniranim poštanskim brojevima ( prigodom prijave, studenti nisu

prijavili adresu, jer su bili u fazi preseljenja ). No, mi želimo prikazati sve studente,

čak i ako nije definiran poštanski broj. Naravno, ako pošta nije poznata, neće biti

ispisana.

SELECT Ime, Prezime, Studenti.PostaID, Poste.*

FROM Studenti

LEFT OUTER JOIN Poste ON Studenti.PostaID=Poste.PostaID

ORDER BY Prezime

Ime Prezime PostaID PostaID Posta

Hrvoje Antic 23000 23000 Zadar

Tomislav Butorovic 21000 21000 Split

Ivo Ivic 21000 21000 Split

Marko Markovic NULL NULL NULL

Ana Matic 22000 22000 Sibenik

Ana Marija Tomic NULL NULL NULL

Helena Topic 20000 20000 Dubrovnik

Ante Zelic 53000 53000 Gospic

Page 77: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

77

Engleski termin ovog oblik spajanja je LEFT OUTER JOIN, što možemo prevesti kao

«spajanje slijeva», a prikazuje sve retke u tablici s lijeve strane ključne riječi

(Studenti). Svaki redak tablice Studenti će pokušati spojiti s tablicom Poste preko

identičnih vrijednosti kolona PostaID i prikazati naziv pošte, kad god je spajanje

uspješno, odnosno NULL vrijednost kad spajanje nije moguće.

Vrijednost NULL tumačimo kao nedefinirana ili nepoznata vrijednost.

Kako Sustav za upravljanje relacijskom bazom podataka ( RDBMS ) izvodi ovaj upit

(tablice nemaju definirane indekse ):

� Prevede upit u niz poziva primitivnih procedura

� Utvrdi optimalan slijed izvođenja

� Kako nema definiranih indeksa ( ili kada je tablica s malim brojem redaka) izvodi

potpuno skeniranje tablice, dakle kreće od prvog do posljednjeg retka tablice

Studenti

� Stvori privremenu radnu tablicu, s kolonama

- Ime varchar(50)

- Prezime varchar(50)

- PostaID int ( iz tablice Studenti)

- PostaID int ( iz tablice Poste)

- Posta varchar(50)

uzimajući definiciju kolona iz temeljnih tablica Studenti i Poste

� Pročita prvi redak tablice Studenti i upiše vrijednosti u radnu tablicu:

Ivo Ivic 21000

� Pretraži tablicu Poste, počev od prvog retka za vrijednost

Poste.PostaID=Studenti.PostaID, odnosno dok ne pronađe PostaID=21000

� Upiše u redak radne tablice PostaID ( 21000 ) i Posta ( Split )

� Ponovlja postupak čitanja svih redaka

� Poreda retke u radnoj tablici po abecednom redu prezimena

� Ispiše rezultat u prozoru konzole

Page 78: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

78

Isto tako, moguće je spojiti tablicu s desna:

SELECT Studiji.*, Ime, Prezime

FROM Studenti

RIGHT OUTER JOIN Studiji ON Studenti.StudijID=Studi ji.StudijID

ORDER BY Studiji.StudijID

StudijID Studij Ime Prezime

1 Matematika - Informatika Ivo Ivic

1 Matematika - Informatika Ana Matic

1 Matematika - Informatika Tomislav Butorovic

2 Tehnicka kultura - Informatika Marko Markovic

2 Tehnicka kultura - Informatika Helena Topic

2 Tehnicka kultura - Informatika Hrvoje Antic

3 Matematika Ana Marija Tomic

3 Matematika Ante Zelic

4 Matematika - Fizika NULL NULL

5 Biologija - Kemija NULL NULL

Ovim upitom prikazuju se sve moguće studijske grupe, te studenti onih studijskih

grupa koje imaju upisane studente. Studiske grupe bez studenata, isto tako su

navedene, ali naravno bez pridruženih studenata.

5.2.4 Unutrašnje ( Inner Join ) spajanje

U nekim prilikama, ipak želimo prikaz samo onih redaka koji se mogu spojiti s

odgovarajućim recima druge tablice. Recimo, kada trebamo uputiti pisma na adrese

studenata, studenti bez adrese trebaju biti ispušteni iz prikaza:

SELECT Ime, Prezime, Studenti.PostaID, Posta

FROM Studenti

INNER JOIN Poste ON Studenti.PostaID=Poste.PostaID

Page 79: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

79

ORDER BY Prezime

Ime Prezime PostaID Posta

Hrvoje Antic 23000 Zadar

Tomislav Butorovic 21000 Split

Ivo Ivic 21000 Split

Ana Matic 22000 Sibenik

Helena Topic 20000 Dubrovnik

Ante Zelic 53000 Gospic

Isti rezulata se dobije i primjenom «Equi-join» spajanjem, no ipak «INNER JOIN»

zapis potpunog spajanja ima prednost, jer u komandi jasno razlikuje klauzulu

restrikcije WHERE od spajanja INNER JOIN.

Dakle, sintaksa potpune upitne komande koja izvršava projekciju, potpuno i

nepotpuno spajanje, restrikciju i određivanje poretka je:

SELECT Kolona1, Kolona2, ...

FROM Tablica1

[ INNER JOIN Tablica2 ON Kolona3=Kolona4 AND Kolona5=Kolona6 ]

[ LEFT OUTER JOIN Tablica3 ON Kolona7=Kolona8 AND ... ]

[ WHERE uvjet ]

[ ORDER BY Kolona1 [ ASC | DESC ], Kolona2 [ ASC | DESC ], ... ]

5.2.5 Funkcije u SQL Upitu

Često trebamo neke izračunate podatke, čija se vrijednost temelji na baznim

podacima, upisanim u tablici. Prikažimo ime i prezime studenata u jednoj koloni,

spajanjem kolona ime i prezime, te ukupni broj slova imena i prezimena ( razmak nije

uključen). Retke je potrebno poredati po dužini teksta, tako da student s najdužim

imenom i prezimenom bude na vrhu poretka:

Page 80: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

80

SELECT Prezime + ' ' + Ime, LEN(Prezime + Ime)

FROM Studenti

ORDER BY LEN(Prezime + Ime) DESC

Ime Prezime Dužina Ime i Prezime

Butorovic Tomislav 17

Tomic Ana Marija 15

Markovic Marko 13

Topic Helena 11

Antic Hrvoje 11

Zelic Ante 9

Matic Ana 8

Ivic Ivo 7

Ključna riječ DESC ( DESCEDING ) označava inverzni poredak prikazane tablice.

Predefiniran je poredak od manje vrijednosti prema većoj ASC ( ASCEDING ) i nije

ga potrebno navoditi.

Neke često korištene funkcije su:

Sintaksa Opis

LEFT( Tekstualni izraz, n ) Izdvaja n pozicija s lijeva iz tekstualnog izraza (

obično tekstualna kolona tablice)

RIGHT( Tekstualni izraz,

n)

Izdvaja n pozicija s desna iz tekstualnog izraza (

obično tekstualna kolona tablice)

SUBSTRING( Tekstualni

izraz, S, D)

Izdvaja D znakova iz tekstualnog izraza, počev od

pozicije S izraza

LEN( Tekstualni izraz ) Daje dužinu ( broj slova ) tekstualnog izraza

Page 81: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

81

Primjeri:

a) Prikazati početno slovo imena ( inicijal ) i prezime u jednoj koloni.

SELECT LEFT(Ime, 1) + '. ' + Prezime

FROM Studenti

Inicijal Prezime

I. Ivic

A. Matic

T. Butorovic

A. Tomic

M. Markovic

H. Topic

H. Antic

A. Zelic

b) Prikazati dva posljednja slova prezimena studenta

SELECT RIGHT(Prezime, 2), Prezime

FROM Studenti

2 zadnja slova

prezimena Prezime

ic Ivic

ic Matic

ic Butorovic

ic Tomic

ic Markovic

ic Topic

ic Antic

ic Zelic

Page 82: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

82

c) Prikazati 3 slova imena studenta, počev od 3. slova

SELECT SUBSTRING(Ime, 3, 3 ), Ime

FROM Studenti

3 slova po čev od

3. Pozicije Ime

o Ivo

a Ana

mis Tomislav

a M Ana Marija

rko Marko

len Helena

voj Hrvoje

te Ante

d) Prikazati sve studente čije je ime=Ivo'

SELECT *

FROM Studenti

WHERE Ime='Ivo'

Ime Prezime DatumRodjenja StudijID PostaID

Ivo Ivic 22.06.1981 1 21000

e) Prikazati sve studente čije ime sadrži slovo i na bilo kojoj poziciji.

Page 83: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

83

SELECT *

FROM Studenti

WHERE Ime LIKE '%i%'

Ime Prezime DatumRodjenja StudijID PostaID

Ivo Ivic 22.06.1981 1 21000

Tomislav Butorovic 21.01.1982 1 21000

Ana Marija Tomic 21.12.1981 3 NULL

f) Prikazati sve studente kojima naziv pošte sadrži slovi i na bilo kojoj poziciji.

SELECT Ime, Prezime, Studenti.PostaID, Posta

FROM Studenti

LEFT OUTER JOIN Poste ON Studenti.PostaID=Poste.PostaID

WHERE Posta LIKE '%i%'

Ime Prezime PostaID Posta

Ivo Ivic 21000 Split

Ana Matic 22000 Sibenik

Tomislav Butorovic 21000 Split

Helena Topic 20000 Dubrovnik

Ante Zelic 53000 Gospic

g) Prikazati sve studente kojima naziv pošte sadrži slovi i na bilo kojoj poziciji.

SELECT Ime, Prezime, Studenti.PostaID, Posta

FROM Studenti

LEFT OUTER JOIN Poste ON Studenti.PostaID=Poste.PostaID

WHERE Posta NOT LIKE '%i%'

Page 84: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

84

Ime Prezime PostaID Posta

Hrvoje Antic 23000 Zadar

h) Prikazati ime, prezime i dužinu imena svim studentima, čije je ime duže od 5 slova.

Poredati po dužini imena.

SELECT Ime, Prezime, LEN(Ime)

FROM Studenti

WHERE LEN(Ime) > 5

ORDER BY LEN(Ime)

Ime Prezime

Duzina

Imena

Helena Topic 6

Hrvoje Antic 6

Tomislav Butorovic 8

Ana Marija Tomic 10

g) Prikazati ime i prezime studenta u jednoj koloni, te svaku pojavu malog slova a,

zamijeniti velikim slovom A.

SELECT REPLACE(Ime + ' ' + Prezime, 'a', 'A')

FROM Studenti

Ime Prezime

Ivo Ivic

AnA MAtic

TomislAv Butorovic

Page 85: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

85

AnA MArijA Tomic

MArko MArkovic

HelenA Topic

Hrvoje Antic

Ante Zelic

5.2.6 Grupiranje podataka i sumarna izra čunavanja

a) Zanima li nas koliko imamo ukupno studenata u tablici Studenti, izvest ćemo upit:

SELECT count(*)

FROM Studenti

(No column name)

8

Dakle, count(*), pri čemu * da nas zanima broj redaka, bez obzira na definiranu

vrijednost kolona, će izbrojati ukupni broj redaka tablice.

Umetnemo li redak koji sadrži isključivo nedefinirane vrijednosti ( što je u suprotnosti

s pravilima relacijskih baza ), broj redaka bit će 9.

b) Ispišimo sada ukupni broj studenta, te broj studenata koji imaju definiranu adresu

(PostaID):

SELECT count(*) As BrojStudenata, count(PostaID) As ImaDefiniranuAdresu

FROM Studenti

BrojStudenata ImaDefiniranuPostu

8 6

Page 86: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

86

c) Ispišimo broj studenata na svakoj studijskoj grupi. Grupe na kojima nema upisanih

studenata nije potrebno prikazati, te poredati prema broju studenata na grupi, počev

od najbrojnije grupe:

SELECT StudijID, count(*)

FROM Studenti

GROUP BY StudijID

ORDER BY count(*) DESC

StudijID count(*)

1 3

2 3

3 2

Kako programski sustav za upravljanje relacijskom bazom podataka( RDBMS) izvodi

ovaj upit ( Pretpostavka je da tablica nije indeksirana):

� RDBMS prevede definiranu komandu SQL upita u niz poziva primitivnih

procedure

� Izračuna optimalan redoslijed izvođenja primitiva

� U bazi za privremene – radne tablice stvori tablicu čije su kolone:

StudijID smallint ( Uzima definiciju kolone iz polazne tablice )

Count1 int

� Krene od prvog retka tablice Studenti i upiše vrijednost StudijID ( 1 ) u radnu

tablicu, te brojačkoj koloni Count dodijeli vrijednost 1.

� Prelazi na slijedeći redak i ponovno pronalazi StudijID=1. Kako oznaka studija

postoji u radnoj tablici, uveča brojač pojava Count za 1, te on sada iznosi 2.

Page 87: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

87

� Prelazi na slijedeći redak i pronalazi StudijID=2, te stvori novi redak s brojačem

na inicijalnoj vrijednosti 1.

� Ove korake ponavlja sve do posljednjeg redka tablice, te svaki put kada naiđe na

veijednost StudijID, koja ne postoji u tablici, stvori redak. Ako oznaka studija

postoji u radnoj tablici, uvečava joj brojač za 1.

� Sortira retke radne tablice od najveće do najmanje vrijednosti brojačke kolone.

d) Gore dobiveni rezultat je ispravan, ali nije razumljiv, jer oznake studija nisu

deskriptivne. Zato bismo radije čitali rezultat uz puni naziv studijske grupe, pa zato

moramo spojiti tablicu Studiji, gdje se opisi nalaze:

SELECT Studij, count(*) As BrojStudenata

FROM Studenti S

INNER JOIN Studiji ST ON S.StudijID=ST.StudijID

GROUP BY Studij

ORDER BY count(*) DESC

Studij BrojStudenata

Matematika - Informatika 3

Tehnicka kultura - Informatika 3

Matematika 2

e) Zahtijeva li se prikaz samo onih studijskih grupa, na kojima je opisano više od 2

studenta, upit će biti:

SELECT Studij, count(*) As BrojStudenata

FROM Studenti S

INNER JOIN Studiji ST ON S.StudijID=ST.StudijID

GROUP BY Studij

HAVING count(*) > 2

ORDER BY count(*) DESC

Page 88: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

88

Studij BrojStudenata

Matematika - Informatika 3

Tehnicka kultura - Informatika 3

Dakle, uvjet koji se odnosi na sumarne podatke definira se u klauzuli HAVING.

f) Želimo li pak, ispisati sve studijske grupe, te ukupan broj studenata upisan na svaku

studijsku grupu, uključujući i grupe na kojima nema upisanih studenata, upit će biti:

SELECT Studij, count(Ime)

FROM Studiji ST

LEFT OUTER JOIN Studenti S ON S.StudijID=ST.StudijI D

GROUP BY Studij

ORDER BY Studij DESC

Studij BrojStudenata

Biologija - Kemija 0

Matematika 2

Matematika - Fizika 0

Matematika - Informatika 3

Tehnicka kultura - Informatika 3

Uočimo, da count(Ime) osigurava da BrojStudenata bude 0, kada na Studiju nema

upisanih studenata, dok bi count(*) dao ispravan broj u slučaju da je barem jedan

student upisan na Studijsku grupu, ali bi isto tako dao vrijednost jedan i kad na grupu

nije upisan niti jedan student. U pravilu ćemo uvijek kada se tablice spajaju s OUTER

JOIN, upotrijebiti count( Kolona ).

Page 89: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

89

g) Ispis studenata i njihovih prosječnih ocjena, dobit ćemo upitom:

SELECT Ime, Prezime, AVG(Ocjena*1.0)

FROM Studenti S

LEFT OUTER JOIN StudentiOcjene SO ON S.StudentID=SO.StudentID

GROUP BY Ime, Prezime

ORDER BY Prezime

Ime Prezime (no column name)

Hrvoje Antic 2.7500

Tomislav Butorovic 4.0000

Ivo Ivic 4.0000

Marko Markovic 2.7500

Ana Matic 3.0000

Ana Marija Tomic 3.0000

Helena Topic 4.0000

Ante Zelic 3.7500

h) Isto tako, možemo ispisati sve studente, čija je prosječna ocjena veća ili jednaka

3.5:

SELECT Ime, Prezime, AVG(Ocjena*1.0) As Prosje čnaOcjena

FROM Studenti S

LEFT OUTER JOIN StudentiOcjene SO ON S.StudentID=SO.StudentID

GROUP BY Ime, Prezime

HAVING AVG(Ocjena*1.0) >= 3.5

ORDER BY Prezime

Ime Prezime Prosje čnaOcjena

Page 90: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

90

Tomislav Butorovic 4.0000

Ivo Ivic 4.0000

Helena Topic 4.0000

Ante Zelic 3.7500

i) Konačno, ispišimo sve studente s adresom 21000 ( Split ) koji imaju prosječnu

ocjenu 3.5 ili veću, te ukupan zbroj ocjena i prosječnu ocjenu svakog studenta, a

rezltate poredajmo po abecednom redu prezimena:

SELECT Ime, Prezime, PostaID, SUM(Ocjena) As ZbrojOcjena,

AVG(Ocjena*1.0) As ProsječnaOcjena

FROM Studenti S

LEFT OUTER JOIN StudentiOcjene SO ON S.StudentID=SO.StudentID

WHERE PostaID=21000

GROUP BY Ime, Prezime, PostaID

HAVING AVG(Ocjena*1.0) >= 3.5

ORDER BY Prezime

Ime Prezime PostaID 5.2.7 ZbrojOcjena Prosje čnaOcjena

Tomislav Butorovic 21000 16 4.0000

Ivo Ivic 21000 16 4.0000

Uočimo da kod upita grupiranja, projekcija( klauzula SELECT ) sadrži kolone iz

temeljnih tablica, kao Ime, Prezime i PostaID, te funkcije grupiranja,count(), SUM,

AVG. Operacija grupiranja ( klauzula GROUP BY ) mora sadržavati sve kolone po

kojima se grupiranje obavlja, dakle, Ime, Prezime i PostaID. Isto tako, rezultat

Page 91: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

91

grupiranja može se sortirati samo po kolonama koje su navedene SELECT klauzuli,

jer one jedino i postoje u radnoj tablici, koja se naknadno sortira.

5.2.8 Logi čki složeni uvjeti

a) Ispišimo sve studente Studijske čije ime ili prezime započinje slovom a :

SELECT Ime, Prezime

FROM Studenti

WHERE Ime LIKE 'a%' OR Prezime LIKE 'a%'

Ime Prezime

Ana Matic

Ana Marija Tomic

Hrvoje Antic

Ante Zelic

Uvjet će biti zadovoljen ako Ime ili prezime započinje slovom A, pa su ova dva uvjeta

povezana logičkim operatorom OR.

b) Ispišimo sve studente kojima Ime započinje slovom A a prezime slovom Z:

SELECT Ime, Prezime

FROM Studenti

WHERE Ime LIKE 'a%' AND Prezime LIKE 'z%'

Ime Prezime

Ante Zelic

Page 92: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

92

Uvjet je zadovoljen samo u slučaju kada ime započinje slovom A, a prezime slovom Z,

pa su ova dva uvjeta vezana logičkim operatorom AND.

c) Prikažimo studente, čije ime NE započinje slovomA i prezime započinje

slovom A:

SELECT Ime, Prezime

FROM Studenti

WHERE Ime NOT LIKE 'A%' AND Prezime LIKE 'A%'

Ime Prezime

Hrvoje Antic

Bilo koji od logičkih izraza može biti negiran, odnosno, rezultirat će istinom kada ne-

negirani uvjet daje laž.

d) Potrebno je izlistati sve studente, kojima ima ili prezime započinje slovom A,

a da im je PostaID=22000:

SELECT Ime, Prezime, PostaID

FROM Studenti

WHERE Ime LIKE 'A%' OR Prezime LIKE 'A%' AND PostaI D=22000

Ime Prezime PostaID

Ana Matic 22000

Ana Marija Tomic NULL

Ante Zelic 53000

Gornji upit nije dao očekivani rezultat, jer vidimo da samo jedan od tri studenta

prebiva na PostaID=22000. Problem je uzrokovan logičkim povezivanjem

elementarnih uvjeta. Naime, kao što kod računskih operacija množenje ima veći

prioritet od zbrajanja, tako logički operator AND ima veći prioritet od OR operatora.

Page 93: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

93

Zato gornji uvjet zadovoljava svaki redak, čim ime započinje slovo A.

Redoslijed razvijanja pojedinih elementarnih uvjeta možemo odrediti upotrebo

zagrada, pa je ispraljeni upit :

SELECT Ime, Prezime, PostaID

FROM Studenti

WHERE ( Ime LIKE 'A%' OR Prezime LIKE 'A%' ) AND Po staID=22000

Ime Prezime PostaID

Ana Matic 22000

Uočavamo da se najprije izračunava vrijednost logičkog izraza u zagradama.

5.2.9 Pobrojane vrijednosti

Ispišimo sve studente upisane na StudijID 1, 3 ili 5 :

SELECT Ime, Prezime, StudijID, PostaID

FROM Studenti

WHERE StudijID IN ( 1, 3, 5 )

Ime Prezime StudijID PostaID

Ivo Ivic 1 21000

Ana Matic 1 22000

Tomislav Butorovic 1 21000

Ana Marija Tomic 3 NULL

Ante Zelic 3 53000

Isti upit moguće je napisati ina ovaj način:

SELECT Ime, Prezime, StudijID, PostaID

FROM Studenti

Page 94: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

94

WHERE StudijID=1 OR StudijID=3 OR StudijID=5

Da se izbjegne ponavljanje imena kolone StudijID, prvi oblik upita, kod kojeg se

nabroji lista traženih vrijednosti, je mnogo prikladniji i razumljiviji, te se redovito

koristi. RDBMS izvodi oba upita na isti način.

5.2.10 Ugnijež đeni upiti

a) Prikažimo sve studente koji studiraju na istoj studijskog grupi kao student čije je

prezime Ivić.

Ovaj zadatak bismo mogli odraditi pomoću dva uipta:

Upit 1:

SELECT StudijID

FROM Studenti

WHERE Prezime='Ivic'

Zatim očitamo vrijednost StudijID i izvedemo

Upit 2:

SELECT Ime, Prezime, StudijID

FROM Studenti

WHERE StudijID=1

Oba upita moguće je definirati kao jedinstveni, ugniježđeni upit:

SELECT Ime, Prezime, StudijID

FROM Studenti

WHERE StudijID IN (SELECT StudijID

FROM Studenti

WHERE Prezime='Ivic')

Ime Prezime StudijID

Ivo Ivic 1

Page 95: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

95

Ana Matic 1

Tomislav Butorovic 1

Dakle, umjesto da pobrojimo konstantne vrijednosti, možemo definirati upit koji

vraća listu pobrojanih vrijednosti. Najprije se izvodi upit u zagradama, dakle

ugniježđeni, a zatim vanjski. Može se ugnijezditi veći broj upita.

b ) Komplementarno gornjem upitu, možemo ispisati sve studente koji nisu upisani na

isti studij kao student Ivić:

SELECT Ime, Prezime, StudijID

FROM Studenti

WHERE StudijID NOT IN (SELECT StudijID

FROM Studenti

WHERE Prezime='Ivic')

Ime Prezime StudijID

Ana Marija Tomic 3

Marko Markovic 2

Helena Topic 2

Hrvoje Antic 2

Ante Zelic 3

Uočimo, upotrebu ključne riječi NOT, kojom se označava da uvjet zadovoljavaju svi

studenti, čija je vrijednost StudijID različita od 1, tj. nemaju StudijID isti kao student

Ivić.

Često se ugnježđuju upiti grupiranja, kao u primjeru:

c) Ispišimo sve studente, koji studiraju na studijskim grupama, na kojima je upisano

više od 2 studenta.

Page 96: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

96

SELECT Ime, Prezime, StudijID

FROM Studenti

WHERE StudijID IN (SELECT StudijID

FROM Studenti

GROUP BY StudijID

HAVING count(*) > 2)

Ime Prezime StudijID

Ivo Ivic 1

Ana Matic 1

Tomislav Butorovic 1

Marko Markovic 2

Helena Topic 2

Hrvoje Antic 2

2.9 Jedinstvene vrijednosti redaka

a) Želimo znati početna slova ( inicijale ) imena studenata:

SELECT LEFT(Ime, 1)

FROM Studenti

ORDER BY 1

Inicijal

A

A

A

H

H

Page 97: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

97

I

M

T

U slučaju velikog broja redaka u tablici, ovakav prikaz bi bio potpuno nepregledan, pa

želimo vidjeti samo jedinstvene pojave svakog slova, jer nas saznanje da imamo

jednog ili više studenata čije ime započinje s A zadovoljava:

SELECT DISTINCT LEFT(Ime, 1)

FROM Studenti

ORDER BY 1

Inicijal

A

H

I

M

T

Ključna riječ DISTINCT označava da se retci s istom vrijednošću svih kolona,

prokažu samo jednom.

Kako RDBMS izvodi ovaj upit:

� Stvori privremenu radnu tablicu s kolonama kako je navedeno u SELECT klauzuli,

dakle u našem primjeru, s jednom kolonom.

� Izvodi upit pretražujući tablicu, provjeravajući zadovoljenje uvjeta ako postoji,

poziva funkciju LEFT, koja vraća prvo slovo imena.

� Upisuje vrijednosti projeciranih kolona onih redaka koji zadovoljavaju uvjet u

radnu tablicu

Page 98: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

98

� Sortira retke u radnoj tablici po svim kolonama

� Pretraži radnu tablicu ispisujući svaki put samo prvu pojavu retka, preskačući

retke koji imaju iste vrijednosti u svim kolonama, kao već ispisani redak.

2.10 Null vrijednost

Pri upisu retka u tablicu, vrijednosti nekih kolona mogu biti nepoznate, te ih moramo

ostaviti nedefiniranim. Naravno, neke kolone moraju imati obavezno unijete

vrijednosti, pa se pri kreiranju tablice zahtijeva obavezan unos vrijednosti. U našem

primjeru tablice Studenti, ime, prezime i studijska grupa moraju biti unijete, a

PostaID, te datum rođenja mogu ostati nedefinirane. Nedefinirana vrijednost naziva se

Null vrijednost.

a) Ispišimo sve studente koji imaju PostaID = Null :

SELECT Ime, Prezime, StudijID, PostaID

FROM Studenti

WHERE PostaID IS Null

Ime Prezime StudijID PostaID

Ana Marija Tomic 3 NULL

Marko Markovic 2 NULL

Uočimo da se Null vrijednost testira ključnom rječju IS Null i da test = Null, gdje je

znak jednakosti zamijenio ključnu riječ IS, ne mora dati očekivani rezultat. Naime, o

postavkama baze podataka ovisi rezultat test = Null, no to prelazi okvire ovih skripta.

b) Prikažimo sve studente koji imaju definiranu vrijednost PostaID, dakle

PostaID IS NOT Null :

SELECT Ime, Prezime, StudijID, PostaID

FROM Studenti

WHERE PostaID IS NOT Null

Page 99: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

99

Ime Prezime StudijID PostaID

Ivo Ivic 1 21000

Ana Matic 1 22000

Tomislav Butorovic 1 21000

Helena Topic 2 20000

Hrvoje Antic 2 23000

Ante Zelic 3 53000

Page 100: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

100

5.3 SQL komande za definiciju objekata relacijske b aze

podataka

U prethodnom poglavlju smo izvodili upite nad već definiranim tablicama u koje su

prethodno unijeti podaci. U ovom poglavlju ćemo definirati i izvoditi komande

kojima se stvaraju, mijenjaju i uništavaju objekti relacijske baze. Različiti sustavi za

upravljanje relacijskim bazama ( RDBMS ) pružaju mogućnost definiranja nekih

specifičnih objekata, no svi sigurno podržavaju mogućnost kreiranja, mijenjanja i

uništavanja tablica, pogleda ( views) i indeksa.

Isto tako, valja napomenuti da je mnogo prokladniji način stvaranja objekata

korištenjem grafičkog korisničkog sučelja. Lakše je klikom miša odabrati željenu

akciju ili tip podatka, nego pamtiti sintaksu komandi, te ćemo najvjerojatnije objekte

baze kreirati koristeći grafički interfejs i pokazivačku jedinicu ( miš ) na razvojnom

računalu. U fazi implementacije baze na ciljnom računalu ili većem broju ciljnih

računala, bilo bi veoma neprikladno ponavljati niz već odrađenih «klikova». Srećom,

danas korišteni sustavi relacijskih baza mogu generirati komande za stvaranje bazbih

objekata. Mi moramo komande razumjeti i biti u stanju zadati ih ručno.

U ovo poglavlju ćemo se upoznati samo s komandama u tekstualnom obliku.

5.3.1 Stvaranje, promjena i uništavanje tablice

Tablica sadrži kolone i retke. Kolone se moraju definirati prigodom stvaranja tablice,

a retci se stvaraju unosom vrijednosti u tablicu. Tablica predstavlja fizičku

implementaciju entiteta, a kolone atributa. Tablica je određena korisničkim imenom

kreatora i imenom tablice. Isti korisnik mora svakoj tablici odabrati jedinstveno ime.

Različiti korisnici mogu koristiti ista imena za svoje tablice. Kako jedan sustav za

upravljanje relacijskim bazama može u isto vrijeme upravljati s više baza na istom

stroju, kažimo da je tablica određena preko tri komponente:

Baza.Korisnik.Tablica

Jasno je, da u slučajevima kada se radna baza i korisnik podrazumijevaju, nije

potrebnonavoditi bazu i korisnika.

Page 101: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

101

5.3.1.1 Stvaranje tablice Studenti

Entitet Studenti opisan je atributima:

Atributi Opis

Ime Slobodno unijeti tekst, maksimalne dužine 30 znakova,

obavezan unos

Prezime Slobodno unijeti tekst, maksimalne dužine 30 znakova,

obavezan unos

DatumRodjenja Datum, unos nije obavezan

StudijID Cio broj, s vrijednostima od 1 do 255, obavezan unos. Opis

brojčane oznake pogledati u tablici Studiji

PostaID Cio broj, s vrijednostima od 10000 ( Zagreb) do 99999, unos

nije obavezan. Opis brojčanih vrijednosti pogledati u tablici

Poste

Kod kreiranja tablice je veoma važno odabrati odgovarajući tip podatka svake kolone.

Na taj način onemogućavamo unos nesuvislih ili nemogućih podataka, barem u onoj

mjeri koliko je to moguće. Pojasnimo primjerom: ako bi kolona DatumRodjenja bila

tekstualnog tipa, onda bi bo moguć unos datuma 30.02.2002, no znamo da veljača ne

može imati 30 dana. Zato je važno da kolona DatumRodjenja bude datumskog tipa,

pri čemu baza neće dopustiti unos nemogućeg datuma. Dakle, pravilnim izborom tipa

podatka kolone sprečavamo nemoguće unose, no neispravni unosi još su uvijek

moguću: npr. osobi rođenoj 2. siječnja 1980, još je uvijk moguće nepažnjom unijeti

datum rođenja 1. veljače 1980.

Dakle, tablica Studenti imat će kolone:

Kolona Tip podatka Null vrijednost Opis tipa podatka

Ime varchar(30) NOT Null tekstualni,

maksimalna dužina

30 znakova. Unosi

«troše» onoliko

Page 102: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

102

byte-ova koliko je

znakova unijeto, uz

dodatk 2 byte za

dužinu unijetog

podatka

Prezime varchar(30) NOT Null tekstualni,

maksimalna dužina

30 znakova

DatumRodjenja datetime Null Datumski podatak,

8 byte-ova ( ovisno

RDBMS)

StudijID tinyint NOT Null brojčani podataka

između 0 i 255, 1

byte

PostaID int Null brojčani podatak, 4

byte

Opisanu tablicu kreirajmo komandom:

CREATE TABLE Studenti (

Ime varchar(30) NOT Null,

Prezime varchar(30) NOT Null,

DatumRodjenja datetimeNull,

StudijID tinyint NOT Null

)

Tablicu Studenti, stvorenu gornjom komandom mogli smo kreirati i preko grafičkog

korisničkog sučelja.

Page 103: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

103

Kreiranje tablice preko GUI

5.3.1.2 Uništavanje tablice

Tablicu koju više ne trebamo možemo uništiti, komandom:

DROP TABLE Studenti

Želimo li ponovno stvoriti tablicu s istim imenom, postojeću moramo najprije uništiti,

jer nisu moguće dvije tablice s istim imenom.

5.3.1.3 Izmjena strukture tablice

Pri kreiranju tablice Studenti, propustili smo kreirati kolonu PostaID. Vrlo je čest

slučaj da se tijekom eksploatacije baze podataka moraju dodati neke kolone, kao

posljedica naknadog proširenja zahtjeva. Uništavanje, radi ponovnog kreiranja tablice

nije moguće jer su podaci već upisani, a to bi značilo njihov gubitak. Dapače, tablicu

će koristiti postojeća aplikacija, pa ona ne smije biti nedostupna. Zato su nam na

raspolaganju komande za dodavanje novih kolona, te za promjenu postojećih. Iz

praktičnih razloga, nastojimo nikada ne uništiti postojeće kolone, jer neki segment

aplikacije koji se poziva na stara imena kolona, neće raditi. Kolone možemo dodavati

bez bojazni po greške postojećih aplikacija, naravno ako se pridržavamo i nekih

drugih «praktičnih pravila» o kojima će biti riječi u slijedećem poglavlju.

Dodajmo kolonu PostaID int Null :

ALTER TABLE Studenti ADD PostaID int Null

Page 104: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

104

Kolonu nije moguće dodadi uz zabranu Null vrijednosti ( NOT NULL ), ako nije

definirana predefinirana ( default) vrijednost.

Navedimo i komandu za uništavanje kolone, iako je dobro izbjegavati takvu praksu, iz

ranije opisanih razloga:

ALTER TABLE Studenti DROP COLUMN PostaID

Promijenimo tip podatka kolone StudijID iz tinyint u smallint ( 2 byte ).

ALTER TABLE Studenti2 ALTER COLUMN StudijID smallin t

Pri izmjenama tipa podataka iz tipa većeg opseg vrijednosti u manji opseg, moramo

osigurati da već upisane vrijednosti ne prelaze novi, manji opseg.

Mijenjamo li maksimalno dopušteni broj znakova u kolonama varijabilne širine, može

doći do gubitka dijela unosa koji ne stane u novu, manju dimenziju. Neke RDBMS će

prijaviti grešku:

Server: Msg 8152, Level 16, State 9, Line 1

String or binary data would be truncated.

The statement has been terminated.

5.3.2 Stvaranje i uništavanje pogleda – view-a

U praksi ćemo vrlo često trebati ispise iz tablice Studenti povezane s tablicama Studiji

i Poste, jer nas u pravilu zanima naziv studija i pošte. Da bi olakšali pretraživanje i

izbjegli složenost često korištenih upita, stvorit ćemo pogled ( view) Vstudenti, koji

će povezivati potrebne tablice. Isto tako, javlja se potreba da neke kolone ne budu

dostupne stanovitoj grupi korisnika, dok ih neka druga skupina može čitati. U našem

primjeru, zadržat ćemo kolonu DatumRodjenja skrivenom u pogledu Vstudenti.

CREATE VIEW VStudenti

AS

(

SELECT Ime, Prezime, Studij, S.PostaID, Posta

FROM Studenti S

INNER JOIN Studiji ST ON S.StudijID=ST.StudijID

Page 105: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

105

LEFT OUTER JOIN Poste P ON S.PostaID=P.PostaID

)

Sada je ispis imena, prezimena, naziva studija, poštanskog broja i naziva pošte,

krajnje jednostavan:

SELECT *

FROM Vstudenti

Ime Prezime Studij PostaID Posta

Ivo Ivic Matematika - Informatika 21000 Split

Ana Matic Matematika - Informatika 22000 Sibenik

Tomislav Butorovic Matematika - Informatika 21000 Split

Ana Marija Tomic Matematika NULL NULL

Marko Markovic Tehnicka kultura - Informatika NULL NULL

Helena Topic Tehnicka kultura - Informatika 20000 Dubrovnik

Hrvoje Antic Tehnicka kultura - Informatika 23000 Zadar

Ante Zelic Matematika 53000 Gospic

RDBMS pogled tretira kao virtualnu tablicu, dakle ne čita je s medija ( diska ) nego

dinamički izgrađuje za vrijeme izvođenja upita, baš kao da smo zadali upit:

SELECT Ime, Prezime, Studij, S.PostaID, Posta

FROM Studenti S

INNER JOIN Studiji ST ON S.StudijID=ST.StudijID

LEFT OUTER JOIN Poste P ON S.PostaID=P.PostaID

To znači da možemo primijeniti restrikciju i sortiranje:

SELECT *

FROM VStudenti

WHERE Studij LIKE '%Informatika%'

Page 106: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

106

ORDER BY Studij, Prezime

Ime Prezime Studij PostaID Posta

Tomislav Butorovic Matematika - Informatika 21000 Split

Ivo Ivic Matematika - Informatika 21000 Split

Ana Matic Matematika - Informatika 22000 Sibenik

Hrvoje Antic Tehnicka kultura - Informatika 23000 Zadar

Marko Markovic Tehnicka kultura - Informatika NULL NULL

Helena Topic Tehnicka kultura - Informatika 20000 Dubrovnik

Zgodno je ovdje napomenuti, da suvremni sustavi za upravljanje relacijskim bazama

omogućavaju stvaranje materijaliziranih pogleda. Naime, relacijska baza mora biti

najmanje u 3. normalnoj formi, a to znači da svaka relacija ( tablica ) mora biti

najmanje u toj ili višoj normalnoj formi. Kod ispisa podataka često moramo spajati

veći broj tablica, što značajno ugrožava odzivna vremena, jer je operacija spajanja u

pravilu vremenski zahtjevna, naročito pri spajanju relacija s velikim brojem unosa

(redaka). Stoga se u praksi, nakon normaliziranja baze, često pristupa denormalizaciji.

U tom postupku materijalizirani pogledi igraju značajnu ulogu, jer oni predstavljaju

fizičku kopiju spojenih tablica, pri čemu RDBMS sam održava redudantne podatke.

Korisnici baze vide relacije ( tablice) normalizirane, bez odstupanja od teoretskih

postavki, a materijalizirani pogledi osiguravaju iznimno brze upite.

5.3.2.1 Uništavanje pogleda

Pogled koji više ne trebamo, ili ga želimo ponovno kreirati, možemo uništiti

komandom:

DROP VIEW Vstudenti

Jasno je da uništavanje pogleda nema nikakvog utjecaja na bazne tablice i podatke.

5.3.3 Stvaranje indeksa

Cilj ovog poglavlja su naredbe SQL jezika za stvaranje objekata relacijske baze, pa

tako i indeksa. Analizom upita, planiranjem indeksa, te ostalih potankosti vezanih uz

indekse se bavimo u posebnom poglavlju, a ovdje samo kratko pojasnimo pojam i

značaj indeksa.

Page 107: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

107

Pretpostavimo da želimo pronaći u telefonskom imeniku splitskog područja sve osobe

čije je prezime Ivić. Zadatak ćemo brzo obaviti, jer je imenik poredan po abecednom

redu prezimena pretplatnika. No, ako bi zadatak bio pronaći sve osobe koje žive u

Teslinoj ulici, potrošili bi mnogo više vremena. Jednostavno, morali bi krenuti od

prvog pretplatnika, na prvoj stranici imenika, te svakom pretplatniku pregledati ulicu.

Postupak provjere ulice bi provodili jednom po jednom, svim pretplatnicima, sve do

posljednjeg na zadnjoj stranici imenika. Razlog za potpuno čitanje imenika leži u

činjenici da je imenik sortiran po abecedi prezimena, ali ne i po ulicama. Dakle,

imenik je indeksiran po prezimenu. Kada bi željeli isti imenik sortiran i po ulicama, to

bi radi uštede papira mogli napraviti na ovaj način: dodati stranice s abecednim

popisom ulica, te kod svake ulice nabrojati sve stranice i retke u kojima ćemo pronaći

pretplatnike s adresom u Teslinoj ulici. To bi vjerojatno značilo, da bi brzo pronašli

Teslinu ulicu i onda bismo za svakog pretplatnika morali pronaći stranicu, te ponovno

za slijedećeg pretplatnika skoknuti na stranicu indeksa ulica, pročitati na kojoj se

stranici nalazi slijedeći pretplatnik i tako redom. Dakle, indeksiranjem se značajno

ubrzava pretraživanje.

Shvatimo naredbu za kreiranje indeksa kao sortiranje podataka u određenom poretku

(slučaj abecednog poretka po prezimenima), odnosno, kao dodavanje stranica s

abecednim poretkom ulica i pokazivačima stranica i redaka na kojima su pretplatnici

date ulice.

Naravno, mi želimo indeksirati tablicu studenti, po prezimenu, kako bismo u tablici s

mnogo redaka brzo pronašli traženo prezime ( naredbom je stvoren indeks koji

odgovara indeksiranju ulica u gornjem tekstu).

CREATE INDEX Prezime_X ON Studenti(Prezime)

Postupak stvaranja indeksa u velikim tablicama, s nekoliko stotina tisuća i miliona

redaka, može potrajati nekoliko minuta.

5.3.4 Uništavanje indeksa

Shvatimo komandu kao «trganje» iz telefonskog imenika dodanih stranica sa

sortiranim ulicama. Srećom, stranice medija za pohranu podataka se proglašavaju

slobodnima i bit će ponovno upotrebljene, dok recikliranje starog papira ipak ne ide

tako glatko.

Page 108: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

108

DROP INDEX Studenti.Prezime_X

Uočimo, da se indeks određuje imenom tablice i imenom indeksa, no to se može

razlikovati od jednog do drugog sustava relacijskih baza.

Podrobnije o indeksima govori se u drugim poglavljima ovih skripta.

Opće pravilo stvaranja i uništavanja objekata baze podataka

- stvaranje

CREATE TipObjekta NazivObjekta (

Definicija objekta

)

- uništavanje

DROP TipObjekta NazivObjekta

5.4 Naredbe za upisivanje, promjenu i brisanje poda taka

Cjeloviti informacijski sustav izgrađuje niz ekranskih formi – prozora preko kojih

upisujemno, mijenjamo ili brišemo podatke u tablicama relacijske baze, služeći se

programskim objektima za spajanje na bazu i rad sa skupovima podataka. No, pored

toga, u svim fazama života baze podataka, postavlaju se nepredviđeni upiti, a isto tako

se obavljaju ad hock izmjene podataka, pa stoga treba obratiti potrebnu pažnju i steći

potrebnu sigurnost i samopouzdanje u korištenju naredbi za manipulaciju podacima.

5.4.1 Upisivanje ( insertiranje ) retka

Upišimo novog studenta u tablicu Studenti, čije je ime Marko, prezime Marić, rođen

je 07.08.1980. i upisan je na studijsku grupu 1. Poštanski broj njegove adrese za sada

nije poznat.

INSERT INTO Studenti( Prezime, Ime, StudijID, DatumRodjenja)

VALUES( 'Marti ć', 'Marko', 1, '1980/08/07' )

Page 109: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

109

Primjetimo da nakon ključne riječi INSERT INTO slijedi ime tablice, te lista kolona u

koje će biti upisani podaci, dok ključnu riječ VALUES slijedi lista vrijednosti. Lista

kolona i lista vrijednosti moraju se podudarati po broju i tipu podataka. Sustav će

javiti grešku ako:

broj kolona nije jednak broju datih vrijednosti

(There are more columns in the INSERT statement than values specified in

the VALUES clause. )

upisujemo vrijednost čiji tip ne odgovara ili se ne može pretvoriti u tip kolone,

npr. ako bismo u cjelobrojnu kolonu StudijID pokušali upisati tekst 'Marko'.

(Syntax error converting the varchar value 'Marko' to a column of data type

smallint.)

tekstualne konstante nisu zatvorene u jednostrukim navodnicima

(The name 'Marko' is not permitted in this context. Only constants,

expressions, or variables allowed here. Column names are not permitted.)

datum nije ispravan.

(The conversion of a char data type to a datetime data type resulted in an

out-of-range datetime value.)

nije navedena vrijednost za kolonu s obaveznim unosom ( NOT Null ), a da

istovremeno nije zadana ( kod kreiranja tablice ) pretpostavljena (default)

vrijednost.

(Cannot insert the value NULL into column 'Prezime', table

'DT.dbo.Studenti'; column does not allow nulls. INSERT fails.The statement

has been terminated.)

5.4.2 Upisivanje svih kolona

Kada naredba za upisivanje retka obuhvaća listu svih kolona definiranih u tablici, nije

neophodno navoditi listu kolona, već samo listu vrijednosti, pri čemu poredak

vrijednosti mora odgovarati fizičkom poretku kolona u tablici:

INSERT INTO Studenti

VALUES( 'Slavko', 'Peri ć', '1980/08/07', 1, 21000 )

Page 110: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

110

Ovakvu naredbu možemo koristiti ad hock, dakle upotrijebimo i izbrišemo, ali nipošto

u programima ili skriptama koje se koriste trajno. Naime, tijekom vremena prpizići će

potreba za dodavanjem jedne ili više kolona u tablicu, što je uobičajena praksa kako

primjena baze napreduje, a onda broj kolona tablice i navedenih vrijednosti se neće

podudariti. Stoga je praktičana neophodnost da se uvijek navodi lista kolona u koje se

upisuju vrijednosti. Naknadno dodane kolone moraju dopuštati Null vrijednost ili

imati definiranu pretpostavljenu ( default ) vrijednost.

5.4.3 Upisivanje iz jedne tablice u drugu

Stvorimo li tablicu Studenti2, s kolonama Ime, Prezime i StudijID, tada u nju možemo

upisati dio ili sve retke iz tablice Studenti, naredbom:

INSERT INTO Studenti2( Ime, Prezime, StudijID)

SELECT Ime, Prezime, StudijID

FROM Studenti

WHERE StudijID=1

Dobijena poruka je (5 row(s) affected), te možemo provjeriti sadržaj tablice Studenti2.

5.4.4 Pomjena podataka ( update )

Potrebno je promijeniti DatumRodjenja studentu Ivo Ivić. Ispravan datum je

21.06.1980.

UPDATE Studenti

SET DatumRodjenja='1980/06/21'

WHERE Ime='Ivo' AND Prezime='Ivi ć'

Prije izvođenja ovakve naredbe, moramo biti sigurni da će se promjena provesti samo

željenom studentu, pa je kod ovakvih promjena najbolje koristiti primarni ključ u

WHERE klauzuli. Česte su greške koje se dese zbog brzopletosti, npr. izvođenjem

komande:

UPDATE Studenti

SET DatumRodjenja='1980/06/21'

Page 111: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

111

Učinak je katastrofalan: svim studentima postavljen je isti datum rođenja. Naravno i

za ovakve pogreške moramo predvidjeti lijek, no u svakom slučaju dobro je izbjeći

ovako neugodne situacije, pažljivim zadavanjem naredbe UPDATE.

5.4.5 Promjena podataka tablice vrijednostima druge tablice

Svim studentima koji nemaju definiran poštanski broj, ( PostaID IS NULL), potrebno

je upisati broj čija druga znamenka slijeva odgovara broju StudijID, a prva znamenka

je 2.

Kako se radi o zahtjevnoj naredbi, najprije ćemo provjeriti naše razmišljanje

izvođenjem SELECT upita, jer jasno je, pogrešno promijenjene podatke nije lako

popraviti:

SELECT StudijID, S.PostaID, P.PostaID

FROM Studenti S, Poste P

WHERE CONVERT(varchar,

StudijID)=SUBSTRING(CONVERT(varchar, P.PostaID), 2,1) AND

P.PostaID BETWEEN 20000 AND 29999 AND S.PostaID IS NULL

StudijID S.PostaID P.PostaID

3 NULL 23000

2 NULL 22000

1 NULL 21000

Kako smo zaista dobropostavili uvjet, to vidimo da su obuhvaćeni samo studenti

kojima nije definirana PostaID ( NULL ), te da je prva znamenka slijeva poštanskog

broja 2 i konačno StudijID i driga znamenka poštanskog broja se uvijek podudaraju.

Stoga, provedimo promjene podataka:

UPDATE Studenti

SET PostaiD=P.PostaID

FROM Studenti S, Poste P

Page 112: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

112

WHERE CONVERT(varchar, StudijID)=SUBSTRING(CONVERT( varchar,

P.PostaID), 2,1) AND

P.PostaID BETWEEN 20000 AND 29999 AND S.PostaID IS NULL

Jasno je, da će nakon izvedene naredbe PostaID dobiti ranijom komandom izlistane

vrijednosti.

5.4.6 Brisanje ( delete ) retka

Možemo brisati pojedinačne retke, grupu redaka koji zadovoljavaju određeni kriterij,

ili pak sve retke u tablici.

5.4.6.1 brisanje jednog retka

Općenito, sigurno ćemo izbrisati samo jedan redak, ako se u WHERE klauzuli testira

vrijednost primarnog ključa, jer on na jedinstven način identificira svaki redak.

Primarni ključ tablice Studenti je StudentID, čije vrijednosti automatski generira

sustav relacijske baze ( Autonumber ).

Brišemo, dakle trajno uklanjamo iz tablice, studenta Hrvoja Antića, čijije StudentID (

u mojoj tablici ) 7 naredbom:

DELETE FROM Studenti

WHERE StudentID=7

Kako smo upotrijebili primarni ključ kao uvjet, to smo sigurni da je izbrisan najviše

jedan redak.

5.4.6.2 brisanje više redaka koji zadovoljavaju uvjet

Pretpostavimo da su se svi studenti iz Zadarske i Šibenske županije ispisali sa studija,

te ih moramo ukloniti iz tablice. Iskoritit ćemo pogodnost da sve pošte u Zadarskoj

županiji započinju s 23, a u šibenskoj s 22, pa su u opsegu brojeva 22000 do 23999

zaparavo sva mjest ove dvije županije:

DELETE FROM Studenti

WHERE PostaID BETWEEN 22000 AND 23999

Rezulta je: (3 row(s) affected).

Page 113: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

113

brisanje svih redaka tablice

Vrlo jednostavno, kako se i da pretpostaviti, ispuštanjem uvjeta bit će izbrisani svi

retci tablice.

DELETE FROM Studenti

Skrenimo pažnju, da je nakon izvedene komande, tablica potpuno prazna. Prije

izvođenja ovakvih komandi, moramo biti sigurni što želimo.

Page 114: Ton ći Dadi ć - mapmf.pmfst.unist.hrmapmf.pmfst.unist.hr/~tdadic/Dadic_BazePodataka.pdf · 5 1 UVOD 1.1 Što je baza podataka? Intuitivno nam je jasno da su baze podataka sastavnica

114

6 Literatura:

1. Mladen Varga: «Baze podataka – Konceptualno, logičko i fizičko modeliranje

podataka», Društvo za razvoj informacijske pismenosti (DRIP), Zagreb, 1994.

2. Darko Hrenić: «ORACLE», Znak, Zagreb, 1995.

3. Ratko Vujnović: «SQL i relacijski model podataka», Znak, Zagreb, 1995.

4. Malcolm Dodwell: «System Modelling Techniques» ( Course Notes ), Oracle

Corporation UK Ltd, 1993.

5. David Solomon: «MS SQL Server 6.5», SAMS Publishing, 1996.

6. Kalen Delany: «Inside SQL Server 2000», 2000.

7. Ken Henderson: «The Gurus's Guide to Transact-SQL», Addison-Wesley,

2000.