Professional Documents
Culture Documents
BAZE PODATAKA 4
LLO
OVVEE
DO
W
WHHAATT
W
WHHAATT
YYO
OUU
YYO
OUU
LLO
OVVEE DO
SSEELLM
MAA K
KRRAAJJIINNOOVVIIĆĆ,, DDIIPPLL.. IINNGG..EELL..
1|
SADRŽAJ
1.1. OSNOVNI POJMOVI O BAZAMA PODATAKA: BAZA PODATAKA, DBMS, MODEL PODATAKA 3
1.2 CILJEVI KOJI SE NASTOJE POSTIĆI KORIŠTENJEM BAZA PODATAKA 3
1.3 ARHITEKTURA BAZE PODATAKA 4
1.4 JEZICI ZA RAD S BAZAMA PODATAKA 5
1.5 POZNATI SOFTVERSKI PAKETI ZA RAD S BAZAMA PODATAKA 5
1.6 ŽIVOTNI CIKLUS BAZE PODATAKA 6
1.2. MODEL OBJEKTI-VEZE 7
1.3. RELACIONI MODEL 10
1.4. PRESLIKAVANJE MODELA OBJEKTI-VEZE U RELACIONI MODEL 12
2|
Modul 1: Model objekti-veze i relacioni model
1.1. Osnovni pojmovi o bazama podataka: Baza podataka, DBMS,
model podataka
Baza podataka je skup međusobno povezanih podataka, pohranjenih u vanjskoj memoriji računara. Podaci
su istovremeno dostupni raznim korisnicima i aplikacijskim programima. Unos, izmjena, brisanje i čitanje
podataka obavlja se posredstvom zajedničkog softvera. Korisnici i aplikacije pritom ne moraju poznavati
detalje fizičke organizacije podataka, već se upućuju na logičku organizaciju podataka.
Sistem za upravljanje bazom podataka (Data Base Management System - DBMS) je poslužitelj (server)
baze podataka. On oblikuje fizički prikaz baze u skladu s traženom logičkom strukturom. Također, on obavlja
u ime klijenata sve operacije s podacima. Dalje, on je u stanju podržati razne baze, od kojih svaka može imati
svoju logičku strukturu, no u skladu s istim modelom. Isto tako, brine se za sigurnost podataka, te
automatizira administrativne poslove s bazom.
Podaci u bazi su logički organizovani u skladu s nekim modelom podataka. Model podataka je skup
pravila koja određuju kako može izgledati logička struktura baze. Model čini osnovu za koncipiranje,
projektovanje i implementiranje baze.
Od 80-tih godina pa sve do današnjih dana preovladava relacioni model. Očekivani prelaz na objektni model
za sada se nije desio, tako da današnje baze podataka uglavnom još uvijek možemo poistovjetiti s relacionim
bazama.
3|
Mora postojati mogućnost da se korisnicima ograniče prava korištenja baze, dakle da se svakom
korisniku regulišu ovlaštenja tj. precizira šta smije a šta ne raditi s podacima.
Zadovoljavajuća brzina pristupa
Operacije s podacima moraju se odvijati dovoljno brzo, u skladu s potrebama određene aplikacije.
Na brzinu pristupa može se uticati odabirom pogodnih fizičkih struktura podataka, te izborom
pogodnih algoritama za pretraživanje.
Mogućnost podešavanja i kontrole
Velika baza zahtijeva stalnu brigu: praćenje performansi, mijenjanje parametara u fizičkoj građi,
rutinsko pohranjivanje rezervnih kopija podataka, regulisanje prava pristupa korisnika. Također,
svrha baze se vremenom mijenja, pa povremeno treba promijeniti i logičku strukturu. Ovakvi poslovi
moraju se obavljati centralizirano. Odgovorna osoba zove se administrator baze podataka (DBA
Database Administrator).
Fizički nivo
1. Fizički nivo odnosi se na fizički prikaz i raspored podataka na jedinicama vanjske memorije. To je
aspekt kojeg vide samo sistemski programeri (oni koji su razvili DBMS). Sama fizički nivo može se
dalje podijeliti na više podnivoa apstrakcije, od sasvim konkretnih staza i cilindara na disku, do već
donekle apstraktnih pojmova datoteke i zapisa kakve susrećemo u klasičnim programskim jezicima.
2. Raspored pohranjivanja opisuje kako se elementi logičke definicije baze preslikavaju na fizičke
uređaje.
3. Globalni logički nivo odnosi se na logičku strukturu cijele baze. To je aspekt kojeg vidi projektant
baze odnosno njen administrator. Zapis logičke definicije naziva se šema (engleski takoder schema).
Šema baze podataka je tekst ili dijagram koji definiše logičku strukturu baze, i u skladu je sa zadanim
modelom. Dakle imenuju se i definišu svi tipovi podataka i veze među tim tipovima, u skladu s
pravilima korištenog modela. Takoder, šema uvodi i ograničenja kojim se čuva integritet podataka.
4. Lokalni logički nivo odnosi se na logičku predodžbu o dijelu baze koji koristi pojedina aplikacija. To
je aspekt kojeg vidi korisnik ili aplikacijski programer. Zapis jedne lokalne logičke definicije zove se
pogled (engleski view) ili podšema. To je tekst ili dijagram kojim se imenuju i definišu svi lokalni
tipovi podataka i veze medu tim tipovima, opet u skladu s pravilima korištenog modela. Također,
pogled zadaje preslikavanje kojim se iz globalnih podataka i veza izvode lokalni.
Za kreiranje baze podataka potrebno je zadati samo šemu i poglede. DBMS tada automatski generiše
potrebni raspored pohranjivanja i fizičku bazu. Administrator može samo donekle utjecati na fizičku građu
baze, podešavanjem njemu dostupnih parametara.
Programi i korisnici ne pristupaju direktno fizičkoj bazi, već dobivaju ili pohranjuju podatke posredstvom
4|
DBMS-a. Komunikacija programa odnosno korisnika s DBMS-om obavlja se na lokalnom logičkom nivou.
Ovakva podjela na tri jezika danas je već prilično zastarjela. Naime, kod relacionih baza postoji tendencija da
se sva tri jezika objedine u jedan sveobuhvatni. Primjer takvog integrisanog jezika za relacione baze je SQL
(Structured Query Language): on služi za definisanje podataka, manipulisanje i pretraživanje. Integrisani
jezik se može koristiti interaktivno (preko on-line interpretera) ili se integriše u aplikacijske programe.
Naglasimo da gore spomenute vrste jezika nisu programski jezici. Dakle ti jezici su nam nužni da bi se
povezali s bazom, no oni nam nisu dovoljni za razvoj aplikacija koje će nešto raditi s podacima iz baze.
Tradicionalni način razvoja aplikacija koje rade s bazom je korištenje klasičnih programskih jezika (COBOL,
PL/I, C, Pascal . . . ) s ugniježdenim DML-naredbama. U 80-tim godinama 20. vijeka bili su dosta popularni i
tzv. jezici 4. generacije (4-th Generation Languages - 4GL): riječ je o jezicima koji su bili namijenjeni isključivo
za rad s bazama, te su zato u tom kontekstu bili produktivniji od klasičnih programskih jezika opšte namjene.
Problem s jezicima 4. generacije je bio u njihovoj nestandardnosti: svaki od njih je u pravilu bio dio nekog
odredenog softverskog paketa za baze podataka, te se nije mogao koristiti izvan tog paketa (baze).
U današnje vrijeme, aplikacije se najčešće razvijaju u standardnim objektno orijentiranim programskim
jezicima (Java, C++, . . . ). Za interakcije s bazom koriste se unaprijed pripremljene klase objekata. Ovakva
tehnika je dovoljno produktivna zbog korištenja gotovih klasa, a rezultujući program se lako dotjeruje,
integriše u veće sisteme ili prenosi s jedne baze na drugu.
5|
Software Inc.) drugi
Microsoft MS SQL Server MS Windows NT/2000/XP SQL,
C++, . . .
MySQL AB MySQL Linux, UNIX (razni), SQL,
MS Windows (razni), Mac OS C, PHP, . . .
Sybase Inc. Sybase MS Windows NT/2000, OS/2, SQL,
SQL Server Mac, UNIX (razni), UNIXWare COBOL, . . .
Hewlett Packard Co. Allbase/SQL UNIX (HP-UX) SQL,
4GL, C, . . .
Cincom Supra MS Windows NT/2000, Linux, SQL,
Systems Inc. UNIX (razni), VMS, MVS, VM COBOL, . . .
Microsoft Corporation MS Access MS Windows (razni) Access
Basic,
SQL
Gotovo svi današnji softverski paketi podržavaju relacioni model i SQL. Svaki od njih sadrži svoj DBMS,
uobičajene klijente (na primjer interaktivni interpreter SQL), te biblioteke i alate za razvoj aplikacija. Svaki
paket isporučuje se u verzijama za razne računarske platforme (operativne sisteme).
Konkurencija medu proizvodđačima softvera za baze podataka je izuzetno velika, tako da je posljednjih
godina često dolazilo do njihovog nestanka, spajanja ili preuzimanja. Lista relevantnih softverskih paketa zato
je svake godine sve kraća.
Analiza potreba
Proučavaju se tokovi informacija u preduzeću. Uočavaju se podaci koje treba pohranjivati i veze među njima.
U velikim preduzećima, gdje postoje razne grupe korisnika, pojavit će se razni “pogledi” na podatke. Te
poglede treba uskladiti tako da se eliminiše redundancija i nekonzistentnost.
Redudantnost podataka podrazumijeva da se u neki podaci memorisani dva (ili više) puta, ili da se mogu dobiti iz drugih podataka.
Konzistentnost podataka obuhvata validnost, tačnost, upotrebljivost i integritet povezanih podataka.
Analiza potreba također treba obuhvatiti analizu transakcija (operacija) koje će se obavljati nad bazom
podataka, budući da to može imati uticaja na sadržaj i konačni oblik baze. Važno je procijeniti frekvenciju i
opseg pojedinih transakcija, te zahtjeve u vezi sa performansama.
Performanse baze podataka obuhvataju skup osobina koje utječu na osobine baze, kao što je brzina izvršavanja operacija obrade
podataka, dostupnost podataka, racionalno korištenje resursa sistema (procesora, memorije) itd…
Rezultat analize je dokument (pisan neformalno u prirodnom jeziku) koji se zove specifikacija potreba.
Postoje formalne metode analize zahtijeva (analize potreba), ali se one koriste uglavnom na velikim
projektima, na kojima radi više ljudi organizovanih u projektne timove.
Modeliranje podataka
6|
Različiti pogledi na podatke, otkriveni u fazi analize, sintetiziraju se u jednu cjelinu - globalnu shemu. Precizno
se utvrđuju tipovi podataka. Shema se dalje dotjeruje (“normalizira”) tako da zadovolji neke zahtjeve
kvalitete. Također, shema se prilagođava ograničenjima koje postavlja zadani model podataka, te se dodatno
modificira da bi bolje mogla udovoljiti zahtjevima na performanse. Na kraju se iz sheme izvode pogledi (pod-
sheme) za pojedine aplikacije (grupe korisnika).
Implementacija
Na osnovu sheme i podshema, te uz pomoć dostupnog DBMS-a, fizički se realizuje baza podataka na
računaru. U DBMS-u obično postoje parametri kojima se može utjecati na fizičku organizaciju baze. Parametri
se podešavaju tako da se osigura efikasan rad najvažnijih transakcija. Razvija se skup programa koji realiziraju
pojedine transakcije te pokrivaju potrebe raznih aplikacija. Baza se inicijalno puni podacima
Testiranje
Korisnici testiraju bazu i provjeravaju da li ona zadovoljava svim zahtjevima. Nastoje se otkriti greške koje su
se mogle potkrasti u svakoj od faza razvoja: dakle u analizi potreba, modeliranju podataka, implementaciji.
Greške u ranijim fazama imaju teže posljedice. Na primjer, greška u analizi potreba uzrokuje da transakcije
možda korektno rade, no ne ono što korisnicima treba već nešto drugo. Dobro bi bilo kad bi takve propuste
otkrili prije implementacije. Zato se u novije vrijeme, prije prave implementacije, razvijaju prototipovi baze
podataka, te se oni pokazuju korisnicima. Jeftinu izradu prototipova omogućavaju jezici 4. generacije i
objektno-orijentisani jezici.
Održavanje
Odvija se u vrijeme kad je baza već ušla u redovnu upotrebu (produktivna baza). Sastoji se od sljedećeg:
popravak grešaka koje nisu bile otkrivene u fazi testiranja;
uvođenje promjena zbog novih zahtjeva korisnika;
podešavanje parametara u DBMS u svrhu poboljšavanja performansi.
Održavanje zahtijeva da se stalno prati rad s bazom, i to tako da to praćenje ne ometa korisnike.
Administratoru baze podataka trebaju stajati na raspolaganju odgovarajući alati (utility programi).
Bavimo se pitanjem: kako oblikovati shemu za bazu podataka, usklađenu s pravilima relacionog modela. U
stvarnim situacijama dosta je teško direktno dizajnirati relacionu shemu. Zato se služimo pomoćnom fazom
koja se zove modeliranje entiteta i veza (Entity-Relationship Modelling). Riječ je o oblikovanju jedne manje
precizne, konceptualne sheme, koja predstavlja apstrakciju realnog svijeta. Ta tzv. ER-shema se dalje, više-
manje automatski, pretvara u relacionu. Modeliranje entiteta i veza zahtijeva da se svijet promatra preko tri
kategorije:
Entiteti (entity): objekti ili događaji koji su nam od interesa;
Entiteti i atributi
Entitet je nešto o čemu želimo memorisati podatke, nešto što je u stanju postojati ili ne postojati, te se može
identifikovati. Entitet može biti objekt ili biće (na primjer kuća, student, auto), odnosno događaj ili pojava (na
7|
primjer nogometna utakmica, praznik, servisiranje auta).
Entitet je opisan atributima (na primjer atributi kuće su: adresa, broj katova, boja fasade, . . . ). Ukoliko neki
atribut i sam zahtijeva svoje atribute, tada ga radije treba smatrati novim entitetom (na primjer model auta).
Isto pravilo vrijedi i ako atribut može istovremeno imati više vrijedenosti (na primjer kvar koji je popravljen
pri servisiranju auta).
Ime entiteta, zajedno sa pripadajučim atributima, zapravo određuje tip entiteta. Može postojati mnogo
primjeraka (pojava) entiteta zadanog tipa (na primjer UCENIK je tip čiji primjerci su Petrović Petar, Marković
Marko, . . . ).
Kandidat za ključ je atribut, ili skup atributa, čije vrijednosti jednoznačno određuju primjerak entiteta
zadanog tipa. Dakle, ne mogu postojati dva različita primjerka entiteta istog tipa s istim vrijednostima
kandidata za ključ. (Na primjer za tip entiteta AUTO, kandidat za ključ je atribut REG BROJ ). Ukoliko jedan tip
entiteta ima više kandidata za ključ, tada biramo jednog od njih i proglašavamo ga primarnim ključem. (Na
primjer primarni ključ za tip entiteta STUDENT mogao bi biti atribut BROJ INDEKSA.
Veze
Veze se uspostavljaju između dva ili više tipova entiteta (na primjer veza IGRA ZA između tipova entiteta
IGRAC i TIM ). Zapravo je riječ o imenovanoj binarnoj ili k-narnoj relaciji između primjeraka entiteta zadanih
tipova. Za sada ćemo se ograničiti na veze izmedu tačno dva tipa entiteta.
Više-naprema-više (M : N, many-to-many ). Jedan primjerak prvog tipa entiteta može biti u vezi s 0,
1 ili više primjeraka drugog tipa entiteta, te također jedan primjerak drugog tipa može biti u vezi s 0,
1 ili više primjeraka prvog tipa. Na primjer veza predmet_odjeljenje izmedu tipova entiteta
PREDMET i ODJELJENJE .
Veza može imati i svoje atribute koje ne možemo pripisati ni jednom od tipova entiteta (na primjer
veza ucenik_odjeljenje može imati atribut DATUM UPISA).
Ako svaki primjerak entiteta nekog tipa mora učestvovati u zadanoj vezi, tada kažemo da tip entiteta ima
obavezno članstvo u toj vezi. Kažemo da je veza jaka. Inače tip entiteta ima neobavezno članstvo (slaba
veza). (Na primjer izmedu tipova entiteta UCENIK i ODJELJENJE zadana je veza, koja ima funkcionalnost (N :
1. To je jaka veza, jer učenik mora biti u nekom odjeljenju).
Uobičajeno je da se ER-shema nacrta kao dijagram u kojem pravougaonici predstavljaju tipove entiteta, a
rombovi veze. Veze su povezane linijama s odgovarajućim tipovima entiteta. Imena tipova entiteta i veza, te
funkcionalnost veza, uneseni su u dijagram. Posebno se prilaže lista atributa za svaki entitet odnosno vezu. U
toj listi možemo specificirati obaveznost članstva u vezama.
Primjer ER dijagrama
8|
UCENIK
Ucenik_odjeljenje
_odjeljenje
1
razrednik
ODJELJENJE
1
n 1
Odjeljenje_ NASTAVNIK
predmet
PREDMET
Složenije veze
U stvarnim situacijama pojavljuju se i složenije veze od onih koje smo do sada promatrali. Navest ćemo neke
od njih.
Pod-tipovi. Tip entiteta E1 je podtip tipa entiteta E2 ako je svaki primjerak od E1 takoder i primjerak od E2. E1
nasljeduje sve atribute od E2, no E1 može imati i dodatne atribute.
Na slici je prikazan primjer podtipova. CarType je nadređeni objekat, a PassangerCarType i TruckType su
podređeni objekti. PassangerCarType i TruckType naslijeđuju sve osobine objekta CarType, ali imaju i svoje
vlastite atribute.
Ternarne veze uspostavljaju se izmedu tri tipa entiteta. Znači riječ je o ternarnoj relaciji izmedu primjeraka
triju tipova entiteta. Postoje brojne mogućnosti za funkcionalnost ternarne veze, na primjer (N : M : P ), (1 :
N : M ), (1 : 1 : N ) ili ˇcak (1 : 1 : 1).
9|
Primjer ternarne veze sa prethodne slike odnosi se na podatke o vještinama (SKILL), projektima (PROJECT) i
zaposlenim (EMPLOYEE) angažovanim na projektima. Funkcionalnost ove veze je mnogo-naprema-mnogo-
naprema-mnogo, dakle (N : M : P ), jer na primjer za zadani par (projekat, vještina) potrebno je mnogo
zaposlenih, itd.
ER model dovoljno je jednostavan da ga ljudi različitih struka mogu razumjeti. Zato ER shema služi za
komunikaciju projektanta baze podataka i korisnika, i to u najranijoj fazi razvoja baze. Postojeći DBMS ne
mogu direktno implementirati ER shemu, već zahtijevaju da se ona detaljnije razradi, te modificira u skladu s
pravilima relacijskog modela.
Relacija u relacionom modelu podataka isto je što i relacija u matematici, s tim što su relacije u
relacionom modelu vremenski promjenjljive.
Relacioni model podataka teorijski je razradio britanski matematičar Codd E.F. Codd-ova definicija
relacije glasi:
Neka su dati skupovi D1, D2, D3...Dn (ne obavezno različiti). R je relacija nad ovih n skupova (n veće
od 0) ako je to skup n-torki takav da za svaku n-torku vrijedi da je prvi element n-torke iz D1, drugi
iz D2.... n-ti element iz Dn.
Skup D1 naziva se domena relacije R. Domen je skup sličnoga tipa, npr. skup svih prezimena
učenika. Domen je, dakle, skup svih vrijednosti iz kojeg neki element n-torke relacije može uzeti
vrijednost.
(3,“Tomić“,“Franjo“,“Bizovac 45“)
10 |
S aspekta korisnika, relacija je dvodimenzionalna tabela, koju nazivamo relacionom tabelom. Npr.
Relaciona tabela naziva se i tabela (table). Atributi tabele nazivaju se i polja (fields). Primjerak
relacije naziva se i slog (record).
Skup svih tabela koje čine relacionu bazu podataka naziva se šema baze podataka (schema).
Kolone relacione tabele su atributi relacije. Svaki red relacione tabele predstavlja jednu n-torku
relacije ili primjerak relacije.
Vrijednosti su atomične
o kolone (atributi) su nedjeljive informacije, tj. ne mogu biti složeni iz više podataka.
o npr, tabela razred ne može imati u jednoj koloni atribute razred i odjeljenje; razred
i odjeljenje moraju biti odvojene kolone
Sve vrijednosti jedne kolone su istog tipa
o ovo znači da je domen podataka u jednoj koloni isti (domen je skup vrijednosti koje
atribut može poprimiti)
o npr, za sve primjerke relacione tabele Predmet kolona „oblik nastave“ može
poprimiti samo vrijednosti iz skupa ("teroretska", "prakticna", "laboratorijska",
"kombinovano"). U ovoj koloni ne može biti upisana neka druga vrijednost.
Svaki red tabele je jedinstven
o Ovo svojstvo obezbjeđuje da u relacionoj tabeli ne postoje dva identična reda;
postoji najmanje jedna kolona, ili skup kolona, čija vrijednost jedinistveno
identifikuje svaki red relacione tabele. Ova kolona (kolone) nazivamo primarnim
ključem.
o Npr. u relacionoj tabeli Predmet dozvoljeno je postojanje dva reda sa identičnim
vrijednostima atributa: naziv_predmeta, razred, oblik i sedmicni_fond, ali ako
atribut predmet_id ima različite vrijednosti.
Redoslijed kolona je nevažan.
Redoslijed redova je nevažan.
Svaka kolona mora imati jedinstveno ime.
U relacionom modelu postoje samo relacije ili relacione tabele. Odnos između dvije ili više tabela
izražen je pomoću vrijednosti kolona koje predstavljaju primarni i strani ključ.
Primarni ključ je jedna ili više kolona tabele čija vrijednost jedinistveno identifikuje svaki red
tabele.
Strani ključ je jedna ili više kolona čije vrijednosti su iste kao i vrijednosti primarnog ključa druge
tabele. O stranom ključu možemo razmišljati kao o kopiji primarnog ključa neke druge tabele. Veza
između dvije relacione tabele uspostavlja se preko identikovanja primjeraka čija je vrijednosti
stranog ključa u jednoj tabeli jednaka vrijednosti primarnog ključa druge tabele.
11 |
Posmatrajmo relacije Razred i Ucenik. U relacionoj tabeli Ucenik atribut rezred_id je strani ključ.
Veza između tabela Razred i Ucenik uspostavljena je na taj način što se identifikuje iste vrijednosti
primarnog ključa tabele Razred (razred_id) i stranog ključa "razred_id" u tabeli Ucenik.
Model objekti-veze koji je napravljen u prethodnoj fazi razvoja baze podataka, jednostavno se
prevodi u relacioni model na osnovu skupa pravila. Nabrojaćemo pravila, pokazati na primjeru
njihovu primjenu i generisati relacionu šemu koja i jeste cilj ovog koraka razvoja baze podataka.
Svaki objekat modela objekti veze postaje relaciona tabela, i to tako da atributi objekta postaju
atributi relacione tabele, primarni ključ objekta postaje primarni ključ relacione tabele.
Nakon prevođenja objekata u relacione tabele, prevodimo veze primjenom pravila za prevođenje
veza. Pravila za prevođenje veza date su na osnovu kardinalnosti veze i sveobuhvatnosti objekata
u vezi.
Prilikom izgradnje modela objekti veze identifikovali smo kardinalnost veze (u osnovi tri tipa veza:
1:1, 1:N i N:M). Kada prevodimo model objekti-veze u relacioni model, moramo voditi računa o još
jednom svojstvu veze, a to je količina objekata koji učestvuju u vezi - naziva se još i
sveobuhvatnost objekata u vezi. S tim u vezi, razlikujemo parcijalnu i totalnu vezu.
Veza je totalna za objekat ako svi objekti tog tipa učestvuju u bar jednom pojavljivanju
veze.
o Npr, veza Razred-Ucenik je totalna s obje strane , jer ako posmatramo primjerke
objekta Razred, možemo uočiti da svaki primjerak razreda učestvuje u više veza sa
12 |
Učenikom (nema razreda koji nema učenika); s druge strane, svaki primjerak
ucenika učestvuje u tačno jednoj vezi sa razredom (nema učenika koji ne ide u neki
razred). S toga, oba objekta su totalna u ovoj vezi.
Veza je parcijalna za objekat ako svi objekti tog tipa ne učestvuju u pojavljivanju veze.
o Npr. veza Razredni_starjesina_Razred je parcijalna sa strane Profesor, a totalna sa
strane Razred. Naime, postoje primjerci Profesora koji nisu u relaciji
Razredni_strajesina ni sa jednim primjerkom Razreda, jer uopšte nemaju razredno
starješinstvo. S druge strane, ne postoji primjerak Razreda a da nema vezu sa
primjerkom Profesor, jer svaki razred ima razrednog starješinu.
Svaki 1:N tip veze gdje je strana N totalna (svaki primjerak objekta na strani n je povezan sa
jednim objektom na strani 1) ne prevodi se u novu relaciju, nego se primarni ključ objekta sa
strane 1 umeće kao atribut u relacionu tabelu na strani N. Ovaj atribut postaje strani ključ
relacione tabele na strani N. Svi eventualni artibuti veze postaju atributi relacije na strani N.
Svaki 1:N tip veze gdje je strana N parcijalna (postoje primjerci objekta na strani n koji nisu
povezani sa objektom na strani 1) posmatra se kao veza M:N i prevodi po pravilu 4. Svi
eventualni artibuti veze postaju atributi nove relacione tabele.
Svaka N:M tip veze postaje nova relaciona tabela, atributi tipa veze postaju atributi nove
relacione tabele, primarni ključ nove relacione tabele je složen od primarnih ključeva objekata
koji učestvuju u vezi.
Svaka veza 1:1 koja je s obje strane totalna prevodimo u samo jednu relacionu tabalu, i to tako
da svi atributi objekata i atributi veze postaju atributi nove realcione tabele, a primarni ključ
čine primarni ključevi objekata obuhvaćenih vezom.
Pravilo 6. - prevođenje veze 1:1 koja je s jedne strane parcijalna, a sa druge totalna
Svaka 1:1 veza koja je s jedne strane parcijalna, a sa druge totalna prevodi se tako da atributi
veze postaju atributi relacione table s totalne strane, a primarni ključ relacije s parcijalne strane
postaje novi atribut u relacionoj tabeli sa totalne strane; ovaj novi atribut je strani ključ u
relacionoj tabeli sa totalne strane.
13 |
Pravilo 7. - prevođenje veze koja obuhavata više od dva objekta
Ako su vezom obuhvaćena više od dva objekta, pri čemu je kardinalnost veze M, uvodi se nova
relaciona tabela, čiji ključ je složen od primarnih ključeva svih objekata obuhvaćenih vezom.
Ukoliko veza ima atributa, oni postaju kolone nove relacione tabele.
14 |
2. Modul 2: Analiza i primjena DBMS
Postoji čitav niz alata koji se koriste u svrhu razvoja baza podataka , od faze analize potreba pa do
faze testiranja (data base design).
U fazi modeliranja podataka možemo koristiti gotove programske pakete koji omogučavaju grafički
interface za kreiranje modela objekti veze i njegovo prevođenje u relacioni model.
Prednosti ovih alata su što omgučavaju identifikovanje objekata, atribut i veza među njima,
interaktivnu i brzu izmejnu dijagrama kako bi smo napravili model koji je vjerna slika dijela realnosti
za koji pravimo bazu.
Korištenje alata je veoma jednostavno i zahtijeva samo osnovna znanja o modelima objekti veze i
relacionom modelu.
Ovi alati nude i generatore baze, bilo pitem DDL koda u formi skripti koje se mogu izvršavati na
odredišnoj bazi, bilo direktnim izvršavanjem koda nakon konektovanja na bazu. Također, ovakvi
alati nude i mogučnost reverzibilnog modeliranja (reverse engineering), koji omogučava da se
postojeća struktura baze (iz nekog DBMS) učita u alat, kako bi se šema mogla modifikovati, a u
konačnici, te izmjene se opet putem skripti mogu izvršiti na odredišnoj bazi kako bi se napravile
modifikacije i/ili dodali novi objekti u bazu (ili obrisali postojeći).
Većina alata za modeliranje nudi i mogućnost kreiranja i drugih objekata baze podataka (views,
sequences, packages, functions, procedures....), kako i SQL query editor za definisanje i izvršavanje
upita nad bazom.
Korisnički interfejs
15 |
Uz već poznate izborne menije, skrolbare i statusne linije DBDesigner 4 nudi palete koje mogu biti
iskorišteni za brzi pristup najčešće korištenim alatima.
DBDesigner 4 nudi proširenu upotrebu standardnih windows funkcija kao što su popup – meniji
kojima se pristupa desnim klikom miša. Drag-n–Drop se koristi za određivanje tipa podatka kolone
tabele.
DBDesigner 4 podržava Multible Document Interface ( MDI ) koji vam omogućava da otvorite
neograničen broj modela u isto vrijeme. Možete se prebacivati sa modela na model i koristiti
standardni copy i paste metod za zamjenu objekata između modela.
Modeliranje
Model baze podataka se kreira postavljanjem objekata na podlogu, podešavanjem njihovih atributa
i relacija.
Da bi ste postavili objekat morate selektovati odgovarajući alat iz palete alata. Pored najvažnijih
kao što su tabele i relacije ( 1 : 1, 1 : 1 generalizacija, 1 : n, 1 : n bez identifikacije, n : m ), možete
koristiti Notes, Images i Regions koji vam pomaže da „ razumijete “ strukturu modela.
Tabele
Tabele predstavljaju tabele baza podataka. Ime tabele je predstavljeno u title bar-u, kolone tabele
se nalaze ispod i oznacene su ikonama. Kolona označena sa ključem predstavlja primarni ključ
tabele.
Primarni ključ
Obično je jedna ili više kolona predstavljena kao primarni ključ tabele ( PK ). Ove kolone ne smiju
sadržavati dva ili više podataka iste vrijednosti. To ga čini mogućim da jasno odredi svaki zapis u
tabeli pomoću primarnog ključa ( npr. broj proizvoda ).
Indeks
Da bi ste omogućili bazi podataka da neki određeni zapis brže pronađe, moguće je indeksirati jednu
ili više kolona.
Relacija
16 |
Relacija može biti uspostavljena samo između dvije tabele. Ona kreira vezu između tabela i kreira
strani ključ. Tabele mogu biti povezane koristeći 1 naprema 1 vezu ( npr. osoba – adresa ), 1
naprema više ( grupa proizvoda – proizvod ) ili više naprema više ( npr. zaposlenik – skup ).
Zabilješka
Zabilješke su jednostavni skupovi informacija vezano za tabelu ili strukturu. Mogu biti postavljene
bilo gdje na modelu omogućavajući informacije gdje su potrebne.
Slike
Slike mogu biti postavljene na model za vizuelne dodatne informacije.
Modelovanje
Prije početka modelovanja baze podataka treba biti selektovan način rada „Design Mode“. Da bi
ste promjenili trenutni Work Mode kliknite Design Mode u paleti alata.
Tabele i relacije
Tabele i relacije su glavne komponente svakog modela baze podataka. Tabele zahtjevaju svoje ime,
kolonu i indeks i nekoliko dodatnih podešavanja. Relacije povezuju različite tabele kreirajući 1-1, 1-
n ili n-n vezu.
Postavljanje nove tabele
Da bi ste postavili novu tabelu na model uzmite Table Tool iz palete ili pritisnite T na
tastaturi.
Kursor miša će se promjeniti označavajući trenutno selektovani alat.
Da bi ste postavili tabelu na model kliknite lijevim klikom miša. Nova tabela će biti
kreirana. Biti će nazvana table_XX.
Nakon što postaviti tabelu selektovani alat će se vratiti na Pointer Tool. Kursor miša će
se također promjeniti.
Uređivanje tabele
Da bi ste promjenili tabelu pobrinite se da je Pointer alat selektovan. Dva puta kliknite na tabelu.
Prikazati će se Editor tabele
17 |
Dodjela tipa podatka kolone
Sve kolone će biti kreirane sa istim tipom podataka ( korisite Options -> Model Options da bi ste
promjenili tip podatka ).
Da bi promijenili tip podatka kolone otvorimo paletu tipova podataka i povučemo odgovarajući tip
podatka na kolonu u Table editoru. Ako pridruženi tip podatka ima parametre (npr. VARCHAR)
potrebno je unijeti željene vrijednosti. Pritiskom na dugme Return prihvatamo izmjene, dok ih
dugmetom Esc odbacujemo. Ovo je potrebno ponoviti za sve kolone tabele.
Da bi promijenili parametre određenog tipa podatka, dvostruki klik na taj tip podatka i unesemo
novu vrijednost
Prva kolona se automatski definiše kao primarni ključ tabele i to je pokazano ikonom ključa lijevo
od imena kolone. Da bi uklonili kolonu iz primarnog ključa kliknite na ikonu ključa a da bi dodali
kolonu u primarni ključ kliknite na ikonu kolone.
Zadane vrijednosti i
komentari
Da bi postavili default
vrijednost kolone
dvostruki klik u
Default Value kolonu i
unesite vrijednost. Pritisnite Return da bi sačuvali izmjene
18 |
Da bi prikazali kometare
kilknemo na ikonu
desno od naslova
kolone Default Value.
Da bi dodali komentar
potreban je dvostruki
klik u kolonu comment.
Pravljenje relacije
Dodajte novu tabelu u model korištenjem alata Table i definišite njene kolone. Sad odaberite 1:N
alat za relacije (Non-Identifying Relation) iz Toolbar-a.
19 |
Da bi uspostavili relaciju kliknite na prvu tabelu (productgroup) a zatim na drugu (product). Tabela
product sada ima kolonu strani ključ koja se identificira oznakom FK desno od tipa podatka.
Uvod
MySQL je omiljen izbor baze podataka koje se koriste u web aplikacijama. Predstavlja centralnu
komponentu široko korištenog LAMP web platforme. LAMP je akronim za "Linux, Apache, MySQL,
PHP". Popularnost MySQL-a uglavnom se temelji na popularnosti PHP-a. MySQL se koristi od strane
20 |
nekih od najposjećenijih web stranica na Internet-u, uključujući Facebook, Wikipadia, Nokia.com,
YouTube itd.
Mnogi programski jezici obezbjeđuju alate koji omogućavaju pristup podacima u MySQL-u. To se
realizuje putem API-ja specifičnih za pojedinačni programski jezik. API je skraćenica za application
programming interface a omogućava komunikaciju aplikacija baziranih na različitim softverskim
alatima. API možemo definisati kao interface između različitih programa, slično kao što aplikaciju
definišemo kao vezu između korisnika i baze podataka. Kada je u pitanju MySQL, postoje različite
biblioteke funkcija koje omogućavaju konektovanje na bazu, izvršavanje SQL naredbi, izvršavanje
transakcija (skupa naredbi) i slično.
MySQL je primarno RDBMS te se, stoga, ne isporučuje GUI (Graphical User Interface) alat za
administraciju baze ili upravljanje podacima unutar nje. Osnovni softverski paket uključuje samo
command-line alat (MySQL Command Line Client). Međutim, postoji čitav niz alata drugih
proizvođača, besplatnih ili licenciranih, koji nude GUI interface za administriranje ili pristup
podacima u bazi, koje nazivamo “front end” aplikacijama.
Od kada se pojavio, MySQL Workbench postao je veoma popularan alat umeđu korisnicima
MySQL-a. Zauzima drugo mjesto na listi najčešće download-ovanog softvera sa MySQL web
stranice sa više od 250,000 download-a mjesečno. Godine 2009 izabran je za Database Tool godine.
21 |
3. Server Administration – Omogućava kreiranje i administriranje instance baze podataka.
Nakon izbora ikone sa slike, otvori se dijalog za kreiranje konekcije, u okviru kojeg treba upisati
TCP/IP adresu računara koji služi kao server baze podataka.
Konekciju treba imenovati (Connection Name) kako bismo je mogli pohraniti i ponovljeno koristiti.
U polja “Hostname”, “Username” i “Default Schema” treba upisati podatke koje dobijete od
administratora baze podataka. Prije zatvaranja ovog dijaloga, konekciju treba testirati.
22 |
2. Na toolbar-u “Physical Schemata” odaberite dugme + da biste dodali novu šemu (“skr”).
Pojavit će se nova tab stranica sa istim imenom. Sada možete dodavati tabele.
3. Zatim dodajemo tabele - pomoću Add Table. Tab stranica Table omogučava upisivanje imena tabela, tab stranica
Columns definisanje kolona.
23 |
Kreiranje tabela možemo izvršiti i pomoću grafičkog alata
Ako iz već postojeće šeme želimo napraviti dijagram, koristimo komande iz menija Model, Create Diagram from Catalog
Objects.
24 |
4. Dodajemo relaciju 1:n pomoću ikone sa trake sa alatima. Primjetite da se najprije klikne na tabelu na strain n, a
zatim na tabelu na strain 1. Dobijemo povezane tabele, pri čemu je tabela učenik dobila strani ključ.
5. Snimimo model pomoću ikone na standardnoj traci sa alatima. Upišite ime modelu.
6. Sada ćemo sinhronizovati model sa bazom podataka. Ako nismo konektovani, uspostavimo konekciju izborom
komande iz menija Database, Manage Connections.
7. Pošto ne postoje tabele u šemi, kreiramo nove pomoču komande Database, Forward Engineer
The first page of the wizard is the Catalog Validation page. Click the Run Validations button to validate the Catalog. If
everything is in order the wizard will report that validaton finished successfully. Click Next to continue.
The Options page of the wizard shows various advanced options. For this tutorial you can ignore these and simply click Next.
On the next page you can select the object you want to export to the live server. In this case we only have a table, so no
other objects need to be selected. Click Next.
The next screen, Review SQL Script, displays the script that will be run on the live server to create your schema. Review the
script to make sure that you understand the operations that will be carried out. Click Next.
25 |
Select the connection you created earlier, “Big Iron Server”. Click Execute. Check the messages for any erros, and then click
Close to exit the wizard.
Ensure that the script ran without error on the server and then click Close. As a simple test that the script worked launch the
MySQL Command Line Client. Enter SHOW DATABASES; and identify your schema. Enter USE dvd_collection;, to select
your schema. Now enter SHOW TABLES;. Enter SELECT * FROM movies;, this will return the empty set as you have not yet
entered any data into your database. Note that it is possible to use MySQL Workbench to carry out such checks, and you will
see how to do this later, but the MySQL Command Line Client has been used here as you have probably used this
previously.
Ensure that your model is saved. Click Save Model to Current File on the main toolbar.
26 |
3. Modul 3: Analiza i primjena SQL-a
Za razliku od programskog jezika C++, npr, kod koga se prije izvršavanja programa sve naredbe
programa prevedu, a potom generiše izvršni kod, naredbe SQL-a se interpretiraju: prevode se i
izvršavaju jedna po jedna. Prevođenje se izvršava pri svakom pokretanju programa. Karakteristike
koje slijede iz ovog načina rada su nešto sporije izvođenje, zbog simultanog prevođenja, ali i
jednostavnost jer je moguće trenutno otkriti eventualne pogreške (debugiranjem) tokom izvođenja
programa.
Naredbe napisane u programskom jeziku SQL mogu se grupisati u takozvane skripte.
Sintaksa ovog programskog jezika utemeljena je na radu doktora E.F. Kod-a (E.F.Codd) i IBM u
ranim 1970-im godinama.
sa komandne linije
kroz korisnički interface
iz programa napisanih u drugim programskim jezicima
Pored SQL-a, većina DBMS sistema podržava prošireni SQL jezik: PL/SQL (Procedural Language SQL
). To je proceduralno proširenje programskog jezika SQL, koje opmogućava pisanje proceduralnih
programskih blokova koji, pored osnovnih SQL naredbi, može sadržati i naredbe za kontrolu toka
(if, else...), naredbe ponavljanja (WHILE, FOR), promjenljive i slično.
SQL naredbe
Većina aktivnosti nad bazom podataka realizuje se pomoću SQL naredbi (SQL statements). Npr.
slijedećom naredbom pristupili bismo podacima u tabeli “Persons” i zadali da se upisani podaci
ispišu na monitoru:
27 |
SQL ne razlikuje mala i velika slova, tako da bi “naredba select * from persons” imala isti efekat kao
i prethodna
;
Znak poslije SQL naredbe?
Pojedini sistemi za upravljanje bazama podataka zahtijevaju korištenje znaka ; na kraju naredbe.
Ovo je standardni način odvajanja naredbi, kao i u programskom jeziku C++.
Na ovaj način, možemo kreirati takozvane skripte, koje čini vise SQL naredbi razdvojenih znakom ;.
Skripte omogućavaju izvršavanje vise SQL naredbi jednim pokretanjem.
DML i DDL
SQL naredbe možemo podijeliti u dvije skupine: naredbe za manipulisanje - Data Manipulation
Language (DML) i naredbe za definisanje podataka - Data Definition Language (DDL).
DDL naredbe omogućavaju kreiranje objekata baze podataka, prije svega tabela u kojima su podaci.
Pored toga omogućavaju definisanje pravila integriteta (kao što je mehanizam primarnog i stranog
ključa, mehanizam kontrole NULL i jedinistvenih vrijednosti, itd.), kreiranje indeksa pomoću kojih
se ubrzava pristup podacima i slično. Slijedi pregled nekih naredbi iz ove skupine:
Baza podataka sadrži dragocjene informacije koje sakupljamo i obrađujemo sa mnogo truda i
pažnje. Bilo kakvo neovlašteno ili neadekvatno pristupanje podacima je nedopušteno. S druge
strane, podaci imaju upotrebnu vrijednost samo ako se koriste. Stoga, korisnicima moramo
omogučiti pristup podacima.
U ovom poglavlju naučit ćemo kako možemo obezbijediti sigurnost podataka u bazi i kako
možemo obezbijediti punu kontrolu nad podacima, kao i kontrolu nad korisnicima. Naučit ćemo
kontrolisati ko i šta može uraditi nad podacima.
Problemi korisnika
28 |
U IQ školi koja obrazuje učenike smjera „tehnilčar računarstva“ učenici su napravili aplikaciju i bazu
podataka koja služi kao podrška svim aktivnostima u školi. Između ostalih, ova aplikacije je na
raspolaganju i dežurnim učenicima. Jednoga dana, dežurni učenik prima roditelja koji je došao na
roditeljiski sastanak 4t1 razreda. Roditelja zanima gdje se održava roditeljski sastanak. Učenik
evidentira podatke o roditelju i koristi modul „Aktivnosti u školi“ gdje razredni starješina evidentira i
podatke o terminima informacija, kao i zakazanim roditeljskim sastancima. Učenik odabira razred
(4t1), a aplikacija ispisuje na ekranu:
Iako je 16. mart, učenik je zbunjen i traži pomoć dežurnog nastavnika. Dežurni nastavnik traži ko je
bio dežurni učenik u prijepodnevnoj smjeni....
Dežurni učenik i nastavnik sada samo mogu konstatovati sabotažu podataka i moraju riješiti ovaj
problem bez podrške baze podataka. Ono što treba poduzeti kako bi se ovakve situacije uistinu
izbjegle, jeste da učenicima omogući samo selektovanje podataka iz tabele baze u kojoj su
najavljeni događaji u školi (SELECT). Učenici ne smiju izvršavati INSERT ili DELETE (uostalom, ni u
tablema gdje se čuvaju podaci o ocjenama i izostancima, ni u nekim drugim tabelama… ).
VJEŽBA 1
Ako dizajnirate bazu podataka za školu (i pri tome ste dovoljo odgovorni), u fazi analize zahtjeva ispitali ste ko šta
može uraditi u školskoj bazi. Napišite sa lijeve strane šta učenik može uraditi nad podacima u tabeli ocjene i
izostanci., a na desnoj šta ne može. Navedite odgovarajuće DML i DDL naredbe.
Korisnik može pristupiti bazi samo ukoliko ima kreiran korisnički račun (user account).
Tokom instalacije baze podataka (npr. MySQL) automatski se kreira jedan korisnik, čije korisničko ime ne
možemo promijeniti - root. Ovaj korisnik ima svu kontrolu nad bazom podataka. Budući da je u početku on
jedini korisnik u bazi, prvi zadatak mu je da kreira druge korisnike. S obzirom da ovaj korisnik može uraditi
„sve“ što poželi, najprije ćemo mu dodijeliti lozinku (password), čime ćemo onemogučiti neovlašteno
konektovanje korištenjem root korisničkog računa. U MySQL bazi podataka naredba za postavljanje lozinke je
slijedeća:
29 |
U Oracle DBMS, naredba bi bila:
Ukoliko koristimo grafički korisnički interface, ne moramo znati sinatksu naredbe. Npr.
MySQL Workbench omogućava promjenu lozinke u okviru alata “Server Administration”:
VJEŽBA 2
U školskoj bazi nemate prava kreirati nove/ mijenjati korisnike. Isprobajte Manage Security alat na kućnoj bazi!
30 |
Kreiranje novog korisnika
Šta mislite gdje SQL pohranjuje informacije o korisnicima?
Naravno, u tabeli. DBMS sve podatke čuva u tabalema, uključujuči i podatke o samoj sebi (bazi).
Tabela u kojoj se čuvaju podaci o korisnicima baze podataka sadrži id, ime, lozinku korisnika, kao i
informacije o tome šta korsinik može uraditi.
Minimum informacija koje moramo odrediti prilikom kreiranja korisnika jeste ime korisnika i
lozinka. Npr.
username password
Kada kreiramo korisnika na ovaj način, korisnik kojem bismo dali ove podatke ne bi mogao uraditi ništa nad
bazom!
Pogledajmo ilustraciju:
Samo određeni korisnici mogu dodavati/mijenjati podatke u tabeli poslovi (chores). Samo root može
koristi naredbe INSERT, UPDATE i DELETE nad tabelom chores. Korisnik happy je odgovoran za
tabelu talking_animals. On može mijenjati i strukturu te tabele.
Potrebna je kontrola pristupa i unutar tabele; neki mogu vidjeti samo određene kolone tabela
Svi osim duey-a mogu vidjeti kolonu „instructions“ u tabeli chores (zbunjuje ga).
31 |
Naredba GRANT, osnovni oblik
Pogleadajmo primjer:
Korisnik treba pristup i ostalim tabelama u bazi. Za svaku pojedinačnu tabelu trebamo posebnu GRANT
naredbu. Npr.
Uz naredbu GRANT možemo koristiti i opciju “WITH GRANT OPTION”. Ovom opcijom dodjeljujemo pravo
dodjele odabranog prava drugim korisnicima. Npr. posmatrajmo naredbu:
Ovom naredbom elsie ne samo da dobiva pravo da pristupa podacima u tabeli activities, već ima pravo da
ovo isto pravo dodjeli i drugim korisnicima (ali samo nad tabelom activities!!!).
VJEŽBA
32 |
2. Napiši odgovarajuću GRANT naredbu.
Napiši naredbu kojom se korisniku doc dodjeljuje pravo SELECT nad svim tabelama baze
podataka woodland_cottage
(GRANT SELECT ON wwwwww TO xxxx)
33 |
U prethodnoj vježbi vidjei smo različite oblike naredbe GRANT. Možemo zaključiti kako slijedi:
1. U okviru iste GRANT naredbe možemo izvršiti dodjelu prava za vise korisnika
GRANT ALL ON chores TO bashful, doc, dopey, happz;
2.WITH GRANT OPTION daje pravo korisinku da drugima dodjeli ono pravo koje mu datom naredbom
dodjeljujemo
4. Jednom GRANT naredbom možemo dodjeliti vise različitih prava nad jednom tabelom. Samo
navedemo listu prava razdvojenih zarezom.
5. GRANT ALL dodjeljuje prava SELECT, UPDATE. DELETE i INSERT nad odabranom tabelom
GRANT ALL ON chores TO doc;
6. Korisniku možemo jednom GRANT naredbom dodjeliti određena prava nad svim tabelama neke baze
podataka ako navedemo database_name.*
34 |
Naredba REVOKE
Privilegiju koju korisnik posjeduje možemo “opozvati”. To radimo pomoću naredbe REVOKE.
Sintaksa ove naredbe je jako slična naredbi GRANT. Umjesto GRANT navodimo REVOKE, umjesto
TO navodimo FROM – ostalo je isto.
Možemo ukinuti i GRANT OPTION, ali ostaviti privilegiju. Npr. happy i sleepy zadržavaju pravo
brisanje iz tabele chores, ali vise nemaju pravo da je dodjele drugim korisnicima, ako zadamo
naredbu…
35 |
Posmatrjmo slijedeći scenarij. Korisnik root dodjelio je korisniku sleepy privilegiju DELETE sa GRANT
OPTION nad tabelom chores. Zatim sleepy dodjeljuje privilegiju brisanja korisniku sneezy.
Postoje dva načina kako ovaj problem (ukoliko to uistinu jeste problem) riješiti. Ako ne želite da
ukidanje privilegija ima uticaja na druge korisnike, koristimo službene riječi CASCADE i RESTRICT,
kako slijedi.
Ako koristimo CASCADE, onda se ukidanje privilegije automatski odražava na one korisnike koji su
privilegiju dobili od korisnika kojima naredbom REVOKE ukidamo neko pravo.
36 |
Ako koristimo RESTRICT, pri izvršavanju naredbe dobit ćemo poruku o grešci, ukoliko je korisnik
kojem ukidamo pravo to isto pravo dodijelio nekome drugom.
Ako bi korisnik root zadao prethodnu naredbu dobio bi poruku o grešci. Oba korisnika (sleepy i
sneezy) zadržali bi prava koja sui mala prije zadavanja ove naredbe.
VJEŽBE
Korisniku elsie date su privilegije koje joj više ne trebaju. Zadajte odgovarajuće naredbe REVOKE
nakon kojih će elsie samo moći čitati podatke.
37 |
Nema glupih pitanja
Q: Možemo li privilegije dodjeljivati na nivou kolone tabele? Npr. možemo li dodjeliti INSERT nad samo
jednom kolonom?
A: To bi zapravo bilo potpuno beskorisno – omogućiti da se upiše vrijednost u samo jednu kolonu
tabele! Ovo bi imalo smisla samo ako tabela ima samo jednu kolonu, i to upravo onu koju navodim
u GRANT naredbi.
Q: Pretpostavimo da smo kreirali korisnika koji bi trebao imati sva prava nad svim tabelama u svim šemama
baze podataka. Ima li neki jednostavan način da ovo uradimo ?
38 |
VJEŽBA
Prošitajte opise poslova pojedinih korisnika i napišite sve potrebne GRANT naredbe koje će
im omogučiti pristup podacima koji im usitinu trebaju a onemogučiti pristup ostalim.
GREG
3. Napiši potrebne GRANT naredbe kako bi svaki od ova tri korisnika mogao obavljati svoj posao.
Nova tabela dodaje se u bazu pomoci „Create table“ naredb, iza nje navodimo ime tabele a zatim
unutar zagrada specifikaciju kolona tabele.
Definitions: Obavezno navodimo tip podataka i opciono definišemo da li kolona može biti NULL, da
li se vrijednosti kolone automatski uvećavaju ili koja je to podrazumijevana vrijednost kolone.
Prije kreiranja tabele najprije selektujemo SCHEMU (bazu podataka) tako da MySQL zna gdje da
kreira tabelu, ovo postižemo naredbom „use“
Nakon selektovanja baze (scheme) primjerom koji slijedi kreiramo tabelu „customer“ koju čine tri
kolone (customer_id, customer_name, customer_address). Kolone customer_id i customer_name
moraju sadržati vrijednost (not null). Customer_id čuva cjelobrojne vrijednosti koje će se
automatski uvećavati pri unosu novog reda u tabelu. Primarni ključ je customer_id.
NULL vrijednost:
Ako odredimo da je kolona „not null“ onda kolona mora imati dodjeljenu vrijednost prije
dodavanja reda u tabelu. Ako navedeno samo „null“ ili ne navedemo ništa možemo dodati red u
tabelu i ako je određena kolona bez dodjeljene vrijednosti.
Primarni ključ:
Primarni ključ (PK) je jedna ili više kolona koja se koristi za identifikovanje jednog reda tabele.
Vrijednost(i) primarnog ključa mora biti jedinstvena za svaki red tabele. PK definiše se korištenjem
„primary key“ opcije u okviru „crate table“ naredbe. Ako je ključ složen iz više kolona u listi ih
odvajamo zarezom.
Auto_increment je jedna od najjednostavnijih ali veoma korisnih opcija SQL jezika. U osnovi ako
kolonu definišemo korištenjem „auto increment“ opcije vrijednost kolone automatski se uvećava
svaki puta kada dodamo novi red u tabelu. Ovo je posebno korisno ako je kolona primarni ključ. U
tom slučaju nije potrebno pisati SQL naredbu za računanje nove jedinstvene vrijednosti kolone koja
je primarni ključ, budući da to SQL radi automatski .
40 |
Postoje dva ograničenja u vezi sa „auto increment“ opcijom, prvo samo jedna kolona jedne tabele
može imati auto increment, drugo kolona sa auto increment opcijom mora imati pripadajući index.
Pri unosu podataka u tabelu ipak možemo specificirati vrijednost za kolonu sa auto increment
opcijom. Ova vrijednost bit će prihvaćena sve dok je ona jedinstvena.
Pomoću „default value“ opcije možemo odrediti vrijednost koja će biti dodijeljena koloni ukoliko
korisnik ne upiše vrijednost kolone. Default value je definiše se pomoću „Default“ ključne riječi u
okviru „Create table“ naredbe. Npr. slijedeće SQL naredba definiše podrazumijevanu vrijednost za
kolonu za kolonu „Sales quatitiy“:
U okviru „create table“ naredbe obavezno definišemo tip Database Engine pomoću „engine“
opcije. MySQL nudi više različitih tipova Database Engine-apri čemu svaka ima određene prednosti
. Izbor Database Engine-a vrši se na nivou tabele. Neke od Database Engine-a slijede:
Transaackija je skup SQL naredbi koji čini jednu logičku cjelinu sa aspekta obrade podataka unutar
baze. InnoDB engine osigurava da je svaka transakcija nad bazom 100% kompletirana i omogućava
povrat u prethodno stanje, u slučaju neke nepredviđene situacija (nestanak el. energije i sl.). Ovo
osigurava da se nad bazom nikada neće izvršiti parcijalna izmjena podataka.
MyISAM – ovaj tip engine-a je koncipiran specijalno za podršku radu sa tekstualnim podacima
budući da ima veoma dobre performanse kod pretraživanja istih.
MEMORY – Ima iste osobine kao MyISAM kad je u pitanju funkcionalnost s tim što se podaci čuvaju
u radnoj memoriji umjesto na hard disku kao prethodna dva. Kao takav pogodan je za čuvanje
privremenih (temporary) pomoćnih tabela.
Primjeri
41 |
Izmjena i brisanje tabela
Nakon kreiranja tabele ne preporučuje se njena izmjena ukoliko sadrži podatke ponekad
međutim neophodne su izmjene i mogu se izvršiti pomoću SQL naredbu.
Izmjena tabele
Izmjena postojeće tabele vrši se pomoću „alter table“ naredbe.Dozvoljene izmjene su:
dodavanje ili brisanje kolona, izmjena tipa podataka kolone i promjena imena kolone ili tabele.
MySQL mijenja tabelu na slijedeći način: najprije kopira u privremenu tabelu, vrši izmjene
privremene tabele, briše orginalnu tabelu i preimenuje privremenu tabelu.
Izmjena imena kolone, postiže se pomoću opcije „change“ u okviru „alter table“ naredbe. Pri čemu
pored novog imena kolone moramo navesti i tip. Npr:
Brisanje tabele:
Vježba 1:
Kreirati tabelu učenik sa kolonama: ID (cio broj, obavezno polje, auto increment)
43 |
na prvu poziciju dodati kolonu „redni broj“, a zatim iza kolone „adresa“ dodati kolonu
„poštanski broj“ (char 5)
promijeniti ime kolone „adresa“ u „ulica_broj“
obrisati kolonu „redni broj“
promijeniti tip podataka kolone „poštanski broj“ u INT tip
obrisati tabelu učenik
Vježba 2:
Unos podataka u tabelu realizujemo pomoću naredbe INSERT. Pomoću ove naredbe
možemo ubaciti jedan ili više redova u tabelu ili jedan ili više redova koje selektujemo iz neke druge
tabele baze podataka.
Da bi smo umetnuli jedan red iza službenih riječi „INSERT INTO“ navodimo ime tabele a
zatim listu naziva kolona unutar „( )“ iza čega slijedeslužbena riječ „VALUES“ i lista vrijednosti koje
ubacujemo. Npr:
U naredbi INSERT treba voditi računa o redoslijedu navođenja vrijednosti. Naime on mora
odgovarati redoslijedu navođenja imena kolona u prethodnoj listi. Umjesto navođenja obje liste
INSERT možemo zadati i bez liste naziva kolona naprimjer, slijedeća naredba imala bi isti efekat kao
i prethodna
44 |
INSERT INTO products
VALUES
( NULL,
'HP Proliant SG4',
'server',
100);
U prethodnoj naredbi moramo imati na umu da lista vrijednosti redoslijedom navođenja odgovara
redoslijedu navođenja imena kolona pri kreiranju tabele.
Umjesto zadavanja više INSERT naredbi za umetanje u istu tabelu možemo jednom INSERT
naredbom umetnuti više redova na slijedeći način:
Ponekad je potrebno umetnuti u tabelu podatke iz neke druge postojeće tabele iste baze
podataka. To možemo pomoću „INSERT SELECT“ naredbe. Npr: slijedećom naredbom u tabelu
„new_products“ upisujemo podatke iz postojeće tabele „old_products“ :
45 |
Primjeri
Izmjenu podataka realizujemo pomoću naredbe UPDATE. Pomoću ove naredbe možemo
izmjeniti sve ili samo odabrane redove, jednu ili više kolona tabele.
UPDATE ime_tabele
SET ime_kolone1=vrijednost1,
...
ime_kolonen=vrijednostn
Ako želimo izmjeniti samo odabrane redove koristimo WHERE. U opštem slučaju zadajemo
naredbu:
UPDATE ime_tabele
SET ime_kolone1=vrijednost1,
46 |
...
ime_kolonen=vrijednostn
WHERE kriterij
Npr: Ako želimo u tabeli products izmjeniti podatke o proizvodu „id=12134“ te postaviti
„description=veličina38crvene cipele“ a „name=velika crvena cipela“. Zadajemo naredbu:
UPDATE products
SET description='velicina38crvene_cipele,
WHERE id=12134;
UPDATE products
SET quantity=13;
Da li svi redovi ili samo odabrani red mogu biti obrisani pomoću naredbe DELETE.Preporučljivo je
korištenje naredbe DELETE isključivo u kombinaciji sa WHERE jer bez te klauzule brišemo sve
podatke iz tabele.
Slijedeća SQL naredba briše onaj red iz tabele products u kojem je „id“ 12134:
WHERE id=12134;
Treba imati na umu da naredba DELETE briše samo podatke a ne i samu tabelu. Za brisanje tabele
treba koristiti naredbu DROP TABLE
Jedna od najčešće korištenih naredbi je upravo naredba SELECT, ona omogućava pristup podacima
pohranjenim u tabeli baze podataka. Najjednostavniji oblik naredbe SELECT je listanje podataka
upisanih u jednu kolonu tabele:
U opštem slučaju iza SELECT navodimo listu imena kolona odvojenih zarezom npr:
47 |
Pri listanju podataka iz tabele možemo ograničiti broj slogova koji će biti zahvaćeni. To realizujemo
pomoću opcije LIMIT iza koje navodimo broj koji označava koliko slogova treba selektovati. Npr:
* SELECT * FROM products LIMIT 10
Pored ovoga LIMIT možemo koristiti s dva parametra, pri čemu prvi određuje koliko slogova će biti
preskočeno a drugi koliko narednih će biti obuhvaćeno upitom. Npr.
Eliminisanje istih vrijednosti u SELECT upitu možemo postići pomoću ključne riječi DISTINCT. Npr:
* SELECT DISTINCH city FROM customers
Prethodnom naredbom ispisat ćemo jedinstvene vrijednosti kolone „city“ u tabeli „customers“.
U opštem slučaju SELECT ispisuje podatke iz tabele u redoslijedu kako su oni upisani. Korsinik može
definisati redoslijed prikaza podataka pomoću ključnih riječi „order by“. Iza „order by“ navodimo
ime jedne ili više kolona po kojima lista treba da bude sortirana. Npr.
Prethodna naredba ispisuje spisak kupaca u rastućem redoslijedu (ascending-„asc“). Ako želimo
sortiranje u opadajućem redoslijedu moramo navesti službenu riječ „desc“ (descending). Npr:
Ukoliko želimo sortiranje po više kolona navodimo ih u listi iza klauzule „ORDER BY“. Npr:
Ovom naredbom određujemo da se najprije izvrši sortiranje po koloni city, a unutar toga po koloni
„customerName“
Iza WHERE navodimo ime kolone koja je osnova upita a zatim relacioni operator u kojem
definišemo poređenje i konačno vrijednost sa kojom poredimo:
Prethodnom naredbom ispisujemo one proizvode koji u koloni „buyPrice“ imaju vrijednost manju
od 50. Kao relacioni operator možemo navesti: =, <, <=, >, >=, <>(!=).
Za kolonu koja nema vrijednost kažemo da sadrži NULL vrijednost. Kada vršimo poređenje sa NULL
vrijednošću koristimo operator poređenja „IS (NOT)“. Umjesto =(!=). Npr:
48 |
Prethodnom naredbom ispisuju se podaci o kupcima kod kojim nije upisana vrijednost u kolonu
„state“
Vježbe:
SELECT DISTINCT city FROM customers WHERE country='USA' ORDER BY city DESC;
3. Napisati naredbu koja lista sve podatke iz tabele „customers“ za koje je upisana
vrijednost u kolonu „state“
4. Napisati naredbu kojom iz tabele „customers“ brišemo sve redove kod kojih je vrijednost
polja „creditLImit“ manja od 100.
U okviru WHERE opcije možemo navesti više uslova korištenjem operatora AND, OR, NOT,
IN.
Npr. Želimo ispisati samo one proizvode čija cijena pada u opseg od 100 do 200. Zadajemo
slijedeću naredbu:
SELECT * FROM products WHERE buyPrice >=100 AND buyPrice <=200
49 |
Prethodna naredba ispisat će samo proizvode koji zadovoljavaju oba uslova. Ako želimo
ispisati proizvode čija vrijednost „buyPrice“ nije u zadatom opsegu možemo:
SELECT * FROM products WHERE NOT (buyPrice >=100 AND buyPrice <=200)
b) koristenjem operatora OR
Ukoliko u istoj SELECT naredbi imamo više uslova povezanih logičkim operatorima
redoslijed testiranja uslova je tačno definisan pravilom. MySql najprije provjerava AND izraz a zatim
OR izraze. Neovisno o redoslijedu navođenja. Ukoliko želimo drugačiji redoslijed testiranja izraza,
koristimo zagrade. Npr:
AND buyPrice>100.
Ako želimo izlistati proizvode koji ne pripadaju ni jednoj navedenoj proizvodnoj liniji onda
koristimo operator NOT IN
Ako želimo ispisati sve slogove kod kojih productName počinje karakterima „BMW“
zadajemo naredbu:
Ako želimo ispisati sve slogove kod kojih productName završava karakterima „BMW“ zadajemo
naredbu:
50 |
SELECT * FROM products WHERE productName LIKE '%BMW'
Ako želimo ispisati sve proizvode koji bilo gdje u koloni producName sadrži karaktere
„BMW“zadajemo naredbu:
Zamjenske karaktere „_“ i „%“ možemo kombinovati u istom LIKE uslovu. Slijedeca naredba ispisuje
proizvode koji u „productName“ sadrži samo proizvode proizvedene u 20. Vijeku koji sadrže string
„Dodge“
Primjer
Pomoću SELECT naredbe možemo pristupati podacima iz više od jedne tabele. Najprostiji oblik
spajanja tabela jeste „Kartezijev proizvod“ gdje se svaki redu jedne tabele povezuje sa svim
redovima druge tabele, tako da ako prva tabela ima „n“ redova a druga „m“ spajanjem dobijemo
„n*m“ redova.
U praksi „Kartezijev proizvod“ se rijetko koristi. Spajanje tabela vrši se korištenjem stranih ključeva
pomoću kojih se i uspostavljaju tabele između tabela.
Rezultat prethodnog upita bili bi samo oni redovi tabele 1za koje vrijednost kolone 1 ima
odgovarajući red u kome u tabeli 2 u kome kolona 2 ima istu vrijednost kao i kolona 1 iz tabele 1.
Slijedi primjer spajanja
51 |
FROM employees, offices
WHERE employees.officeCode=Offices.officeCode;
WHERE e.officeCode=o.officeCode;
Umjesto koristenja punog naziva „tabela.kolona“ mozemo koristiti alias (drugo ime) tabele.
Alias određujemo u FROM dijelu SELECT naredbe, kao u prethodnom primjeru.SELECT omogućava
povezivanje više od dvije tabele.
WHERE o.OrderNUmber=od.OrderNumber
AND od.ProductCode=p.ProductCode
FROM customers
ON c.customerNumber = o.customerNumber
U praksi se cesto namece potreba za generisanje novih vrijednosti na bazi postojecih vrijednosti
upisanih u tabele baze podataka.
MySql omogucava definisanje izraza i koristenje ugradjenih funkcija. Npr predpostavimo da u tabeli
„stavke_narudzbe“ imamo kolone: koli;ina i cijena, tada mozemo zadati naredbu:
52 |
Prethodnom naredbom određujemo da se izracuna vrijednost izraza (cijena*kolicina) te da se toj
koloni pridruzi naziv „iznos“.
Pored matematičkih operatora i naziva kolona u izrazima možemo koristiti MySql funkcije. Npr ako
u tabeli ucenik imamo kolone: prezime i ime, novu vrijednost možemo dobiti pomoću funkcije
„Concat“ koja omogucava nadovezivanje stringova (konkatenencija).:
Rezultujuci skup sadrzat ce kolonu ime koja sadrzi vrijednosti iz kolone prezime kojoj je dodata
vrijednost iz kolone ime. Funkcija Concat moze sadrzati vise argumenata kao npr:
CONCAT je jedna od funkcija za rad sa stringovima. Generalno Sql funkcije možemo podijeliti u 4
kategorije:
Matematičke funkcije
ABS() Returns the absolute value
ACOS() Returns the arc cosine
ASIN() Returns the arc sine
ATAN2(), ATAN() Returns the arc tangent of the two arguments
ATAN() Returns the arc tangent
/ Division operator
CEILING(), CEIL() Returns the smallest integer value not less than the argument
COS() Returns the cosine
COT() Returns the cotangent
DEGREES() Convert radians to degrees
DIV() Integer division
EXP() Raise to the power of of the argument
FLOOR() Returns the largest integer value not greater than the argument
MOD() Returns the remainder
LN() Returns the natural logarithm of the argument
LOG10() Returns the base-10 logarithm of the argument
LOG2() Returns the base-2 logarithm of the argument
LOG() Returns the natural logarithm of the first argument
- Minus operator
53 |
% Modulo operator
PI() Returns the value of pi
+ Addition operator
POW(), POWER() Returns the argument raised to the specified power
RADIANS() Returns argument converted to radians
RAND() Returns a random floating-point value
ROUND() Rounds the argument
SIGN() Returns the sign of the argument
SIN() Returns the sine of the argument
SQRT() Returns the square root of the argument
TAN() Returns the tangent of the argument
* Times operator
TRUNCATE() Truncates to specified number of decimal places specified in the argument
- Change the sign of the value passed as an argument
Funkcija ABS():
----> 2
----> 32
----> 123
Funkcija ACOS(X):
----> 0
----> NULL
Funkcija ASIN(X):
----> 0.20135792079033
----> 1.57079633
----> 1.1071487177941
----> -1.1071487177941
Funkcija vraća vrijednost arc tan dvije varijable (ugla) X i Y. Identično računanju primjera:
arc tan Y/X, sa izuzetkom što se predznaci oba argumenta koriste za određivanje u koje kvadrantu
se nalazi rezultat.
----> -0.78539816339745
----> 1.5707963267949
Funkcija „division“ /:
55 |
MySql-> SELECT 3/5;
----> 0.60
Dijeljenje sa nulom nije dozvoljeno. U slučaju da se pokuša dijeljenje sa nulom funkcija vraća NULL
vrijednost.
Select RADIANS(PI())
mysql->0.0548311355616075
Vraca slucajno određene decimalne realne vrijednosti izmedu 0 I 1. Ako u zagradu funkcije odredimo
neki broj, funkcija ce nam uvijek izabiciti isti rezultat za određenu kolonu I tabelu.
+------+------------------+
| i | RAND() |
+------+------------------+
| 1 | 0.61914388706828 |
| 2 | 0.93845168309142 |
| 3 | 0.83482678498591 |
+------+------------------+
Zaokruzuje određeni decimalni broj na ,od korisnika definisano, određen broj decimala. Ako broj
decimala nije određen onda ce se broj zaokruziti na 0 decimala
SELECT ROUND(-1.23)
Mysql->-1
Vraća nam brojeve -1,0,1 na osnovu unesenog broja. Ako je rezultat -1 znaci da je negativan broj, 1
da je pozitivan, a 0 u slucaju da nije ni jedno od dvoje prethodnih slucaja
SELECT SIGN(-23)
mysql->-1
56 |
Funkcija SELECT SIN(određeni ugao)
Select SIN(PI())
Mysql->1.22464679914735e-016
SELECT SQRT(4)
mysql->2
Select TAN(PI())
mysql->-1.22464679914735e-016
SELECT 2*2*3
Mysql->12
Radi isto kao i SELECT ROUND() ali ova funkcija zaokruzuje i brojeve koje nisu decimalne vrijednosti
kao Npr. Broj 123 da zaorkuzimo na -2 mjesta, dobit cemo 100.
SELECT --3
mysql->
Funkcija *CEILING()
-> 2
57 |
-> -1
* CEIL()
Je sinonim za CEILING()
Funkcija * COS()
-> -1
Funkcija * COT()
-> -1.5726734063977
-> NULL
Funkcija * DEGREES()
-> 180
-> 90
Funkcija * DIV()
Cjelobrojno dijeljenje.
58 |
mysql> SELECT 5 DIV 2;
-> 2
Funkcija * EXP()
-> 7.3890560989307
-> 0.13533528323661
-> 1
Vraća vrijednost e (osnova prirodnog logaritma) uvećanu na x.Inverzija ove funkcije je LOG ili ln.
Funkcija Radians ()
„Vraća argument x, pretvara iz stupnjeva u radijane. (Imati na umu da π radijana iznosi 180
stepeni)“
-> 1.5707963267949
Funkcija PI()
-> 3.141593
-> 3.141592653589793116
Funkcija POW(x,y),POWER(x,y)
-> 0.25
-> 4
-> 1
-> 2
-> 2
MOD- također radi i na vrijednostima koje su razlomljeni dio i vraća ostatak nakon dijeljenja.
-> 1.5
-> 8
60 |
-> -2
61 |