Professional Documents
Culture Documents
Baze Podataka
Baze Podataka
Sveuilita u Splitu
Toni Dadi
BAZE PODATAKA
Split, 2002.
Sadraj:
UVOD..........................................................................................................................
1.1
to je baza podataka?.....................................................................................4
1.2
Vrste baza podataka........................................................................................7
1.2.1
Datotena baze podataka........................................................................7
1.2.2
Hijerarhijska baza podataka...................................................................8
1.2.3
Mrena baza podataka............................................................................9
1.2.4
Relacijska baza podataka.......................................................................9
1.2.5
Objektna baza podataka.........................................................................9
3
3.4
Videoteka - model praktinog primjera........................................................43
3.5
Model entiteti veze ( MS SQL Server 2000).............................................47
3.6
Funkcije ( metode )......................................................................................47
3.7
Impementacija objekata baze podataka primjer dviju tablica ( Microsoft
SQL Server 2000 ):...................................................................................................48
4
Indeksi.......................................................................................................................
Literatura:.................................................................................................................
1 UVOD
5
u radnoj memoriji i vanjskim jedinicama za masovnu pohranu podataka. Kako e
raunalni hardver obaviti ovu vrtstu osnovnih poslova, instruira ga programska
podrka koju nazivamo operacijski sustav. Nadalje, rauanlni 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 trai strogo definirane postupke, pa proizvoai
raunalnih sustava, dakle hardvera i sistemske podrke nisu u stanju definirati sve
detalje aplikativnih postupaka. Njih definiraju, te instruiraju raunalo kako da ih
obavi, kreatori primjenjene ili aplikativne programske podrke. S druge pak strane,
ako bi kreatori aplikacije morali voditi rauna o svim detaljima rada raunalnog
sustava, kao spremanjem podataka na medije za masovnu pohranu, njihovim
pretraivanjem , ispisom na ekranske forme i izvjetaje, od silnog posla i
mnogobrojnih detalja koji moraju biti razraeni do najsitnijih potankosti, nebi imali
vremena i mogunosti usredotoiti se na sam problem koji rjeavaju. Osim toga,
edukacija ljudi koji bi morali znati sve, poev od rada hardvera do detalja, do
tehnolokog posla kojeg informatiziraju, uzela bi toliko vremena, da bi vjerojatno
uili 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. tovie, 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
slua svega nekoliko studenata, ispitni termin dogovara s nastavnikom i nije potrebana
rezervacija dvorane. Nadalje, postupak prijave ispita u Kini i Hrvatskoj se sigurno
razlikuje uzme li se u obzir broj studenata na sveuilitima.
Oito je, da nije mogue 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 trite odredilo specijalizaciju poslova, pa je mogue proizvesti
identianu programsku podrku koja e spremati i pretraivati podatke, kako za
aplikaciju u Kini, tako i u Hrvatskoj. tovie, ljudi specijalizirani za poslove
spremanja podataka, toliko su uli u detalje tog problema, da ga mogu rijeiti bre i
bolje nego li bi mogao univerzalni programer, koji bi morao voditi rauna o svim
aspektima raunalnog sustava i tehnologije koja se automatizira. Nadalje, dobar
proizvod kojeg su napravili specijalisti, prodaje se s takvom tiraom da su njegvi
autori visoko stimulirani, a kupcima je cijena prihvatljiva. Nadalje, specijalizirani
opi posao spremanja podataka na magnetski medij trebaju kreatori razliitih
aplikacijskih programa, pa su tijekom vremena pronaeni presjeci poslova, koji su
identini svakoj aplikaciji tog tipa.
Prema izloenoj logici su nastali specijalizirani programi za obavljanje opih poslova
vezanih uz rad informacijskog sustava, te primjenjeni programi, koji koriste njihove
programske usluge i obavljaju poslove koje ljudi trebaju u konkretnom, strogo
odreenom poslu.
Iskustveno znamo da je ljudima znaajna informacija, koja mora biti prikazana na
podesan nain. Na primjer, zanima nas broj permutacija est znamenkastog broja
123456, ali esto nas ne zanima kako je rezultat izraunat, samo gotovi rezultat. Ako
6
e netko napraviti program za izraunavanje broja permutacija operaciju
faktorjel, on e to napraviti openito, recimo za izraunavanje broja faktorjela
Fakt(x), pri emu je x ulaz u program, koji e izraunati izlaz y i prikazati ga na
monitoru raunalnog sustava:
y = Fakt(x)
Dakle, program, bio on jednostavan ili sloen, na temelju ulaza izraunava izlaze.
Korisnike zanimaji izlazi, a da bi ih dobili moraju program snabdjedi traenim
ulazima. Program moe imati vei broj ulaza, te izraunati vei broj izlaza. Oznaimo
li s X skup svih ulaza, te s Y skup svih izlaza, program f transformira ulaze u izlaze:
Y = f(X)
Neki ulazi mogu biti zadani ad hock, neposredno prije izraunavanja izlaza, kao u
primjeru izraunavanja faktorjela. No, mnogo je ei sluaj kada izlazni odziv nije
mogue dobiti odmah. Pretpostavimo da traimo posao preko interneta. Jedan mogui
pristup je: prijavimo se u neki chat-room i unesemo poruku:
Zovem se Toni, traim posao programera na dot.net platformi u programskom jeziku
C# itd.
Nakon nekoliko sekundi poruka bi nestala s ekrana i trebali bismo je ponoviti svako
nekog vremena. Vrlo nepraktino i s minimalnim izgledima na uspjeh, jer je malo
vjerojatno da e se u isto vrijeme u istom chat-roomu nai i osoba iz tvrtke koja
trai ovjeka sa znanjem dot.net i C#, a sigurno je danas to traena specijalnost.
Mnogo prikladniji nain traenja angamana je ako moemo pohraniti podatke o sebi
i svom znanju, te da oni budu na raspolaganju onima koji trebaju programere, tako
dugo dok naa potraga traje. U ovom sluaju, program e generirati izlaze na temelju
dvije vrste ulaza:
- ranije unijetih i pohranjenih ( podaci nae ponude )
- zadanih neposredno prije izvoenja programa ( podaci potrage )
Oznaimo li s X skup ulaznih podataka kod izvoenja 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 moemo shvatiti kao elektronsko skladite za pohranu podataka, koji
e biti koriteni kao programski ulazi s odgodom. Kako je mogue predvidjeti i
generalizirati poslove spremanja te pretraivanja pohranjenih ulaznih podataka, to je
bilo mogue kreirati programski sustav za obavljanje ovih poslova. U poetku 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 rauna o zapisivanju i itanju
svakog pojedinog znaka. Vremenom su stvoreni specijalizirani programi za
upravljanje elektronskim skladitem podataka.
7
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
kod podizanja prtljaga vrlo brzo ga pronae i izrui. Uoio sam da u velikim
garderobama pitaju putnike: Kada ete podii?. Odgovorio sam Za 2-3 sta. Onda
su moj prtljag stavili na policu sasvim blizu primopredajnog pulta. Ja im nita 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 skladita. Zakljuio sam kako oni vode rauna o spremanju prtljaga, a mi im
samo kaemo to trebamo.
Na slian nain rade i sustavi za upravljanje bazom - elektronskim skladitem
podataka. Kreator aplikacije im preda podatke na pultu, oni ih spreme i sami vode
rauna o organizaciji podataka, kako bi ih brzo pronali, te nam ih ponovno predaju
na pultu kada ih trebamo. tovie, iste spremljene podatke mogu transformirati i
predati nam u razliitim oblicima, poredane na jedan ili drugi nain, ba kako ih u
datom momentu zahtijevamo.
Baza podataka je elektronsko skladite podataka zapisanih na mediju za
masovnu pohranu, pri emu su podaci tako organizirani da se lako i brzo
pronau i to u onom opsegu koji zadovoljava postavljeni kriterij, te prezentiraju
u pogodnom obliku. Spremanjem, pronalaenjem i sortiranjem podataka
upravlja poseban programski sustav: DBMS ( database management system).
Karakteristika baze podataka je:
1. velika koliina podataka
2. znatan broj dnevnih promjena
3. razliite razine izvjetaja, kao:
- detaljni podaci
- sumarni podaci
- izraunati podaci
8
svakog znaka na disku. Najee se podacima pristupalo prema apsolutnom poloaju
na disku.
Naroite potekoe kod velikih datoteka, zadavalo je pretraivanje podataka, koje je u
pravilu radilo sporo, a programeri su morali utroiti znaajno vrijeme i napr da ope
implementiraju pretraivanje. Dakle, glavni napor programera bio je usredotoen na
organizaciju podataka na disku i izradu procedura za spremanje, itanje, te
pretraivanje zapisa slogova podataka. Problemi bi tek dolazili s odravanjem i
potrebom naknadnih modifikacija. Dodavanje jednog polja zahtijevalo je pomicanje
slogova, te izmjenu cijelih aplikacija koje sa slogom rade, jer je poloaj svakog polja
bio odreen apsolutnom pozijom kao npr.: Ime studenta poinje s 35. byte-om sloga i
zavrava na 64 poziciji.
Kako su programeri imali potpunu slobodu u organizaciji podataka, to je praktino
svaka aplikacija, ak i unutar jedne tvrtke, bila inkompatibilna s drugima. O
povezivanju aplikacija koje rade na razliitim sustavima, nije se moglo ni sanjati.
Poduzee
Zaposlenik: Ante Ivi
Zaposlenik:Ivan Peri 1946
Zaposlenik: Ana Peri 1949
1958
Child-twin pokaziva
9
Mreni model podataka nastao je unapreenjem hijerarhiskog modela. Uoavamo da
zaposlenici Ivan i Ana Peri mogu biti suprunici, te u tom sluaju dijete Hrvoje
Peri moe biti dijete kako Ivana, tako i Ane Peri:
10
Oslikajmo gornju ideju primjerom: na ulicama New York-a ve dvadesetih godina
prolog stoljea su bili postavljeni automati za automatsku prodaju osvjeavajuih
pia ( i duhanskih proizvode, koji su jako tetni po ljudsko zdravlje, no to tada njihova
prodaja na ovaj nain, nije bila zabranjena ). Automat komunicira s kupcem preko
tipki za izbor pia, te prozora za ubacivanje i povrat novca. Automati koriteni prije
80 godina su bili potpuno mehanike naprave, a dananji koriste mikroraunala. No
kupcu je svejedno, jer suelje preko kojeg komunicira s automatom je praktino
nepromijenjeno svih ovih godina: uvijek je to tipka sa slikom i natpisom pia koje
naruuje.
Ideja objektno oblikovanog programa lei u dobro definiranom suelju preko kojeg
poziva snabdjeva programski objekt ulazima i od njega dobija izlaze. Procedura
obrade ostaje skrivena unutar pozvanog objekta. Upravo izreeno, zapravo je ideja
strukturnog programiranja, jedino objektni model donosi dobro definiran odnos meu
objektima, poboljava komunikaciju meu objektima preko interfejsa, te to je
najvanije, programske prevoditelje koji implementiraju objektni programski model.
Objektni pristup unapreuje timsku izradu softvera, te poveava mogunost ponovne
upotrebe ve napisanog koda ( eng. reusebility ).
Karakteristike objektnog programskog model su:
Enkapsulacija program poziva ( klijent ) pristupa pozvanoj strukturi (posluitelju)
iskljuivo preko svojstava ( property ) programskog suelja, te pozivom izloenih
metoda. Drugim rijeima, neke varijable i procedure posluiteljskog objekta su
dostupne pozivau, dok su druge skrivene. Kreator posluiteljskog objekta u
potpunosti kontrolira prava pristupa.
Nasljeivanje ( Inheritance ) objekti se nalaze u jednom od dva mogua odnosa:
-
11
klase mogu neke metode polaznih klasa nadjaati, pa se istim pozivom, zapravo
odrauje druga metoda specifina toj klasi.
Polimorfizam ( Polymorphism) sposobnost koritenja istog izraza za izvoenje
razliitih operacija. Osnov ovog svojstva je poznat od najranijih programa. Zbrajamo
li cijele brojeve, to se obavlja drukijom metodom, nego kad zbrajamo brojeve u
tekuem zarezu. Objektno programiranje je dosljedno, pa kreator klase odreuje nain
izvravanja izraza. Uzmimo na primjer klasu Boje. Poznato je da mijeanjem npr. ute
i plave boje dobijemo zelenu. Klasa boje moe promijeniti znaenje operatora plus (+)
i dati kao rezultat zelenu boju, kad god se zbrajaju uta i plava.
Poruke ( Messages) Objekti komuniciraje putem poruka. Najee se implementira
kao pridjeljivanje vrijednosti svojstvima ( set get property) i funkcijskim pozivima.
Postojanost ( Persistence) - Gore izreena svojstva odnose se na paradigmu objektog
programiranja. Objektna baza mora implementirati gornja svojstva, ali isto tako
implementirati svojstvo postojanosti ( perzistencije) velike koliine podataka. Dakle,
zapisati, itati i pretraivati vrijednosti atributa svake instance objekta na mediju za
masovnu pohranu podataka.
Koliko je autoru ovih redaka poznato, za sada ne postoji stroga, formlno prohvaena
definicija objektne baze. Dodue, mnogi proivoai sustava za upravljanje bazom
podataka tvrde da su njihove baze objektne, ali je teko ii u ocjenu opravdanosti
takva naziva, dok se ne prihvati formalna definicija to je objektna baza.
12
Baze podataka
SQL i relacijski
model podataka
ORACLE 7
Dalmatinska
kuhinja
Dalmatinski kolai
Ulica i kbr
Telefon
Autori
Mladen
DRIP
10000 ZAGREB Ilica 121
01/123-456 Varga
01/413Ratko
ZNAK
10000 ZAGREB Vukovarska 56 8567
Vujnovi
01/413ZNAK
10000 ZAGREB Vukovarska 56 8567
Darko Hreni
021/345- Ankica Bilu,
LOGOS 21000 SPLIT
Narodni trg 4 678
Marija Rode
021/345- Ankica Bilu,
LOGOS 21000 SPLIT
Narodni trg 4 678
Tanja Kesi
Luka prve probleme uoava 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 izdavau ZNAK, mijenjati. im bi
knjiara prodavala vei broj Znakovih naslova, Luka bi uoio maljkavost svog modela
podataka, jer bi morao u mnogo redaka brisati stare i upisivati nove podatke.
13
Naslov
Baze podataka
SQL i relacijski model podataka
ORACLE 7
Izdava
DRIP
ZNAK
ZNAK
Dalmatinska kuhinja
Dalmatinski kolai
LOGOS
LOGOS
Tablica: Izdavai2
Izdava Pota
DRIP
ZNAK
LOGOS
10000
10000
21000
Mjesto
ZAGREB
ZAGREB
SPLIT
Ulica i kbr
Ilica 121
Vukovarska 56
Narodni trg 4
Autori
Mladen Varga
Ratko Vujnovi
Darko Hreni
Ankica Bilu, Marija
Rode
Ankica Bilu, Tanja Kesi
Telefon
01/123-456
01/413-8567
021/345-678
Naslov
Baze podataka
SQL i relacijski model podataka
ORACLE 7
Izdava
DRIP
ZNAK
ZNAK
Dalmatinska kuhinja
Dalmatinski kolai
LOGOS
LOGOS
Tablica: Izdavai3
Izdava Pota
DRIP
ZNAK
LOGOS
10000
10000
21000
Tablica Pote3:
Ulica i kbr
Ilica 121
Vukovarska 56
Narodni trg 4
Telefon
01/123-456
01/413-8567
021/345-678
Autori
Mladen Varga
Ratko Vujnovi
Darko Hreni
Ankica Bilu, Marija
Rode
Ankica Bilu, Tanja Kesi
14
Pota
10000
10000
21000
Mjesto
ZAGREB
ZAGREB
SPLIT
Luki se ovo rjeenje inilo dobro, sve dok nije odluio tiskati prospekt o knjigama
koje prodaje. Naime, u prospektu je trebao ispisati bibliografske podatke o svim
autorima koji su napisali knjige. Uoio je veliki problem kod knjiga to su ih napisala
dva ili vie autora, te ponavljanje bibliografskih podataka autora u svakom retku. Isto
tako, jedan autor je mogao napisati vie knjiga za razliite izdavae, s razliitim
koautorima. Nije bilo druge, nego iz tablice knjige izdvojiti kolonu autori, a da ne
izgubi vezu izmeu autora i knjiga, napraviti posebnu tablicu u koju e upisivati samo
identifikaciju autora i knjiga. Kako su knjigu istog naslova, npr. SQL, mogli izdati
razliiti izdavai, odlui knjigu identificirati naslovom i nazivom izdavaa:
Tablica:Knjige4
Red.
broj
Naslov
1
Baze podataka
2
SQL i relacijski model podataka
3
ORACLE 7
4
Dalmatinska kuhinja
5
Dalmatinski kolai
Tablica: Izdavai4
Izdava
Pota
DRIP
10000
ZNAK
10000
LOGOS 21000
Ulica i kbr
Ilica 121
Vukovarska 56
Narodni trg 4
Izdava
DRIP
ZNAK
ZNAK
LOGOS
LOGOS
Telefon
01/123-456
01/413-8567
021/345-678
Tablica Pote4:
Pota
Mjesto
10000
ZAGREB
10000
ZAGREB
21000
SPLIT
Tablica: Autori4
Ime
Mladen
Ratko
Darko
Ankica
Marija
Tanja
Prezime
Varga
Vojnovi
Hreni
Bilu
Rode
Kesi
Datum roenja
15
Tablica: Knjige_Autori4
Red. broj Naslov
Izdava
1
Baze podataka
DRIP
SQL i relacijski
2
model podataka
ZNAK
3
ORACLE 7
ZNAK
4
Dalmatinska kuhinja LOGOS
4
Dalmatinska kuhinja LOGOS
5
Dalmatinski kolai LOGOS
5
Dalmatinski kolai LOGOS
Autor_ime
Mladen
Ratko
Darko
Ankica
Marija
Ankica
Tanja
Autor_prezime
Varga
Vujnovi
Hreni
Bilu
Rode
Bilu
Kesi
Na kraju, Luka uoava da bi znaajno tedio papir i trud oko upisivanja u tablicu
Knjige_Autori4, ako bi tablicu povezao s Knjige4 sluei se rednim brojem knjige.
Naalost, prednost polazne tablice Knjige1, da svi podaci o knjizi budu pregledni i
lako dostupni vie nije ouvana. Sreom, raunalo moe obavito ovo povezivanje
brzo i lako, te je Luka odluio nauiti pravila relacijskog modela i upotrijebiti
programski sustav za upravljanje relacijskom bazom.
16
moe biti obavljana u svakom mjestu. Naravno da skup postojeih pota i djelatnosti
predstavlja podskup Kartezijevog produkta.
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 konanog skupa (naziva) atributa
odnosno stupaca ( A1, A2, An ), koji opisuju istoimenu relaciju.
Uobiajeni nain 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 identine n-torke.
Klju relecije je minimalni skup atributa ije vrijednosti jednoznano 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 razliite vrijednosti atributa K, tj. da je ri(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 uobiajeno koritenje pojmova:
tablica je fizika implementacija relacijske sheme
kolona implementacija atributa
redak implementacija n-torke
17
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 sadranih u R i S.
Studenti1:
Ime
Ivo
Ana
Josip
Prezime
Ivi
Mari
Petri
Studenti2:
Ime
Luka
Ana
Prezime
Dadi
Mari
Studenti1_UNIJA_Studenti2:
Ime
Ivo
Ana
Josip
Luka
Prezime
Ivi
Mari
Petri
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 obuhvaa sve n-torke iz R, koje nisu
sadrane u S.
Studenti1:
Ime
Ivo
Ana
Josip
Prezime
Ivi
Mari
Petri
Studenti2:
Ime
Luka
Ana
Prezime
Dadi
Mari
Studenti1_MINUS_Studenti2:
Ime
Ivo
Josip
Prezime
Ivi
Petri
Studenti2_MINUS_Studenti1:
Ime
Luka
Prezime
Dadi
18
Kartezijev produkt
Kartezijev produkt 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 ntorke 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
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
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.
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 sadrane u spoju. Te n-torke
su popunjene null-vrijednostima na mjestima nedostajuih atributa.
19
20
10. Neovisnost integriteta: Ogranienja na integritet podataka ne smiju biti dio
aplikacije ve moraju biti sadrana u katalozima baze.
11. Neovisost distribucije: : Bez obzira na to, podrava li sustav distribuciju ili ne,
jezik sustava mora biti takav da podrava distribuciju bez uticaja na aplikativne
programe.
12. Pravilo o nesubverzivnosti: Ako sustav podrava jezik niskog nivoa, taj jezik ne
smije biti koriten da bi se zaobila ili ignorirala pravila o integritetu.
ogranienja strukture
ogranienja ponaanja
21
Referencijsko ogranienje ili integritet stranog kljua strani klju u relaciji mora
biti jednak jednoj od vrijednosti u relaciji gdje je on promarni klju ili pak moe ostati
nedefiniran, tj. primiti Null-vrijednost.
Navedena ogranienja odnose se na strukturu podataka.
F3)
F4)
F5)
F6)
22
ovisnosti (VZO), odnosno A ->>, ako vrijedi: uvijek kada relacija r sadri n-torke
t1(ABC)=a(b1)(c1) i t2(ABC)=a(b2)(c2), onda mora sadravati i n-torke
t3(ABC)=a(b1)(c2) i t4(ABC)=a(b2)(c1). Pojasnimo vieznanu ovisnost primjerom.
Student
Ivi
Ivi
Ivi
Ivi
Sport
PLIVANJE
TRANJE
PLIVANJE
TRANJE
Jezik
NJEMAKI
ENGLESKI
ENGLESKI
NJEMAKI
Sport
PLIVANJE
TRANJE
Student
Ivi
Ivi
Jezik
NJEMAKI
ENGLESKI
2.6 Normalizacija
Normalizacija je postupak uklanjanja nepoeljnih funkcijskih ovisnosti, a provodi se
radi postizanja dobrih statikih i dinamikih svojstava baze podataka:
-
23
Definirano je est normalnih formi, a u praksi je potrebno i najee dovoljno, dovesti
sve relacije u treu normalnu formu.
Teaj Kune
7,42
7,42
7,42
Klju tablice Knjige_0 je Naslov ( # ispred imena oznaava primarni klju). Jasno je
da cijena svake knjige ovisi o kojoj se knjizi radi, a to nam jednoznano odreuje
naslov knjige. Prema tome, nekljuni atribut cijena ovisi o kljuu. Teaj Kuna Euro,
nipoto ne ovise o naslovu knjige, dakle, tablica Knjige_0 nije u prvoj normalnoj
formi. Tablica koja nije u prvoj normalnoj formi ne moe se zvati relacijom, jer je po
definiciji relacija barem u prvoj normalnoj formi.
Rjeenje: dekomponirati tablicu Knjiga_0 u dvije:
Tablica:Knjige_1
#Naslov
Cijena u
EURIMA
SQL
50,00
Baze podataka
60,00
DOS
30,00
Tablica:Teajna_Lista_1
#Datum
Teaj Kune
09.12.2002
7,42
Knjige_1 je u prvoj normalnoj formi, jednako kao i Teajna_Lista_1.
24
Primjer 2:
Tablica:Knjige_0
Kataloka oznaka Naslov
1
2
3
4
5
Baze podataka
SQL i relacijski
model podataka
ORACLE 7
Dalmatinska
kuhinja
Dalmatinski
kolai
Broj
strnica
162
419
780
420
360
U tablici Knjige_0, upisana je adresa izdavaa, ali isto tako prezimena svih autora
naslova. Tablica nije u prvoj normalnoj formi, jer podaci u koloni autori nisu atomini
( dakle, niti se ne moe utvrivati funkcijska ovisnost, jer jedan atom moe funkcijski
ovisiti, a drugi ne).
Rjeenje: Rascijepiti neatomine 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)
Broj
Kataloka
stranica Izdava Pota Mjesto
oznaka
Naslov
1
2
3
4
4
5
5
Baze podataka
162
SQL i relacijski model 419
podataka
ORACLE 7
780
Dalmatinska kuhinja 420
Dalmatinska kuhinja 420
Dalmatinski kolai
360
Dalmatinski kolai
360
DRIP
Autor
10000 ZAGREB Varga
ZNAK
ZNAK
LOGOS
LOGOS
LOGOS
LOGOS
10000 ZAGREB
10000 ZAGREB
21000 SPLIT
21000 SPLIT
21000 SPLIT
21000 SPLIT
Vujnovi
Hreni
Bilu
Rode
Bilu
Kesi
Sada imamo atomine podatke, te moramo definirati primarni klju relacije. Postavlja
se pitanje to odreuje atribut Broj stranica? Jasno je da broj stranica knjige ovisi o
Katalokoj oznaci. Klju mora imati jedinstvenu vrijednost, a u sluaju kada su jedan
naslov napisala dvojica ili vie autora, vrijednost atributa Kataloka oznaka se
ponavlja. Stoga, definirajmo primarni klju slaganjem atributa Kataloka oznaka +
Autor (Relacija Knjige_1B). Primjetimo, hipotetski sluaj kada bi jedan naslov mogao
napisati samo jedan autor, tada bi klju mogao biti jednostavan, inio bi ga samo
atribut Kataloka oznaka. ( Relacija Knjige_1A).
Relacija:Knjige_1A ( jednostavan klju)
#Kataloka
oznaka
1
2
3
4
Broj
stranica
Naslov
Baze podataka
SQL i relacijski
model podataka
ORACLE 7
Dalmatinska
162
419
780
420
25
kuhinja
Dalmatinski kolai 360
Tablica:Knjige_1B(sloeni klju)
#Kataloka
oznaka
Naslov
1
2
3
4
4
5
5
Broj
stranica Izdava
Baze podataka
162
DRIP
SQL i relacijski
419
model podataka
ZNAK
ORACLE 7
780
ZNAK
Dalmatinska
420
kuhinja
LOGOS
Dalmatinska
420
kuhinja
LOGOS
Dalmatinski kolai 360
LOGOS
Dalmatinski kolai 360
LOGOS
Bilu
Bilu
21000 SPLIT
21000 SPLIT
21000 SPLIT
Rode
Bilu
Kesi
Svi nekljuni atributi ovise o kljuu, pa moemo kazati da smo doveli relaciju u prvu
normalnu formu ( u oba sluaja).
Usprkos tome to smo relaciju doveli u prvu normalnu formu, uoavamo znaajne
anomalije, prije svega u redundantnosti podataka, to vodi nepotrebnom troenju
medija za spremanje podataka i vrlo je oteano mijenjanje. Dakle, nije dovoljno
dovesti relaciju u prvu normalnu formu.
26
odreuje autora, pa emo izdvojiti atribute Kataloka oznaka i Autor u posebnu
relaciju.
Relacija:Knjige_2
#Kataloka
oznaka
Naslov
1
2
3
4
5
Broj
starnica Izdava
Baze podataka
162
DRIP
SQL i relacijski
419
model podataka
ZNAK
ORACLE 7
780
ZNAK
Dalmatinska
420
kuhinja
LOGOS
Dalmatinski kolai 360
LOGOS
Pota Mjesto
10000 ZAGREB
10000 ZAGREB
10000 ZAGREB
21000 SPLIT
21000 SPLIT
Relacija: Knjige_Autori_2
#Kataloka
oznaka
1
2
3
4
4
5
5
#Autor
Varga
Vujnovi
Hreni
Bilu
Rode
Bilu
Kesi
27
Relacija:Knjige_3
#Kataloka
oznaka
Naslov
1
2
3
4
5
Broj
stranica Izdava
Baze podataka
162
DRIP
SQL i relacijski
419
model podataka
ZNAK
ORACLE 7
780
ZNAK
Dalmatinska
420
kuhinja
LOGOS
Dalmatinski kolai 360
LOGOS
Relacija:Izdavai_3
Izdava
DRIP
ZNAK
LOGOS
Pota
10000
10000
21000
Relacija:Pote_3
Pota Mjesto
10000 ZAGREB
21000 SPLIT
Kupac
Naprijed
Polet
Srima
Srima
Swing
28
Relacija je u Boyce-Coddovoj normalnoj formi (BCNF) ako sve funkcijske
zavisnosti relacije proizlaze iz njezinog kljua.
Relacija je u BCNF ako ne postoji ni jedan tranzitivno zavisan atribut, ukljuujui i
atribute kljua. BCNF je gotovo identina 3NF, s time da uvjete o tranzitivnoj
neovisnosti protee i na sam klju.
Iz definicije je jasno zato relacija Referent_Artikal_3 nije u BCNF. Funkcijska
zavisnost Kupac Referent ne proizlazi iz kljua.
Relacija: Kupac_Artikal_BCNF
#Kupac
#Artikal
Naprijed
Papir
Polet
Olovke
Srima
Omotnice
Srima
Biljenice
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 sauvana je informacija o tome koji se artikli
prodaju svakom kupcu, te koji referent opsluuje svakog kupca, ali je izgubljena
informacija po kojim artiklima referent posluuje kupca.
U nekim prilikama moemo zakljuiti, da je bolje sauvati relaciju u 3NF, nego li
izgubiti dio informacija.
#Jezik
NJEMAKI
ENGLESKI
ENGLESKI
NJEMAKI
29
Kako je oito da u relaciji ne vrijedi niti jedna funkcijska zavisnost, relacija je u
BCNF. Ipak, velika redundancija rezultira u manjkavosti koritenja medija za
spremanje podataka i oteava izmjene podataka.
Relacija u kojoj je zadan skup funkcijskih i vieznanih ovisnosti, u etvrtoj je
normalnoj formi (4NF), ako je svaka vieznana ovisnost X ->> Y trivijalna ili je X
klju relacije.
Pouzdanim dekomponiranjem se relacija prevodi u dvije nove relacije, koje spajanjem
rezultiraju polaznom relacijom, pa kaemo da je dekompozicija reverzibilna, dakle
pouzdana.
Relacija: Student_Jezik_5
#Student
#Jezik
Ivi
ENGLESKI
Ivi
NJEMAKI
Relacija: Student_Sport_5
#Student
#Sport
Ivi
PLIVANJE
Ivi
TRANJE
30
Br.Indeksa
1
1
2
Instrument
Violina
Flauta
Violina
Relacija: Instrument_Nastavnik_5
Instrument
Nastavnik
Violina
Ani
Flauta
Peri
Violina
Peri
No, veina se relacija koje predstavljaju implementaciju n arne ( n>2) veze ne moe
dekomponirati, jer ponovnim spajanjem nastaju nepostojee n-torke:
Relacija: Student_Instrument_Nastavnik_S
Br.Indeksa
Instrument
Nastavnik
1
Violina
Ani
1
Violina
Peri
1
Flauta
Peri
2
Violina
Peri
31
Analiza
Oblikovanje
Implementacija
Eksploatacija
Odravanje i naknadne modifikacije
32
dnevno, da li se u meuvremenu pojavio auto koji zadovoljava kriterije i o tome
kupca obavijestiti e-mailom.
Logiko ( konceptualno) oblikovanje faza analize zavrava definicijom pojmova i
opisom entiteta, njihovih atributa, te moguih domena, najee prirodnim jezikom
(hrvatskim ili engleskim). Nakon toga, valja identificirati entitete, atribute i domene,
te metode - funkcije. Najee imenice iz opisa prirodnim jezikom vode entitetima i
njihivim atributima, a pridjevi i brojani podaci definiraju domene. Rezultat ovog
koraka su relacije prikazane prikladnim simbolima. Vrlo je vjerojatno da e u ovoj
fazi relacije posjedovati nepoeljnu redundantnost, kao posljedicu nedoputenih
funkcijski zavisnosti, pa se primjenjuje postupak normalizacije, iterativno, sve dok ne
dovedemo sve relacije barem i obavezno u treu normalnu formu (3NF). Nakon toga
slijedi utvrivanje meusobnih veza meu 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 slui kao podloga za izbor
tipa podatka i eventualna integritetska ogranienja ( ogranienje null vrijednosti,
ogranienje podruja vrijednosti uvjetom koji podaci moraju zadovoljiti ili
referencijalnim, tj. integritetom stranog kljua). Slijedi izrada objekata baze podataka,
najee pomou grafikog korisnikog suelja na razvojnom raunalu proizvoaa
IS, te generiranje komandi upitnog jezika (SQL), koje se koriste za prenoenje
objekata na odredina raunala kupca.
Statika i dinamika analiza uvrivanjem tipova podataka svake kolone, te
poznavanjem naina kako koriteni RDBMS sprema podatke na mediju, a na temelju
procjene broja n-torki, odnosno redaka svake tablice, procjenjuje se fizika veliina
tablica. Isto tako, u najranijoij fazi definicije projeta, potrebno je definirati odzivna
vremena kritinih, esto izvoenih upita. Najbolje je da definicija odzivnih vremena
bude kvantificirana ( npr. 3 sekunde nakon klika na dugme Trai ). Da bi odzivna
vremena bila zadovoljena, vano je pravilno procijeniti vanost i uestalost pojedinih
upita, te broj klijenata koji e istovremeno napadati bazu podataka. Analiza upita i
odzivnih vremena rezultira definiranjem odgovarajuih indeksa, koji znaajno
ubrzavaju pretraivanje, ali naalost usporavaju izmjene ( upisivanje insert,
promjene update i brisanje delete ), jer kod svake izmjene indeksi moraju biti
reorganizirani. Stoga teimo identifikaciji minimalnog broja indeksa, koji
zadovoljavaju kritine upite nad vruim tablicama. Kako indeksi troe prostor na
mediju za pohranu podataka, izraunava se statika indeksa na temelju broja redaka
tablice i poznavanja organizacije indeksa koritenog RDBMS. Ova veliina, zajedno
s veliinom prostora za pohranu tablinih podataka, slue za procjenu veliine
potrebnog prostora medija za masovnu pohranu ( diska).
Eksploatacija i odravanje baze podataka - ve prije poetka eksploatacije
potrebno je planirati sigurnost podataka i to u smislu neovlatenog pristupa podacima,
te uvanja priuvnih podataka backupa. Naime, mogue elementarne nepogode ili
teroristiki napadi mogu unititi cijeli raunalni sustav, skupa s podacima. Isto tako
kvar raunalnog 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
raspoloivosti podataka moe biti nekoliko sekundi ili nekoliko dana nakon gubitka,
33
pa zavisno definiciji ovog intervala, izraujemo strategiju backupa, poev od standby-backup-baze za brzi nastavka rada, do klasninog pristupa zamjene neispravnih
dijelova raunala i restauracije podataka, to moe potrajati nekoliko sati ili ak dana.
Tijekom eksploatacije potrebno je pratiti odzivna vremena i korist predvienih
indeksa, te po potrebi brisati nekorisne i kreirati nove korisne indekse.
U ranim fazama projekta, nije mogue predvidjeti sve funkcionalnosti informacijskog
sustava, ili jo ee svjesno se ide s minimalnim funkcijama, kako bi se izilo na
trite prije konkurencije i ostvariovao prihod. Potom se sustav obogauje, a to
zahtijeva i promjene strukture baze podataka. Vrlo je vano promjenama ne ugroziti
postojee stanje, kako u smislu funkcionalnosti, tako i u smislu odzivnih vremena.
34
restrikcije). Klasini pogled nema fizikog zapisa podataka na mediju, ve obavlja
projekciju, restrikciju i spajanje dinamiki, kada se upit definiran pogledom izvodi.
Moemo sebi predoiti pogled, kao zamjenu sloenog upita jednim imenom, a
pozivom pogleda, se zapravo izvodi upit koji lei iza tog imena.
Nasuprot tome, materijalizirani pogled ima fiziki zapis podataka na magnetskom
mediju, kao slave podatke, pa se pozivom imena materijaliziranog pogleda, zapravo
ita fiziki zapis kopije podataka. RDBMS osigurava da kopija podataka iz razliitih
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 dinamiki spajanje veeg broja tablica.
Ovom tehnikom moemo postii bazu koja apsolutno udovoljava i najstroim
teoretskim zahtjevima, a da isto tako kritini upiti budu pokriveni materijaliziranim
pogledima, ime se ostvaruju iznimno dobra odzivna vremena. Naravno, broj
materijaliziranih pogleda mora biti ogranien, jer bi u protivnom usporio promjene
podataka kod OLTP baza, pa treba vrlo briljivo odabrati upite pokrivene
materijaliziranim pogledom.
35
hrvatske povijesti detaljnije ( u osnovnoj koli), onda se postupak ponavlja s vie
detalja o svjestkoj povijesti itd. ( u srednjoj koli).
Dakle, uoavamo postupnost u razumijevanju i svladavanju problema, pa isti pristup
valja primijeniti i kod modeliranja objekata i zbivanja odnosno tehnolokih
postupaka predmeta informatizacije.
36
OSOBA
OSOBA
OSOBA
3.3.4 Veze
Veza predstavlja bilo koji nain na koji dva objekta istog ili razliitog tipa mogu biti
upueni jedan na drugoga. Svaku je vezu dobro imenovati, naprimjer:
ZAPOSLENIK obavlja POSAO
POSAO je dodijeljen ZAPOSLENIK-u
Veze su opisane stupnjem veze i opcionalnou:
U naem primjeru, stupanj veze odgovara na pitanje: Koliko poslova moe obavljati
jedan zaposlenik?
37
POSAO
dodijeljen
Chenova notacija:
ZAPOSLENIK
obavlja
N
POSAO
ORACLE notacija:
ZAPOSLENIK
POSAO
38
Naziv veze
Jedan prema vie
Martinova notacija
1:N
Chenova notacija
1:N
M:N
M:N
1:1
1:1
Martinova
notacija
0,1
Chenova notacija
0,N
0,N
1,N
1,N
ORACLE notacija
Opcionalnost veze:
Naziv veze
Opcionalna veza
(moe biti) jedan
Opcionalna veza
(moe biti) vie
Obvezna veza
(mora biti ) jedan
Obvezna veza
(mora biti ) barem
jedan ili vie
Svaki ( entitet )
mora biti /1/
ili
( veza )
(entitet)
0,1
ORACLE notacija
39
Primjer: Svaki zaposlenik obavlja barem jedan ili vie poslova, te svaki posao je
dodijeljen jednom ili vie zaposlenika.
Evo nekih korisnih parova imena veza:
temelji se na osnov za
kupuje se od isporuuje
imenovan za povjeren
dio od sastavljen od
odgovoran za u nadlenosti
PROJEKT
ukljuen
0,N
Vezu vie prema vie ( M:N) teko je implementirati i odravati, stoga se ona
dekomponira u dvije veze 1 naprema vie ( 0,1:N + 0,1:M ).
ZAPOSLE
NIK
0,1
ZAP_PROJ
M
N
PROJEKT
0,1
Dakle, veza M:N se dekomponira u dvije veze 1:N, umetanjem presjenog (eng.
intersection) entiteta, pri emu je kardinalni broj (stupanj veze), na strani polaznih
entiteta 1 uz zadranu opcionalnost, dakle 1 ili 0,1, a na strani presjenog entiteta
1,M. Dakle, polazna veza Svaki Zaposlenik moe biti ukljuen u vie projekata i
Svaki projekt moe ukljuivati vie zaposlenika je sauvana. Presjeni entitet e
imati dva strana kljua, koji su primarni kljuevi u polaznim entitetima, a oni zajedno
ine primarni klju u presjenom entitetu.
40
OSOBA
ima efa
0,N
Dakle, Svaka osoba moe ( glavni ef nema nad-efa) imati jednog i samo jednog
neposrednog efa, a neke osobe su efovi veem broju osoba.
Rekurzivna veza je zgodna za prikazivanje sastavnica, dio od sastavljen od,
teritorijalne pripadnosti itd.
Naziv veze
barem jedan ili vie prema moe biti
jedan
moe biti vie prema moe biti jedan
moe biti vie prema jedan i samo
jedan
barem jedan ili vie prema jedan i
samo jedan
moe biti vie prema moe biti vie
barem jedan ili vie prema moe biti
jedan
barem jedan ili vie prema barem
jedan ili vie
jedan i samo jedan prema moe biti
jedan
moe biti jedan prem amoe biti
jedan
jedan i samo jedan prema jedan i
samo jedan
Uestalost
(5) VRLO ESTO
(4) ESTO
(3) NIJE RIJETKO
(2) RIJETKO
(4) ESTO U POETNOJ
FAZI
(4) ESTO U POETNOJ
FAZI
(1) VRLO RIJETKO
(2) RIJETKO
(2) RIJETKO
(1) VRLO RIJETKO
3.3.8 Atributi
Openito kazano atributi opisuju entitet.
Namjena atributa je da:
- Kvalificiraju
- Identificiraju
- Klasificiraju
- Kvantificiraju
- Izraze stanje
41
Kategorija
Identificira
Identificira
Kategorizira
Studijska grupa
Poloeni ispiti
Teina
Status
Klasificira
Kvalificira
Kvantificira
Izraava stanje
Brano stanje
Izraava stanje
Opis
Npr. u statistikoj analizi
prolaznosti s obziro iz koje
kole dolazi
Prema studijskim grupama
Za upis na viu godinu
Nije od znaaja u IS
Redovito upisan, ponavlja,
parcijalno upisan
Noenjen, neudata,
oenjen, udata
Jasno je da neki atributi u IS Studentska sluba nisu znaajni, kao npr. teina pa ih
isputamo iz odreenog modela. Kod modela nekog drugog IS, npr. Zdravstvena
ustanova atribut teina je od znaaja, jer je poznato da moe biti povezana s nekim
bolestima, pa atribut mora biti uvrten u model.
3.3.10
Jedinstveni identifikator
Kako je ve reeno, svaki entitet ( npr. svaki student ) mora biti identificiran na
jedinstven nain, jednim atributom ili skupom atributa. Jedinstveni identifikator u fazi
implementacije postaje primarni klju.
42
43
definiramo kolonu cjelobrojnog tipa od 4 byta, ije vrijednosti baza automatski
generira, ime je osigurana jedinstvenost. Spajanje tablica onda ostvarujemo ovim
apstraktnim identifikatorom, jer raunalo vrlo brzo usporeuje 4-bytne brojeve.
Primarni klju nazivamo apstraktnim, jer on ne identificira objekt u realno svijetu,
samo interno u naem IS. Kako bi sprijeili pojavu dva retka s istom vrijednou
atributa, koji su zapravo trebali biti primarni klju, jer oni identificiraju objekt u
realnom svijetu, definiramo jedinstveni indeks nad skupom tih atributa. Na taj nain
imamo osiguranu jedinstvenost i dobili smo na brzini spajanja tablica, te utedjeli
prostor za pohranu.
44
o Opis
Kasete
# Identifikator kasete
* Naslov
* Stanje
Akteri
# Identifikator aktera
o Ime
* Prezime
PosudbaKaseta
# Identifikator lana
# Identifikator kasete
# Datum izdavanja
o Planirani datum vraanja
o Stvarni datum vraanja
Analizom entiteta, zakljuujemo na relacije:
Clanovi
#
*
*
$
ClanID
Ime
Prezime
PostaID
*
*
o
o
o
$
Ulica
Kbr
KbrDodatak
Kat
DatumRodjenja
Spol
Int4 Autoident
varchar(30)
varchar(30)
Int4 - Strani klju ref:
Poste
varchar(50)
Int2
varchar(10)
Int2
smalldatetime
Int1 Strani klju ref:
Spolovi
Total:
Max
duina
4
30
30
4
Prosjena
duina
4
7
8
4
50
2
10
2
4
1
12
2
1
2
4
1
137
45
Max
duina
4
30
35
Prosjena
duina
4
9
13
Poste
#
*
Total:
PostaID
Posta
Int4
varchar(30)
45
Spolovi
#
*
Total:
SpolID
Spol
Int1
varchar(30)
Max
duina
1
30
31
Prosjena
duina
1
6
7
Max
duina
4
80
2
1
1024
1111
Prosjena
duina
4
16
2
1
250
273
Max
duina
1
30
31
Prosjena
duina
1
6
7
Max
duina
4
4
1
9
Prosjena
duina
4
4
1
9
Max
duina
1
30
31
Prosjena
duina
1
10
11
Max
duina
4
Prosjena
duina
4
Naslovi
#
*
o
$
o
Total:
NaslovID
Naslov
TrajanjeMin
ZanrID
Opis
Int4 Autoident
varchar(80)
Int2
Int1
varchar(1024)
Zanrovi
#
*
Total:
ZanrID
Zanr
Int1
varchar(30)
Kasete
#
$
$
Total:
KasetaID
NaslovID
StanjeKaseteID
Int4 - Autoident
Int4 ref: Naslovi
Int1
StanjeKaseta
#
*
Total:
StanjeKaseteID
StanjeKasete
Int1
varchar(30)
Akteri
#
AkterID
Int4 Autoident
46
o
*
o
Total:
Ime
Prezime
Opis
varchar(30)
varchar(30)
varchar(255)
30
30
255
219
10
10
60
84
Max
duina
4
4
1
9
Prosjena
duina
4
4
1
9
Max
duina
1
30
31
Prosjena
duina
1
12
13
AkteriUloge
#$
#$
#$
Total:
AkterID
NaslovID
UlogaID
Uloge
#
*
Total:
UlogaID
Uloga
Int1
varchar(30)
PosudbeKaseta
#$
#$
#
o
o
Total:
KasetaID
ClanID
DatumIzdavanja
PlaniraniDatumVracanja
DatumVracanja
Max
duina
4
4
4
4
4
20
Prosjena
duina
4
4
4
4
4
20
Pojanjenje:
-
47
-
48
-
Upis
Promjena
Brisanje
Traenje
49
4 Indeksi
Pojasnimo najprije pojam indeksa, primjerom. elimo pronai znaenje engleske
rijei event. U englesko hrvatskom rjeniku, u zaglavlju svake stranice su
napisane poetna i zavrna rije koje se nalaze na toj stranici. Brzo listamo stranice,
gledajui samo zaglavne rijei i pronalazimo onu na kojoj u zaglavlju stoji: even ...
excess. Kako se rije event u abecednom poretku nalazi izmeu ove dvije rijei,
zadravamo se na toj stranici i pronalazimo traenu rije (sa znaenjem dogaaj).
Dakle, rije smo pronali brzo, zato to su sve rijei u rijeniku poredane po
abecednom redu engleskih rijei. Kaemo da je rjenik indeksiran po engleskim
rijeima. Kada bi ovaj isti englesko-hrvatski rjenik upotrijebili za nalaenje
engleskog prijevoda hrvatske rijei nebo, morali bismo prelistati cijeli rjenik, jer
nije poredan po hrvatskim rijeima. Naravno, hrvatsko-engleski rjenik, koji sadri
iste rijei kao i prethodni, bi pomogao, jer je indeksiran po hrvatskim rijeima.
Ovakvu vrstu indeksa, kod kojeg su podaci fiziki poredani po indeksiranoj koloni (ili
kolonama), sustav MS SQL Server naziva klasterirani indeks. Jasno je da se podaci
fiziki mogu poredati samo na jedan nain, pa je isto tako mogu samo jedan
klasterirani indeks u tablici. Ova vrsta indeks pomae kod pretraivanja podruja
(ranga) vrijednosti.
Potraimo sada u knjizi R. Vujnovi SQL i relacijski model podataka, pojanjenje
pojma indeksiranje. Na kraju knjige pronalazimo indeksno kazalo, te pod slovom
I, indeksiranje, 151. Dakle, na stranici 151 zapoinje pojanjenje pojma, te brzo
pronalazimo stranicu s traenim podatkom. Ovakav indeks podravaju i sustavi
relacijskih baza, a MS SQL Server ga naziva neklasterirani indeks. Moe se definirati
vei broj indeksa ovog tipa i svaki od njih moe ukljuiti jednu ili vie kolona.
Pogledajmo primjer organizacije podataka ( MS SQL Server 2000, no slino 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 nain. Stoga su i podaci zapisani u jednoj tablici,
zapravo razbacani po stranicama, koje mogu biti na bilo kojem cilindru diska.
Primjer organizacije tablice Studenti(Ime, Prezime, Spol) slijedi. Poredani su po
stranicama stohastiki, kako su dodavani u tablicu, jer nije definiran indeks.
elimo pronai sve studente s prezimenom izmeu Horvat i Koti, ukljuivo i njih
same, zato jer svi one obavljaju vjebe kao lanovi grupe B. SQL upit e biti:
SELECT * FROM Studenti
WHERE Prezime BETWEEN 'Horvat' AND 'Koti'
Kako tablica nije indeksirana, RDBMS e krenuti od prvog zapisa na prvoj stranici,
usporeivati da li prezime nalazi u zadanom intervalu, te ga prikazati, nastavljajui
zapis po zapis sve do zadnjeg zapisa na zadnjoj stranici. Ovakvo pretraivanje
50
zovemo potpuno pretraivanje tablice (full table scaning). Kod tablica s velikim
brojem zapisa, uzima znaajno vrijeme i odziv je spor.
Stranica
1
Zapis
1
2
3
4
Ime
Ivo
Ante
Jure
Anica
Prezime
Ivi
Peri
Padovan
Zubi
Spol
M
M
M
Z
1
2
3
Damir
Kristian
Marina
Kelava
Brunner
Bajramovi
M
M
Z
1
2
3
4
Ivica
Slavko
Slavica
Miranda
Tomi
Dekovi
Perovi
Poljak
M
M
Z
Z
1
2
3
4
5
Ivan Goran
Ivana
Nikolina
Mate
Pako
Peni
Mari
Metovi
Anti
Ivankovi
M
Z
Z
M
M
1
2
3
Domagoj
Hrvoje
Danijela
Horvat
Orlandini
Klisovi
M
M
Z
1
2
3
4
Ana
Ivana
Domina
Kata
Beli
Zubovi
Aljinovi
Rei
Z
Z
Z
Z
1
2
3
Doris
Mario
Franka
Koti
Lojpur
Dodi
Z
M
Z
51
Korijen (root)
Na str
15
14 Aljinovi
Lojpur
16
Str
Str
Lojpur
16
Padovan
Poljak
Zubi
Na str
5
6
7
8
1
2
3
Ana
Kristian
Slavko
Beli
Brunner
Dekovi
Z
M
M
1
2
3
4
Franka
Domagoj
Pako
Ivo
Dodi
Horvat
Ivankovi
Ivi
Z
M
M
M
1
2
3
Damir
Danijela
Doris
Kelava
Klisovi
Koti
M
Z
Z
1
2
3
4
Mario
Ivana
Nikolina
Hrvoje
Lojpur
Mari
Metovi
Orlandini
M
Z
Z
M
1
2
3
4
Jure
Padovan
Ivan Goran Peni
Ante
Peri
Slavica
Perovi
M
M
M
Z
1
2
3
Miranda
Kata
Ivica
Poljak
Rei
Tomi
Z
Z
M
1
2
Anica
Ivana
Zubi
Zubovi
Z
Z
52
Indeks: Ime
Srednja razina(interm)
Str Ime
Na str
Ana
23
21
Doris
24
Na str
2
8
6
4
4
3
1
Zap
1
1
3
1
2
2
1
Ivana
Na str
4
3
5
6
5
8
Zap
3
1
4
2
2
2
Ivica
Ivo
Jure
Kata
Kristian
Marina
Mario
Na str
7
3
6
7
2
1
5
Zap
3
4
1
2
2
3
1
Mate
Miranda
Nikolina
Pako
Slavica
Slavko
1
7
5
3
6
2
2
1
3
3
4
3
Danijela
Domagoj
Domina
Str
24
Korijen(root)
Str Ime
Na str
21
20 Ana
Ivica
22
Doris
Franka
Hrvoje
Ivan Goran
Ivana
Str
25
Str
Ivica
22
Mate
Na str
25
26
Str
26
53
Potraimo sada sve zapise koji imaju vrijednost kolone Spol = Z. Sada nam ne
pomae ni jdan ni drugi indeks, pa e se pretraivati cijela tablica.
Da li bi nam pomogao neklasterirani indeks po koloni Spol ? Nebi, jer je 50% zapisa s
vrijednou Z, pa bi pretraivanje stabla indeksa vie trajalo, nego potpuno
pretraivanje tablice. Ova vrsta indeksa je korisna, ako su podaci dobro distribuirani,
dakle ako se ista vrijednost pojavljuje u 5 10 % sluajeva ( dakako, toan postotak
ovisi o baznom sustavu i konkretnoj tablici).
54
5.1 Uvod
SQL jezik inovirala je tvrtka IBM, polazei 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) izvoenja,
nego se definira to elimo kao rezultat i nain kako e rezulatat biti prikazan.
Naredbe jezika dijele se u dvije skupine:
DML
DDL
Data
Manipulation
Language
Data
Definition
Language
PostaID
1
21000
1
22000
1
21000
1
20000
2
55
Helena
Hrvoje
Ante
Topic
Antic
Zelic
05.08.1979
21.03.1981
08.09.1981
1
1
20000
23000
53000
Dakle, prikazane su sve kolone i svi retci tablice, pri emu je poredak redaka sluajan,
najee onim redom kako su retci upisivani u tablicu.
esto nam nisu potrebne sve kolone, pogotovu kod tablica s veim brojem kolona.
Kolone koje elimo prikazati pobrojimo poslije kljune rijei SELECT, pa komanda
kojom emo prikazati samo Ime i Prezime studenta izgleda:
SELECT Ime, Prezime FROM Studenti;
Rezultat izvoenja komande je:
Ime
Ivo
Ana
Tomislav
Ana Marija
Marko
Helena
Hrvoje
Ante
Prezime
Ivic
Matic
Butorovic
Tomic
Markovic
Topic
Antic
Zelic
esto elimo prikaz samo nekih redaka tablice i to onih koji zadovoljavaju odreeni
uvjet. Prikaimo 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
Prezime
Ivic
Matic
Butorovic
56
Prezime
Butorovic
Ivic
Matic
Dakle, SQL upitna komanda nad jednom tablicom ima opi 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,
moemo upotrijebiti simbol zvjezdice ( * ) koji ukljuuje sve kolone. Uvjet u
WHERE klauzuli mora za svaki redak rezultirati s jednom od dvije mogue
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 isputa ( 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 izvoenja
Kako nema definiranih indeksa ( ili kada je tablica s malim brojem redaka) izvodi
potpuno skeniranje tablice, dakle kree od prvog do posljednjeg retka
Stvori privremenu radnu tablicu, s kolonama
- Ime varchar(50)
- Prezime varchar(50)
uzimajui definiciju kolona iz temeljne tablice Studenti
Proita prvi redak tablice Studenti i ako je vrijednost kolone StudijID=1, upie
vrijednosti Ime i Prezime u radnu tablicu. U sluaju da StudijID nije 1, ide na
slijedei redak.
Poreda retke u radnoj tablici po abecednom redu prezimena
Ispie rezultat u prozoru konzole
57
Ime
Hrvoje
Hrvoje
Hrvoje
Hrvoje
Hrvoje
Tomislav
Tomislav
Tomislav
Studij
1 Matematika - Informatika
2 Tehnicka kultura - Informatika
3 Matematika
4 Matematika - Fizika
5 Biologija - Kemija
1 Matematika - Informatika
2 Tehnicka kultura - Informatika
3 Matematika
Zelic
Zelic
Zelic
3 Matematika
4 Matematika - Fizika
5 Biologija - Kemija
--38
39
40
Ante
Ante
Ante
3
3
3
Rezultat ovog upita je relacija, prikazana kao Kartezijev produkt tablica Studenti i
Studiji. Dakle, svaki redak tablice Studenti je udruen sa svakim retkom tablice
Studiji. Kako Studenti sadri 8 redaka, a Studiji 5, to rezultantana tablica sadri 40
redaka. Uoavamo da neki retci ne sadre 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 ograniavamo na retke koji sadre istinite podatke, dakle:
StudijID
2
1
1
2
1
3
2
3
StudijID
2
1
1
2
1
3
2
3
Studij
Tehnicka kultura - Informatika
Matematika - Informatika
Matematika - Informatika
Tehnicka kultura - Informatika
Matematika - Informatika
Matematika
Tehnicka kultura - Informatika
Matematika
Rezultat upita je virtualna tablica, pod ime se misli da ne postoji njen fiziki zapis
na mediju, npr. disku, nego se dinamiki izgrauje pri izvoenju upita.
Uobiajeni naziv za ovakav oblik spajanja tablica je spajanje jednakosti ( eng.
equi join).
58
Tomic
Markovic
Engleski termin ovog oblik spajanja je LEFT OUTER JOIN, to moemo prevesti kao
spajanje slijeva, a prikazuje sve retke u tablici s lijeve strane kljune rijei
( Studenti ) . Svaki redak tablice Studenti e pokuati spojiti s tablicom Poste preko
identinih vrijednosti kolona PostaID i prikazati naziv pote, kad god je spajanje
uspjeno, odnosno NULL vrijednost kad spajanje nije mogue.
Vrijednost NULL tumaimo kao nedefinirana ili nepoznata vrijednost.
59
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 izvoenja
Kako nema definiranih indeksa ( ili kada je tablica s malim brojem redaka) izvodi
potpuno skeniranje tablice, dakle kree 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)
uzimajui definiciju kolona iz temeljnih tablica Studenti i Poste
Proita prvi redak tablice Studenti i upie vrijednosti u radnu tablicu:
Ivo
Ivic
21000
Studij
Matematika - Informatika
Matematika - Informatika
Matematika - Informatika
Tehnicka kultura - Informatika
Tehnicka kultura - Informatika
Tehnicka kultura - Informatika
Matematika
Matematika
Matematika - Fizika
Biologija - Kemija
Ime
Prezime
Ivo
Ivic
Ana
Matic
Tomislav Butorovic
Marko
Markovic
Helena
Topic
Hrvoje
Antic
Ana Marija Tomic
Ante
Zelic
NULL
NULL
NULL
NULL
Ovim upitom prikazuju se sve mogue studijske grupe, te studenti onih studijskih
grupa koje imaju upisane studente. Studiske grupe bez studenata, isto tako su
navedene, ali naravno bez pridruenih studenata.
60
Prezime
Antic
Butorovic
Ivic
Matic
Topic
Zelic
PostaID Posta
23000 Zadar
21000 Split
21000 Split
22000 Sibenik
20000 Dubrovnik
53000 Gospic
61
Ime Prezime
Duina Ime i Prezime
Butorovic Tomislav
Tomic Ana Marija
Markovic Marko
Topic Helena
Antic Hrvoje
Zelic Ante
Matic Ana
Ivic Ivo
17
15
13
11
11
9
8
7
Opis
Izdvaja n pozicija s lijeva iz tekstualnog izraza
( obino tekstualna kolona tablice)
Izdvaja n pozicija s desna iz tekstualnog izraza
( obino tekstualna kolona tablice)
Izdvaja D znakova iz tekstualnog izraza, poev od
pozicije S izraza
Daje duinu ( broj slova ) tekstualnog izraza
Primjeri:
a) Prikazati poetno 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
Prezime
62
prezimena
ic
ic
ic
ic
ic
ic
ic
ic
Ivic
Matic
Butorovic
Tomic
Markovic
Topic
Antic
Zelic
Ime
Ivo
Ana
Tomislav
Ana Marija
Marko
Helena
Hrvoje
Ante
Prezime
Ivic
e) Prikazati sve studente ije ime sadri slovo i na bilo kojoj poziciji.
SELECT *
FROM Studenti
WHERE Ime LIKE '%i%'
Ime
Ivo
Tomislav
Ana Marija
Prezime
Ivic
Butorovic
Tomic
f) Prikazati sve studente kojima naziv pote sadri slovi i na bilo kojoj poziciji.
SELECT Ime, Prezime, Studenti.PostaID, Posta
FROM Studenti
63
LEFT OUTER JOIN Poste ON Studenti.PostaID=Poste.PostaID
WHERE Posta LIKE '%i%'
Ime
Ivo
Ana
Tomislav
Helena
Ante
Prezime
Ivic
Matic
Butorovic
Topic
Zelic
PostaID
Posta
21000 Split
22000 Sibenik
21000 Split
20000 Dubrovnik
53000 Gospic
g) Prikazati sve studente kojima naziv pote sadri 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%'
Ime
Hrvoje
Prezime
Antic
PostaID
Posta
23000 Zadar
h) Prikazati ime, prezime i duinu imena svim studentima, ije je ime due od 5 slova.
Poredati po duini imena.
SELECT Ime, Prezime, LEN(Ime)
FROM Studenti
WHERE LEN(Ime) > 5
ORDER BY LEN(Ime)
Ime
Helena
Hrvoje
Tomislav
Ana Marija
Prezime
Topic
Antic
Butorovic
Tomic
Duzina
Imena
6
6
8
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
AnA MArijA Tomic
MArko MArkovic
HelenA Topic
Hrvoje Antic
Ante Zelic
64
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 sadri iskljuivo nedefinirane vrijednosti ( to je u suprotnosti
s pravilima relacijskih baza ), broj redaka bit e 9.
b) Ispiimo 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
c) Ispiimo broj studenata na svakoj studijskoj grupi. Grupe na kojima nema upisanih
studenata nije potrebno prikazati, te poredati prema broju studenata na grupi, poev
od najbrojnije grupe:
SELECT StudijID, count(*)
FROM Studenti
GROUP BY StudijID
ORDER BY count(*) DESC
StudijID
count(*)
1
2
3
3
3
2
65
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 upie vrijednost StudijID ( 1 ) u radnu
tablicu, te brojakoj koloni Count dodijeli vrijednost 1.
Prelazi na slijedei redak i ponovno pronalazi StudijID=1. Kako oznaka studija
postoji u radnoj tablici, uvea broja pojava Count za 1, te on sada iznosi 2.
Prelazi na slijedei redak i pronalazi StudijID=2, te stvori novi redak s brojaem
na inicijalnoj vrijednosti 1.
Ove korake ponavlja sve do posljednjeg redka tablice, te svaki put kada naie na
veijednost StudijID, koja ne postoji u tablici, stvori redak. Ako oznaka studija
postoji u radnoj tablici, uveava joj broja za 1.
Sortira retke radne tablice od najvee do najmanje vrijednosti brojake 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
Tehnicka kultura - Informatika
Matematika
3
3
2
3
3
66
SELECT Studij, count(Ime)
FROM Studiji ST
LEFT OUTER JOIN Studenti S ON S.StudijID=ST.StudijID
GROUP BY Studij
ORDER BY Studij DESC
Studij
BrojStudenata
Biologija - Kemija
0
Matematika
2
Matematika - Fizika
0
Matematika - Informatika
3
Tehnicka kultura - Informatika 3
Uoimo, da count(Ime) osigurava da BrojStudenata bude 0, kada na Studiju nema
upisanih studenata, dok bi count(*) dao ispravan broj u sluaju 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 ).
g) Ispis studenata i njihovih prosjenih 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
Hrvoje
Tomislav
Ivo
Marko
Ana
Ana Marija
Helena
Ante
h) Isto tako, moemo ispisati sve studente, ija je prosjena ocjena vea ili jednaka
3.5:
SELECT Ime, Prezime, AVG(Ocjena*1.0) As ProsjenaOcjena
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
Tomislav
Ivo
Helena
Prezime
Butorovic
Ivic
Topic
ProsjenaOcjena
4.0000
4.0000
4.0000
67
Ante
Zelic
3.7500
i) Konano, ispiimo sve studente s adresom 21000 ( Split ) koji imaju prosjenu
ocjenu 3.5 ili veu, te ukupan zbroj ocjena i prosjenu ocjenu svakog studenta, a
rezltate poredajmo po abecednom redu prezimena:
SELECT Ime, Prezime, PostaID, SUM(Ocjena) As ZbrojOcjena,
AVG(Ocjena*1.0) As ProsjenaOcjena
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
Tomislav
Ivo
Prezime
Butorovic
Ivic
PostaID
21000
21000
16
16
4.0000
4.0000
Prezime
Matic
Tomic
Antic
Zelic
Uvjet e biti zadovoljen ako Ime ili prezime zapoinje slovom A, pa su ova dva uvjeta
povezana logikim operatorom OR.
b) Ispiimo sve studente kojima Ime zapoinje slovom A a prezime slovom Z:
SELECT Ime, Prezime
68
FROM Studenti
WHERE Ime LIKE 'a%' AND Prezime LIKE 'z%'
Ime
Ante
Prezime
Zelic
Uvjet je zadovoljen samo u sluaju kada ime zapoinje slovom A, a prezime slovom Z,
pa su ova dva uvjeta vezana logikim operatorom AND.
c) Prikaimo studente, ije ime NE zapoinje slovomA i prezime zapoinje
slovom A:
SELECT Ime, Prezime
FROM Studenti
WHERE Ime NOT LIKE 'A%' AND Prezime LIKE 'A%'
Ime
Hrvoje
Prezime
Antic
Bilo koji od logikih izraza moe biti negiran, odnosno, rezultirat e istinom kada nenegirani uvjet daje la.
d) Potrebno je izlistati sve studente, kojima ima ili prezime zapoinje slovom A,
a da im je PostaID=22000:
SELECT Ime, Prezime, PostaID
FROM Studenti
WHERE Ime LIKE 'A%' OR Prezime LIKE 'A%' AND PostaID=22000
Ime
Ana
Ana Marija
Ante
Prezime
Matic
Tomic
Zelic
PostaID
22000
NULL
53000
Gornji upit nije dao oekivani rezultat, jer vidimo da samo jedan od tri studenta
prebiva na PostaID=22000. Problem je uzrokovan logikim povezivanjem
elementarnih uvjeta. Naime, kao to kod raunskih operacija mnoenje ima vei
prioritet od zbrajanja, tako logiki operator AND ima vei prioritet od OR operatora.
Zato gornji uvjet zadovoljava svaki redak, im ime zapoinje slovo A.
Redoslijed razvijanja pojedinih elementarnih uvjeta moemo odrediti upotrebo
zagrada, pa je ispraljeni upit :
SELECT Ime, Prezime, PostaID
FROM Studenti
WHERE ( Ime LIKE 'A%' OR Prezime LIKE 'A%' ) AND PostaID=22000
Ime
Ana
Prezime
Matic
PostaID
22000
69
Prezime
Ivic
Matic
Butorovic
Tomic
Zelic
StudijID
PostaID
1
21000
1
22000
1
21000
3 NULL
3
53000
5.2.10
Ugnijeeni upiti
a) Prikaimo sve studente koji studiraju na istoj studijskog grupi kao student ije je
prezime Ivi.
Ovaj zadatak bismo mogli odraditi pomou dva uipta:
Upit 1:
SELECT StudijID
FROM Studenti
WHERE Prezime='Ivic'
Zatim oitamo vrijednost StudijID i izvedemo
Upit 2:
SELECT Ime, Prezime, StudijID
FROM Studenti
WHERE StudijID=1
Oba upita mogue je definirati kao jedinstveni, ugnijeeni upit:
70
Prezime StudijID
Ivic
1
Matic
1
Butorovic
1
Uoimo, upotrebu kljune rijei NOT, kojom se oznaava da uvjet zadovoljavaju svi
studenti, ija je vrijednost StudijID razliita od 1, tj. nemaju StudijID isti kao student
Ivi.
esto se ugnjeuju upiti grupiranja, kao u primjeru:
c) Ispiimo sve studente, koji studiraju na studijskim grupama, na kojima je upisano
vie od 2 studenta.
SELECT Ime, Prezime, StudijID
FROM Studenti
WHERE StudijID IN (SELECT StudijID
FROM Studenti
GROUP BY StudijID
HAVING count(*) > 2)
Ime
Ivo
Prezime StudijID
Ivic
1
71
Ana
Tomislav
Marko
Helena
Hrvoje
Matic
Butorovic
Markovic
Topic
Antic
1
1
2
2
2
U sluaju 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 vie studenata ije ime zapoinje s A zadovoljava:
SELECT DISTINCT LEFT(Ime, 1)
FROM Studenti
ORDER BY 1
Inicijal
A
H
I
M
T
72
Sortira retke u radnoj tablici po svim kolonama
Pretrai radnu tablicu ispisujui svaki put samo prvu pojavu retka, preskaui
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 naem
primjeru tablice Studenti, ime, prezime i studijska grupa moraju biti unijete, a
PostaID, te datum roenja mogu ostati nedefinirane. Nedefinirana vrijednost naziva se
Null vrijednost.
a) Ispiimo 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
Uoimo da se Null vrijednost testira kljunom rjeju IS Null i da test = Null, gdje je
znak jednakosti zamijenio kljunu rije IS, ne mora dati oekivani rezultat. Naime, o
postavkama baze podataka ovisi rezultat test = Null, no to prelazi okvire ovih skripta.
b) Prikaimo sve studente koji imaju definiranu vrijednost PostaID, dakle
PostaID IS NOT Null :
SELECT Ime, Prezime, StudijID, PostaID
FROM Studenti
WHERE PostaID IS NOT Null
Ime
Ivo
Ana
Tomislav
Helena
Hrvoje
Ante
73
Opis
Slobodno unijeti tekst, maksimalne duine 30 znakova,
obavezan unos
Slobodno unijeti tekst, maksimalne duine 30 znakova,
obavezan unos
Datum, unos nije obavezan
Cio broj, s vrijednostima od 1 do 255, obavezan unos. Opis
74
brojane oznake pogledati u tablici Studiji
Cio broj, s vrijednostima od 10000 ( Zagreb) do 99999, unos
nije obavezan. Opis brojanih vrijednosti pogledati u tablici
Poste
PostaID
Kod kreiranja tablice je veoma vano odabrati odgovarajui tip podatka svake kolone.
Na taj nain onemoguavamo unos nesuvislih ili nemoguih podataka, barem u onoj
mjeri koliko je to mogue. Pojasnimo primjerom: ako bi kolona DatumRodjenja bila
tekstualnog tipa, onda bi bo mogu unos datuma 30.02.2002, no znamo da veljaa ne
moe imati 30 dana. Zato je vano da kolona DatumRodjenja bude datumskog tipa,
pri emu baza nee dopustiti unos nemogueg datuma. Dakle, pravilnim izborom tipa
podatka kolone spreavamo nemogue unose, no neispravni unosi jo su uvijek
moguu: npr. osobi roenoj 2. sijenja 1980, jo je uvijk mogue nepanjom unijeti
datum roenja 1. veljae 1980.
Dakle, tablica Studenti imat e kolone:
Kolona
Ime
Tip podatka
varchar(30)
Null vrijednost
NOT Null
Prezime
varchar(30)
NOT Null
DatumRodjenja
datetime
Null
StudijID
tinyint
NOT Null
PostaID
int
Null
75
Tablicu Studenti, stvorenu gornjom komandom mogli smo kreirati i preko grafikog
korisnikog suelja.
76
Pri izmjenama tipa podataka iz tipa veeg opseg vrijednosti u manji opseg, moramo
osigurati da ve upisane vrijednosti ne prelaze novi, manji opseg.
Mijenjamo li maksimalno doputeni broj znakova u kolonama varijabilne irine, moe
doi do gubitka dijela unosa koji ne stane u novu, manju dimenziju. Neke RDBMS e
prijaviti greku:
Server: Msg 8152, Level 16, State 9, Line 1
String or binary data would be truncated.
The statement has been terminated.
Studij
PostaID Posta
Matematika - Informatika
21000 Split
Matematika - Informatika
22000 Sibenik
Matematika - Informatika
21000 Split
Matematika
NULL
NULL
Tehnicka kultura - Informatika NULL
NULL
Tehnicka kultura - Informatika
20000 Dubrovnik
Tehnicka kultura - Informatika
23000 Zadar
Matematika
53000 Gospic
RDBMS pogled tretira kao virtualnu tablicu, dakle ne ita je s medija ( diska ) nego
dinamiki izgrauje za vrijeme izvoenja upita, ba kao da smo zadali upit:
SELECT Ime, Prezime, Studij, S.PostaID, Posta
77
FROM Studenti S
INNER JOIN Studiji ST ON S.StudijID=ST.StudijID
LEFT OUTER JOIN Poste P ON S.PostaID=P.PostaID
To znai da moemo primijeniti restrikciju i sortiranje:
SELECT *
FROM VStudenti
WHERE Studij LIKE '%Informatika%'
ORDER BY Studij, Prezime
Ime
Tomislav
Ivo
Ana
Hrvoje
Marko
Helena
Prezime
Butorovic
Ivic
Matic
Antic
Markovic
Topic
Studij
PostaID Posta
Matematika - Informatika
21000 Split
Matematika - Informatika
21000 Split
Matematika - Informatika
22000 Sibenik
Tehnicka kultura - Informatika
23000 Zadar
Tehnicka kultura - Informatika NULL
NULL
Tehnicka kultura - Informatika
20000 Dubrovnik
78
Pretpostavimo da elimo pronai u telefonskom imeniku splitskog podruja sve osobe
ije je prezime Ivi. Zadatak emo brzo obaviti, jer je imenik poredan po abecednom
redu prezimena pretplatnika. No, ako bi zadatak bio pronai sve osobe koje ive u
Teslinoj ulici, potroili bi mnogo vie 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 lei 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 utede papira mogli napraviti na ovaj nain: dodati stranice s abecednim
popisom ulica, te kod svake ulice nabrojati sve stranice i retke u kojima emo pronai
pretplatnike s adresom u Teslinoj ulici. To bi vjerojatno znailo, da bi brzo pronali
Teslinu ulicu i onda bismo za svakog pretplatnika morali pronai stranicu, te ponovno
za slijedeeg pretplatnika skoknuti na stranicu indeksa ulica, proitati na kojoj se
stranici nalazi slijedei pretplatnik i tako redom.
Dakle, indeksiranjem se znaajno ubrzava pretraivanje.
Shvatimo naredbu za kreiranje indeksa kao sortiranje podataka u odreenom poretku (
sluaj abecednog poretka po prezimenima ), odnosno, kao dodavanje stranica s
abecednim poretkom ulica i pokazivaima 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 pronali traeno 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 tisua i miliona
redaka, moe potrajati nekoliko minuta.
79
- stvaranje
CREATE TipObjekta NazivObjekta (
Definicija objekta
)
unitavanje
DROP TipObjekta NazivObjekta
80
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.)
81
WHERE klauzuli. este su greke koje se dese zbog brzopletosti, npr. izvoenjem
komande:
UPDATE Studenti
SET DatumRodjenja='1980/06/21'
Uinak je katastrofalan: svim studentima postavljen je isti datum roenja. Naravno i
za ovakve pogreke moramo predvidjeti lijek, no u svakom sluaju dobro je izbjei
ovako neugodne situacije, paljivim zadavanjem naredbe UPDATE.
S.PostaID P.PostaID
3 NULL
23000
2 NULL
22000
1 NULL
21000
82
83
6 Literatura:
1. Mladen Varga: Baze podataka Konceptualno, logiko i fiziko modeliranje
podataka, Drutvo 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.