You are on page 1of 61

ELLEEKKTTRROOTTEEHHNNIIČČKKAA ŠŠKKOOLLAA TTUUZZLLAA

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

MODUL 1: MODEL OBJEKTI-VEZE I RELACIONI MODEL 3

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 2: ANALIZA I PRIMJENA DBMS 15

2.1 PROGRAMSKI ALATI ZA MODELIRANJE PODATAKA 15


2.2 OSNOVE ALATA DBDESIGNER 15
2.3 DBMS MYSQL 20
2.4 MYSQL WORKBENCH 21
2.5 KREIRANJE KONEKCIJE 22
2.6 DATA MODELING 22

3. MODUL 3: ANALIZA I PRIMJENA SQL-A 27

3.1 UVOD U PROGRAMSKI JEZIK SQL 27


3.2 ZAŠTITA PODATAKA U BAZI 28
KORISNICI (DATABASE USERS) 29
KREIRANJE NOVOG KORISNIKA 31
DODJELA PRAVA KORISNICIMA 31
NAREDBA GRANT, OSNOVNI OBLIK 32
NAREDBA REVOKE 35
VJEŽBE 37
3.3 DDL NAREDBE 39
3.4 KREIRANJE UPITA NAD BAZOM PODATAKA 47
3.5 SPAJANJE TABELA (JOIN) 51
3.6 MYSQL FUNKCIJE 52

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.

1.2 Ciljevi koji se nastoje postići korištenjem baza podataka


Baze podataka predstavljaju viši nivo rada s podacima u odnosu na klasične programske jezike. Taj viši nivo
rada očituje se u tome što tehnologija baza podataka nastoji (i u velikoj mjeri uspijeva) ispuniti sljedeće
ciljeve.

Fizička nezavisnost podataka


Razdvaja se logička definicija baze od njene stvarne fizičke implementacije. Znači, ako se fizička
struktura promijeni (na primjer, podaci se prepišu u druge datoteke na drugim diskovima), to neće
zahtijevati promjene u postojećim aplikacijama.
Logička nezavisnost podataka
Razdvaja se globalna logička definicija cijele baze podataka od lokalne logičke definicije za jednu
aplikaciju. Znači, ako se logička definicija promijeni (na primjer uvede se novi zapis ili veza), to neće
zahtijevati promjene u postojećim aplikacijama. Lokalna logička definicija obično se svodi na
izdvajanje samo nekih elemenata iz globalne definicije, uz neke jednostavne transformacije tih
elemenata.
Fleksibilnost pristupa podacima
U starijim mrežnim i hijerarhijskim bazama, metode pristupa podacima bile su unaprijed definisane,
dakle korisnik je mogao pristupati podacima jedino onim redoslijedom koji je bio predviđen u
vrijeme projektovanja i implementiranja baze. Danas se zahtijeva da korisnik može slobodno
postupati podacima, te po svom nahođenju uspostavljati veze među podacima. Ovom zahtjevu
zaista zadovoljavaju jedino relacione baze.
Istovremeni pristup podacima
Baza mora omogućiti da veći broj korisnika istovremeno koristi iste podatke. Pritom ti korisnici ne
smiju ometati jedan drugoga, te svaki od njih treba imati utisak da sam radi s bazom.
Čuvanje integriteta
Nastoji se automatski sačuvati korektnost i konzistentnost podataka, i to u situaciji kad postoje
greške u aplikacijama, te konfliktne (istrovremene) aktivnosti korisnika.
Mogućnost oporavka nakon kvara
Mora postojati pouzdana zaštita baze u slučaju kvara hardvera ili grešaka u radu sistemskog
softvera.
Zaštita od neovlaštenog korištenja

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).

1.3 Arhitektura baze podataka


Arhitektura baze podataka sastoji se od tri sloja i interface-a među slojevima, kao što je prikazano na slici

Lokalni logički nivo

Globalni logički nivo

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.

1.4 Jezici za rad s bazama podataka


Komunikacija korisnika odnosno aplikacijskog programa i DBMS-a odvija se pomoću posebnih jezika. Ti jezici
tradicionalno se dijele na sljedeće kategorije.

Jezik za opis podataka (Data Description Language - DDL)


Služi projektantu baze ili administratoru u svrhu zapisivanja šeme ili pogleda. Dakle tim jezikom
definišemo podatke i veze medu podacima, i to na logičkoj razini. Koji puta postoji posebna varijanta
jezika za šemu, a posebna za poglede. Naredbe DDL obično podsjećaju na naredbe za definisanje
složenih tipova podataka u jezicima poput COBOL, PL/I, C, Pascal.

Jezik za manipuliranje podacima (Data Manipulation Language - DML)


Služi programeru za uspostavljanje veze izmedu aplikacijskog programa i baze. Naredbe DML
omogućavaju “manevrisanje” po bazi, te jednostavne operacije kao što su upis, promjena, brisanje
ili čitanje zapisa. U nekim softverskim paketima, DML je zapravo biblioteka potprograma: “naredba”
u DML svodi se na poziv potprograma. U drugim paketima zaista se radi o posebnom jeziku:
programer tada piše program u kojem su izmiješane naredbe dvaju jezika, pa takav program treba
prevoditi s dva prevodioca (DML-precompiler, obični compiler).
Jezik za postavljanje upita (Query Language - QL)
Služi neposrednom korisniku za interaktivno pretraživanje baze. To je jezik koji podsijeća na govorni
(engleski) jezik. Naredbe su neproceduralne, dakle takve da samo specificiraju rezultat kojeg želimo
dobiti, a ne i postupak za dobivanje rezultata.

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.

1.5 Poznati softverski paketi za rad s bazama podataka


Baze podataka se u pravilu realizuju korištenjem nekog od provjerenih softverskih paketa. Tabelarni prikaz
koji slijedi daje pregled nekih softverskih paketa koji u predstavljaju tehnološki vrh, te imaju značajan udio na
svjetskom tržištu.
Proizvođač Proizvod Operativni sistem Jezici
IBM Corporation DB2 Linux, UNIX (razni), SQL,
MS Windows NT/2000/XP, COBOL,
VMS, MVS, VM, OS/400 Java, . . .
Oracle Corporation Oracle MS Windows (razni), SQL,
Mac OS, UNIX (razni), Java i
Linux i drugi drugi
IBM Corporation Informix UNIX (razni), Linux, SQL,
(prije : Informix MS Windows NT/2000/XP Java i

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.

1.6 Životni ciklus baze podataka


Uvođenje baze podataka u neko preduzeće ili ustanovu predstavlja složeni zadatak koji zahtijeva timski rad
stručnjaka raznih profila. To je projekt koji se može podijeliti u pet faza:
1. analiza potreba,
2. modeliranje podataka,
3. implementacija,
4. testiranje i
5. održavanje.

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).

1.2. Model objekti-veze


Modeliranje entiteta i veza

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;

Veze (Relationship): odnosi među entitetima koji su nam od interesa;

atributi: svojstva entiteta i veza koja 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.

Funkcionalnost veze može biti:


Jedan-naprema-jedan (1 : 1, one-to-many). Jedan primjerak prvog tipa entiteta može biti u vezi s
najviše jednim primjerkom drugog tipa entiteta, te također jedan primjerak drugog tipa može biti u
vezi s najviše jednim primjerkom prvog tipa. Na primjer veza JE RAZREDNIK izmedu tipova entiteta
NASTAVNIK i ODJELJENJE.
Jedan-naprema-više (1 : N, one-to-many ). Jedan primjerak prvog tipa entiteta može biti u vezi s 0, 1
ili više primjeraka drugog tipa entiteta, no jedan primjerak drugog tipa može biti u vezi s najviše jed-
nim primjerkog prvog tipa. Na primjer veza ucenik_odjeljenje između tipova entiteta
UCENIK i ODJELJENJE .

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).

Prikaz ER-sheme pomoću dijagrama (ER dijagram)

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.

1.3. RELACIONI MODEL

Objekte i veze u relacionom modelu podataka predstavljamo relacijama.

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.

Uobičajen zapis relacije je:

Naziv_relacije (atribut1, atribut2,....,atribut n)

Npr. relacija učenik zapisana je kao:

Ucenik(#ucenik, prezime, ime, adresa)

Primjerak relacije je konkretizacija relacije. Npr.

(1,“Jahić“,“Adnan“,“Armije BiH 18“)

(2,“Mujić“,“Damir“,“Albina Herljevića 9“)

(3,“Tomić“,“Franjo“,“Bizovac 45“)

10 |
S aspekta korisnika, relacija je dvodimenzionalna tabela, koju nazivamo relacionom tabelom. Npr.

#ucenik Prezime Ime Adresa


1 Jahić Adnan Armije BiH 18
2 Mujić Damir Albina Herljevića 9
3 Tomić Franjo Bizovac 45

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.

Relaciona tabela ima slijedeća svojstva:

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.

1.4. Preslikavanje modela objekti-veze u relacioni model

(Pravila za prevođenje modela objekti-veze u relacioni model)

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.

Najprije se primjenjuje jednostavno pravilo za prevođenje objekata u relacione tabele. To pravilo


glasi:

Pravilo 1 - Prevođenje objekata

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.

Možemo modifikovati dijagram objekti-veze da bismo dodali i informaciju o sveobuhvatnosti veze.


Ako neki objekat učestvuje totalno u vezi, onda uz informaciju o kardinalnosti, uz objekat
upisujemo i znak *.

Dakle, uzimajući u obzir kardinalnost veze i sveobuhvatnost objekata u vezi, primjenjujemo


slijedeća pravila za prevođenje veza:

Pravilo 2. - prevođenje veze 1:N kod koje je strana N totalna

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.

Pravilo 3. - prevođenje veze 1:N kod koje je strana N parcijalna

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.

Pravilo 4. - prevođenje veze N:M

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.

Pravilo 5.- prevođenje veze 1:1 koja je s obje strane totalna

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

2.1 PROGRAMSKI ALATI ZA MODELIRANJE PODATAKA

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.

Mi ćemo upoznati osnove jednostavnog alata dbDesigner.

2.2 Osnove alata dbDesigner

Korisnički interfejs

Korisnički interfejs se zasniva industrijskom standardu tlocrtnog programa što čini


upotrebu ovog programa i samo kreiranje modela baze podataka veoma jednostavno.

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

Podešavanje imena tabele i kolona


Unesite ime tabele ( npr. proizvod ) i pritisnite Enter. Selektor će biti prebačena na prvu kolonu. Biti
će imenovana id + ime tabele. Da bi ste prihvatili ovaj naziv pritisnite Enter ili promjenite kolonu u
novo ime kolone/tabele. Sada se pokazivač prebacio na sljedeću kolonu. Unesite ime kolone i isto
uradite i za ostale kolone tabele. Pritisnite Esc nakon što posljednju kolonu imenujete. Redosljed
kolona može biti promjenjen koristeći Drag'n'drop. Lijevi klik na ime kolone, držite lijevi klik miša i
promjenite redosljed.

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

Primarni ključ, AutoIncrament i zastavice

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.

Da bi se vrijednost kolone automatski povećavala nakon svakog unosa kliknemo na odgovarajući


red u Al koloni.

Svaki tip podatka ima


specifične zastave.
One mogu biti
aktivirane i
deaktivirane klikom.

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.

Kreiranje indexa tabele

Indeksi omogučavaju brzi pristup podacima ako je poznata


vrijednost neke kolone tabele. Npr. ako najčešće pristupamo
podacima po broju u dnevniku, onda je veoma korisno kreirati
indeks po toj koloni. DBMS automatksi kreira indeks po koloni
koja je primarni ključ.

Kliknite na Tab index a zatim na plus ikonu da bi dodali


novi index. Pojaviće se dijalog u koji treba upisati ime
indexa i zatim kliknite na return. Novi index je kreiran.
Sada odaberite tip indexa.

Da bi dodali kolonu u index povucite kolonu dole do


kolone ListBox i „spustite je“.možete promijeniti
redoslijed kolona povlačenjem kolona jednu ispred ili iza druge. Također možete brisati kolone
pritiskom na dugme Delete.

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.

Dvostruki klik na relaciju da bu unijeli njeno ime.


Zatvorite Editor relacija da bi spremili
promjene na modelu.

2.3 DBMS MySQL

Uvod

MySQL je system za upravljanje bazama podataka (RDBMS – Relational Database Management


System) . Funkcioniše kao server koji omogućava istovremeni pristup više korisnika podacaima i
organizaciju podataka u više baza podataka.

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.

MySQL napisan je u programskim jezicima C i C++. Neke od komponenti napisane su drugim


programskim jezicima. Postoje verzije za različite operativne sisteme, kao što su Linux, Mac OS X,
Open Solaris, Symbian, Microsoft Windows i druge.

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.

2.4 MySQL Workbench


MySQL Workbench je skup alata namjenjenih administratorima baze podataka i developerima, a
kojeg čine slijedeći alati za:

Dizajniranje i modeliranje baze podataka (Database Design & Modeling)


Kreiranje i izvršavanje SQL naredbi (SQL Development)
Adminstracija baze (Database Administration)

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.

Osnovne osobine alata iz ovog paketa su:

1. SQL Development – Omogućava kreiranje i održavanje konekcije na server baze podataka.


Pored podešavanja parametara konekcije, omogućava izvršavanje SQL upita nad bazom.
2. Data Modeling – Omogućava kreiranje modela šeme baze podataka pomoću grafičkih
alata, modifikovanje postojeće šeme kao i kreiranje nove šeme baze podataka.

21 |
3. Server Administration – Omogućava kreiranje i administriranje instance baze podataka.

2.5 Kreiranje konekcije


MySQL Workbench omogućava rad direktno nad bazom podataka. Stoga je najprije potrebno
kreirati konekciju na bazu. Kada se kreira konekcija i uspostavi veza sa bazom podataka, moguće je
direktno izvršavanje SQL naredbi kao i administriranje baze.

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.

2.6 Data Modeling


1. Kreiranje modela podataka počinje izborom “Create new EER Model”

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.

Sada koristimo ikonu Table da bismo dodali još jednu tabelu

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.

Figure 4.6 Getting Started Tutorial - Review Script

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

3.1 Uvod u programski jezik SQL


SQL je programski jezik 4. generacije. Osnovne osobine jesu da se lako uči i jednostavno koristi.
Komunikacija korisnika sa bazom podataka odvija se tako što korisnik zadaje komande nad bazom
podataka. Pomoću komandi SQL-a korisniku je omogućeno:

 kreiranje objekata baze podataka,


 pristup podacima u bazi,
 kreiranje korisnika i njihovih prava,
 pravljenje sigurnosnih kopija podataka,
 uvoz/izvoz podataka u/iz baze, itd.

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.

Američki nacionalni institut za standardizaciju (American National Standards Institute, ANSI)


priznaje programski jezik SQL i objavljuje standarde za ovaj progrmski jezik. Sistemi za upravljanje
bazama podataka (Data Baze Management System, DBMS) uvažavaju ovaj standard, ali i ugražuju
dodatke. Stoga u različitim DBMS sistemima možemo sresti dodatne komande i osobine koje nisu
dio ovog standarda.

Komande programskog jezika SQL možemo zadavati na različite načine:

 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:

SELECT * FROM Persons

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).

Za manipulisanje podacima koriste se naredbe:

 SELECT - omogućava pristup podacima u bazi


 DELETE – omogućava brisanje podataka
 INSERT INTO – omogućava upisivanje podataka u bazu

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:

 CREATE DATABASE – kreiranje baze podataka (šeme baze podataka)


 CREATE USER – kreiranje korisnika
 ALTER DATABASE – izmjena baze podataka
 CREATE TABLE – kreiranje tabele
 ALTER TABLE - izmjena tabele
 DROP TABLE - brisanje tabele
 CREATE INDEX – kreiranje indeksa
 DROP INDEX - brisanje indeksa

3.2 Zaštita podataka u bazi

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:

Najavljena aktivnost Termin Mjesto održavanja Razred Nastavnik


Roditeljski sastanak 15.03.2012. Kabinet 15 4t1 Bijedić B.
Roditeljski sastanak 16.03.2012, 17 h Kabinet 15 4t1 Bijedić B.
Roditeljski sastanak 16.03.2012, 18 h Kabinet 25 4t1 Bijedić B.
Informacije Srijeda, 18 h Soba za roditelje 4t1 Pedagog škole

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....

Kako onemogučiti greške u bazi?

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.

Učenik može: Učenik ne može:

Korisnici (database users)


Osnovni nivo zaštite podataka u bazi realizuje se preko koncepta korisnika baze podataka (database users).

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:

SET PASSWORD FOR ‚root‘@’localhost’ = PASSWORD(‘b45tw4324’)

Username korisnika Localhost ako je baza na istom računaru


za kojeg definišemo lozinku gdje zadajemo naredbu, ili IP adresa
računara na kome je baza

29 |
U Oracle DBMS, naredba bi bila:

ALTER USER root IDENTIFY BY ‘new_password’;

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!

Nema glupih pitanja


Q: Još uvijek mi nije jasno šta je “localhost”?!!?
A: Kada se konektujete na bazu, morate znati „Hostname“ računara na kome je baza instalirana. Ako
zadajete SQL naredbe sa istog računara na kome je instalirana baza (DBMS kao što je MySQL) onda je
„Hostname“= „localhost“ ili 127.0.0.1. To ćete najvjerovatnije koristi kod kuće

Q: A šta ako se konektujem sa računara na kome nije instalirana baza?


A: Takav pristup naziva se „remote access“. Tada morate znati IP adresu računara na kome je instalirana
baza. Piitate administratora baze podataka koja je IP adresa računara na kome je baza.

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.

CREATE USER elsie IDENTIFY BY ‚lozinka_u_apostrofima‘;

username password

Kada kreiramo korisnika na ovaj način, korisnik kojem bismo dali ove podatke ne bi mogao uraditi ništa nad
bazom!

Dodjela prava korisnicima


Za razliku od korisnika root, koji može uraditi „sve“, korisnik „Elsie“ kreiran ranije ne dobiva nikakva
prava nad bazom. Dodjela prava korisniku realizuje se pomoću naredbe GRANT. Pomoću ove
naredbe možemo potpuno kontrolisati šta korisnik radi nad podacima u tabelama i kolonama
tabele.

Pogledajmo ilustraciju:

Određeni korisnici mogu mijenjati određene tabele

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.

Pristup podacima odrežene tabela je omogućen samo odabranim korisnicima

Svi osim grumpy može zadavati SELECT nad tabelom talking_animals.

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

Naredba GRANT omogućava dodjelu prava (permission) korisnicima baze podataka.

Pogleadajmo primjer:

Korisnik UCENIK dobiva pravo da čita


podatke (SELECT) iz … ...tabele OCJENE

GRANT SELECT ON ocjene TO ucenik;

Korisnik treba pristup i ostalim tabelama u bazi. Za svaku pojedinačnu tabelu trebamo posebnu GRANT
naredbu. Npr.

GRANT SELECT ON activities TO elsie;


GRANT SELECT ON location TO elsie;
GRANT SELECT ON city TO elsie;

Uz naredbu GRANT možemo koristiti i opciju “WITH GRANT OPTION”. Ovom opcijom dodjeljujemo pravo
dodjele odabranog prava drugim korisnicima. Npr. posmatrajmo naredbu:

GRANT SELECT ON activities TO elsie WITH GRANT OPTION;

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

1. Zadate su GRANT naredbe. Objasni efekat ovih naredbi

32 |
2. Napiši odgovarajuću GRANT naredbu.

Korisnik doc treba pravo pristupa podacima u tabeli chores.

Korisniku sleepy treba omogučiti brisanje iz tabele talking_animals. Takožer, on ovo


pravo može dati drugima

Dodjelite sva prava svima na tabelu chores.


(GRANT ALL….)

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

GRANT DELETE ON chores TO doc WITH GRANT OPTION.

3. GRANT naredbom možemo dodjeliti pravo nad odabranom kolonom tabele,


GRANT SELECT(chore_name) ON chores TO dopey;

4. Jednom GRANT naredbom možemo dodjeliti vise različitih prava nad jednom tabelom. Samo
navedemo listu prava razdvojenih zarezom.

GRANT SELECT, INSERT ON talking_animals TO dopey:

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.*

GRANT SELECT ON woodland_cottage.* TO doc;

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.

Korisnik UCENIK dobiva pravo da čita


podatke (SELECT) iz … ...tabele OCJENE

GRANT SELECT ON ocjene TO ucenik;

Korisnik UCENIK ukidamo pravo da čita


podatke (SELECT) iz … ...tabele OCJENE

REVOKE SELECT FROM ocjene TO ucenik;

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.

Pretpostavimo da root promijeni mišljenje i uskrati pravo brisanja korisniku sleepy.

REVOKE DELETE ON chores FROM sleepy;

Ovim će automatskibiti ukinuto pravo 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.

Npr. prethodnom naredbom oduzimamo pravo DELETE korisniku sleepy, a to se odražava in a


korisnika sneezy.

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: Ima li još sličnih, besmislenih GRANT naredbi?


A: Gotovo sve GRANT naredbe nad kolonom su besmislene. Jedino ima smisla dodjeljivati SELECT
privilegiju nad kolonom. I UPDATE….

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 ?

A: U MySQL-u da. To je naredba GRANT SELECT ON *.* TO elsie;


Q: CASCADE je podrazumijevana vrijednost u REVOKE naredbi. Tačno?
A: Tačno, u MySQLu, ali, opet, ovisi o DBMS kojeg koristimo.
Q: Šta ako zadamo REVOKE za privilegiju koju korisnik uopšte nije imao?
A: Poruka o grešci će to jasno obznaniti – bićete obaviješteni da privilegija nije dodjeljena.

38 |
VJEŽBA

Zadatak je da budete Greg i da zaštite bazu tako da je korisnici ne mogu


upropastiti.

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

Frank: Ja sam odgovoram za pronalaženje


interesantnih poslova. Nikada ništa ne upisujem
u bazu, ali ponekad brišem podatke kada je
otvorena pozicija (posao) popunjena. Ponekad
pogledam podatke u my_contacts.

Jim: Ja unosim sve podakte u bazu. Stvarno to


dobro radim, jer baza mi ne dozvoljava da za pol
upišem xxx, mogu upisati samo M ili Z (kako,
razmišljaj). Pored unosa, ja i mijenjam podatke.
Učim brisati podatke, ali Greg mi ne
dozvoljava...

Joe: Greg me upravo zaposlio da radim na


promanaženju poslova za zainteresovane
klijente. Želi intergrisati podatke o kontaktima
sa zaposlenim u web stranicu. Ja sam više web
developer nego SQL guy, ali jednostavne
poslove mogu uraditi. Svakako SELECT mogu
uraditi, INSERT baš i ne.

Pogledaj bazu koju je Greg napravio i napiši naredbe kako slijedi.

1. Napišti naredbu kojom bi korisniku root promjenili lozinku.

2. Napiši 3 naredbe kojima bi kreirali tri korisnika za Gregovu bazu.

3. Napiši potrebne GRANT naredbe kako bi svaki od ova tri korisnika mogao obavljati svoj posao.

3.3 DDL naredbe

Nova tabela dodaje se u bazu pomoci „Create table“ naredb, iza nje navodimo ime tabele a zatim
unutar zagrada specifikaciju kolona tabele.

CRATE TABLE table_name


(column_name1 definitio(s),
column_name2 definition(s),
column_name3 definition(s),
...
PRIMARY KEY (column1, column2, ...)
)
39 |
ENGINE = InnoDB;

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“

USE MySample DB;

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.

CREATE TABLE customer


( customer_id INT NOT NULL AUTO_INCREMENT,
customer_name CHAR(30) NOT NULL,
customer_address CHAR(40),
PRIMARY KEY (customer_id)
)
ENGINE= InnoDB;

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.

CREATE TABLE ucenik

( razred_id INT NOT NULL,

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.

Definisanje podrazumijevanje vrijednosti kolone (Default Value):

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“:

CREATE TABLE sales


( sales_number INT NOT NULL,
sales_quantity INT NOT NULL DEFAULT 1,
sales_description CHAR (20),
PRIMARY KEY (sales_number)
)
ENGINE= InnoDB;
Ako nije specificirana „quantity“ prilikom unosa novog reda SQL, MySQL će unijeti
podrazumijevanu vrijednost 1.

Database Engine („Mašina baze podataka):

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:

InnoDB – spada u kategoriju „transaction_safe“ baza podataka.

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 i birsanje kolona

Slijedeća naredbe dodaje kolone „product_description“ u tabelu „products“


42 |
ALER TABLE product ADD product_descritption CHAR

Ako treba dodati kolonu i odrediti da bude na poziciji 1, zadajemo naredbu:

ALER TABLE product ADD product_descritption CHAR FIRST;

Ako želimo dodati kolonu iza određene kolone koristimo naredbu:

ALER TABLE product ADD product_descritption CHAR AFTER product_id

Kolona se može izbrisati iz tabele pomoću opcije „drop column“:

ALTER TABLE products DROP COLUMN product_desc ;

Promjena imena tabele i kolone:

Za promjenu imena tabele koristimo naredbu „rename table“. Npr:

RENAME TABLE products TO proizvodi

Opciono, možemo koristiti i sledeću naredbu :

ALTER TABLE products RENAME proizvodi

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:

ALTER TABLE products CHANGE product_desc product_description CHAR (40);

Izmjena tipa podataka kolone:

Izmjena tipa podatka kolone realizuje se pomoću „modify“ opcije. Npr:

ALTER TABLE products MODIFY product_desc INT;

Brisanje tabele:

Tabelu brišemo pomoću „drop table“ naredbe. Npr:

DROP TABLE products

Vježba 1:

Kreirati tabelu učenik sa kolonama: ID (cio broj, obavezno polje, auto increment)

Prezime (char 30)

Ime (char 20)

Adresa (char 50)

Korištenjem odgovarajuće DDL naredbe uraditi sledeće:

u tabelu učenik dodati kolonu „telefon“ (char 20)

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:

Kreirati tabelu ucenik, sa atributima: ID (sa opcijom za automatsko popunjavanje, „prezime“


karakter polje sa maksimalno 30 karatkera i podrazumijevanom vrijednošću „Zukic“. „redni-broj“
cjelobrojna vrijednost. Primarni ključ tabele je kolona ID

CREATE TABLE ucenik


( ID INT AUTO_INCREMENT NOT NULL,
Prezime char(30) DEFAULT VALUE='Zukic',
Redni_broj INT,
PRIMARY KEY(ID)
) ENGINE=InnoDB;
Unos podataka u bazu podataka:

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.

Unos jednog reda:

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:

INSERT INTO products


( id,
name,
description,
quantity)
VALUES
( NULL,
'HP Proliant SG4',
'server',
100);
U prethodnoj naredbi za „id“ određujemo vrijednost NULL pod pretpostavkom da je pri kreiranju
tabele kolona „id“ definisana sa AUTO_INCREMENT opcijom, navođenjem NULL u insert naredbi
prepuštamo bazi podataka da automatski generiše jedinstvenu vrijednost za ovu kolonu

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.

Dodavanje više redova u tabelu:

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:

INSERT INTO products


( id,
name,
description,
quantity)
VALUES
( NULL,
'HP Proliant SG4',
'server',
100) ,
(NULL,
'HP Deskjet',
'Printer',
200),
(NULL,
'HP Probook',
'laptop',
3);

Umetanje redova pmoću SELECT naredbe:

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“ :

INSERT INTO new_products


( id,
name,
description,
quantity)
SELECT
(id,
name,
description,
quantity)
FROM old_products;

45 |
Primjeri

Izmjena podataka u tabeli

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.

Ako želimo izmjeniti sve podatke tabele navodimo:

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,

name='velika crvena cipela',

WHERE id=12134;

Ako želimo svim slogovima u tabeli odrediti količinu 13 zadajemo naredbu:

UPDATE products

SET quantity=13;

Brisanje podataka iz tabele:

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:

DELETE FROM products

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

3.4 Kreiranje upita nad bazom podataka

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:

SELECT product_name FROM products

Prikazuje se lista svih naziva proizvoda upisanih u tabelu „products“

U opštem slučaju iza SELECT navodimo listu imena kolona odvojenih zarezom npr:

SELECT productName, productDescription FROM products

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.

SELECT * FROM products LIMIT 10, 15

Ovom naredbom bit će prikazani slogovi od 11 do 25

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.

SELECT * FROM customers ORDER BY customerName

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:

SELECT * FROM customers ORDER BY customerName DESC

Ukoliko želimo sortiranje po više kolona navodimo ih u listi iza klauzule „ORDER BY“. Npr:

SELECT * FROM customers ORDER BY city, customerName

Ovom naredbom određujemo da se najprije izvrši sortiranje po koloni city, a unutar toga po koloni
„customerName“

Definisanje kriterija pretraživanja (WHERE):


Dosadašnje SELECT naredbe pristupale su svim podacima (svim redovima) tabele. U praksi
najčešće pristupamo samo odabranim redovima što postižemo pomoću klauzule WHERE. U opštem
slučaju WHERE koristimo na slijedeći način:

SELECT column(s) FROM table WHERE column=value

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:

SELECT productName, buyPrice FROM products WHERE buyPrice <50

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:

SELECT * FROM customers WHERE state IS NULL

48 |
Prethodnom naredbom ispisuju se podaci o kupcima kod kojim nije upisana vrijednost u kolonu
„state“

Vježbe:

1. Napisati naredbu kojom ispisujemo jedinstvene vrijednosti iz kolone ciy tabele


customers, sortirane u opadajucem redoslijedu po istoj toj koloni

SELECT DISTINCT city FROM customers ORDER BY city DESC;

2. Modifikovati prethodnu naredbu tako da se ispisuju podaci o korisnicima kod kojih u


polju „country“ pise USA

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“

SELECT * FROM customers WHERE state IS NOT NULL;

4. Napisati naredbu kojom iz tabele „customers“ brišemo sve redove kod kojih je vrijednost
polja „creditLImit“ manja od 100.

DELETE FROM customers WHERE creditLimit<100;

Operatori AND, OR, NOT, IN, LIKE:

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:

a) koristiti operator NOT:

SELECT * FROM products WHERE NOT (buyPrice >=100 AND buyPrice <=200)

b) koristenjem operatora OR

SELECT * FROM products WHERE buyPrice <100 OR buyPrice >200

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:

SELECT * FROM product WHERE (productCode=x1 OR productCode=x2)

AND buyPrice>100.

Operator IN omogućava provjeru da li se vrijednost nekog polja poklapa sa nekom od


vrijednosti koje navodimo iza operatora IN. Npr:

SELECT * FROM product WHERE productLine IN ('Truck', 'Cars', 'Motorcycle')

Ova naredba ima isto značenje kao:

SELECT * FROM product WHERE productLIne='Truck' OR productLine=, 'Cars' OR


productLine='Motorcycle';

Ako želimo izlistati proizvode koji ne pripadaju ni jednoj navedenoj proizvodnoj liniji onda
koristimo operator NOT IN

SELECT * FROM product WHERE productLine NOT IN ('Truck', 'Cars', 'Motorcycle')

Korištenje operatora LIKE:

Operator LIKE koristimo za poređenje stringova u kombinaciji sa zamjenskim karakterima _


ili %. Zamjenski karakter „_“ zamjenjuje jedan karakter na mjestu na kome se navede. Znak „%“
zamjenjuje bilo koji skup karaktera, počevši od pozicije na kojoj je naveden. Zajmenski karakteri
mogu se navesti na početku, unutar ili na kraju stringa sa kojim se vrši poređenje. Npr: ako imamo
kolonu „godina“ u tabeli „događaji“i želimo ispisati sve redove o događajima koji su se desili 13.
Godine nekog vijeka.

SELECT * FROM događaj WHERE godina LIKE '__13'

Ako želimo ispisati sve slogove kod kojih productName počinje karakterima „BMW“
zadajemo naredbu:

SELECT * FROM products WHERE productName LIKE 'BMW%'

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:

SELECT * FROM products WHERE productName LIKE '%BMW%'

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“

SELECT * FROM product WHERE productName LIKE '19__' AND '%Dodge%'

Primjer

3.5 Spajanje tabela (join)

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.

SELECT t1.*, t2.* FROM t1,t2;

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.

U opštem slučaju spajanje tabela realizuje se na sledeći način:

SELECT tabel1.column1, table2.column2 FROM table1, table2 WHERE


table1.column1=table2.column2;

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

SELECT employees.lastName, employees.FirstName, offices.city, offices.phone

51 |
FROM employees, offices

WHERE employees.officeCode=Offices.officeCode;

Prethodnom naredbom iz tabele employees čitamo vrijednosti kolona LastName i


FirstName a iz tabele Offices vrijednosti City i Phone do kojih dolazimo putem stranog ključa
OfficeCode u tabeli Employees. Isti efekat postižemo i korištenjem sledeće naredbe:

SELECT e.lastName, e.FirstName, o.city, o.phone

FROM e.employees, o.offices

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.

SELEECT o.orderNumber, o.orderDate, p.productName, od.quantityOrdered, od.priceEach

FROM orders.o, orderDetails.od, products.p

WHERE o.OrderNUmber=od.OrderNumber

AND od.ProductCode=p.ProductCode

Prethodnom naredbom povezujemo tri tabele u okviru WHERE klauzule moramo


obezbijediti uslov njihovog međusobnog povezivanja kako ne bi smo dobili „Kartezijev proizvod“
tabela. Do sada koristene SELECT naredbe prikazuju samo one redove gdje postoji odgovarajuća
vrijednost u obje tabele. Moguće je napraviti upite u kojima određujemo selektovanja svih
podataka jedne tabele, pa i u slučaju da u drugoj tabeli nemamo vrijednsosti po kojima vršimo
selektovanje. Tako spajanje nazivamo „vanjsko spajanje“ (alter join). Npr. Ako želim ispisati
podatke o korisnicima i narudžbama a da pri tome želimo vidjeti i korisnike koji nemaju narudžbe,
onda pravimo vanjsko (alter) spajanje:

SELECT c.*, o.*

FROM customers

LEFT JOIN (orders)

ON c.customerNumber = o.customerNumber

3.6 MySql funkcije

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:

SELECT kolicina*cijena AS iznos FROM stavke_narudzbe

52 |
Prethodnom naredbom određujemo da se izracuna vrijednost izraza (cijena*kolicina) te da se toj
koloni pridruzi naziv „iznos“.

Izraze možemo navesti i iza „WHERE“:

SELECT kolicina*cijena AS iznos FROM stavke_narudzbe WHERE (kolicina*cijena)>50

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).:

SELECT Concat (prezime, ime) AS ime FROM ucenik

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:

SELECT Concat (prezime, ', ', ime) AS ime FROM Ucenik

Prethodnim izrazom izmedju prezime i ime, ubacujemo znak „ , „.

CONCAT je jedna od funkcija za rad sa stringovima. Generalno Sql funkcije možemo podijeliti u 4
kategorije:

Funkcije za rad sa stringovima


Matematicke funkcije
Funkcije za rad sa datumom i vremenom
Agregatne funkcije

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

U slučaju greške (Error) sve matematičke funkcije vraćaju NULL vrijednost.

Funkcija ABS():

Funkcija ABS() vraća apsolutnu vrijednost od X:

MySql-> SELECT ABS(2);

----> 2

MySql-> SELECT ABS(-32);

----> 32

MySql -> SELECT ABS(-123);

----> 123

Ovu funkciju moguće je koristiti i sa BIGINT varijablama.

Funkcija ACOS(X):

Funkcija ACOS() vraća vrijednost arcus cos od X. U slučaju da je X izvan opsega -1 do 1


funkcija će vratiti NULL vrijednost

MySql-> SELECT ACOS(1);

----> 0

MySql-> SELECT ACOS (1.0001);

----> NULL

MySql-> SELECT ACOS(0);


54 |
----> 1.5707963267949

Funkcija ASIN(X):

Funkcija ASIN() vraća vrijednost arcus sin od X. U slučaju da je X izvan opsega -1 do 1


funkcija će vratiti NULL vrijednost

MySql-> SELECT ASIN (0.2);

----> 0.20135792079033

MySql-> SELECT ASIN (1);

----> 1.57079633

Funkcija ATAN (X):

Funkcija ATAN() vraća vrijednost arc tan od X.

MySql-> SELECT ATAN(2);

----> 1.1071487177941

MySql-> SELECT ATAN (-2);

----> -1.1071487177941

Funkcija ATAN(Y,X); ATAN2(Y,X):

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.

MySql-> SELECT ATAN(-2,2)

----> -0.78539816339745

MySql-> SELECT ATAN2(PI(), 0);

----> 1.5707963267949

Funkcija „division“ /:

Funkcija dijeljenja (/):

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.

Funkcija SELECT radians('x')

Vraca vrijednost argumenta x konvertovanog iz stepeni u radijane (Napomena π radiana jednako je


180 stepeni

Select RADIANS(PI())
mysql->0.0548311355616075

Funkcija SELECT ime_kolone RAND () FROM ime_tabele

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.

SELECT I, RAND() from TSELECT i, RAND() FROM t;

+------+------------------+

| i | RAND() |

+------+------------------+

| 1 | 0.61914388706828 |

| 2 | 0.93845168309142 |

| 3 | 0.83482678498591 |

+------+------------------+

Funkcija SELECT ROUND (odredjeni decimalni broj, broj decimala)

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

Funkcija SELECT SIGN(određeni realni broj)

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)

Vraca nam sinus određenog ugla (gdje je ugao napisan u radijanima)

Select SIN(PI())
Mysql->1.22464679914735e-016

Funkcija SELECT SQRT(određeni broj)

Vraca nam kvadratni korijen unesenog broja

SELECT SQRT(4)
mysql->2

Funkcija SELECT TAN(određeni ugao)

Vraca nam tangenz određenog ugla (gdje je ugao napisan u radijanima)

Select TAN(PI())
mysql->-1.22464679914735e-016

Funkcija SELECT vrijednost1*vrijednsot2*…*vrijednostN

Vraca nam proizvod na osnovu upisanih zadanih vrijednosti

SELECT 2*2*3

Mysql->12

Funkcija SELECT TRUNCATE((odredjeni decimalni broj, broj mjesta da zaorkuzi)

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 TRUNCATE(1234, -2)


mysql->1200

Funkcija SELECT –vrijednost neka

Vraca nam suprotnu vrijednsot određene vrijednosti

SELECT --3
mysql->

Funkcija *CEILING()

mysql> SELECT CEILING(1.23);

-> 2

mysql> SELECT CEILING(-1.23);

57 |
-> -1

Funkcija vraća najmanju cjelobrojnu vrijednost ne manju od unešene(x).

* CEIL()

Je sinonim za CEILING()

Funkcija * COS()

mysql> SELECT COS(PI());

-> -1

Daje kosinus x gdje je x dat u radijanima.

Funkcija * COT()

mysql> SELECT COT(12);

-> -1.5726734063977

mysql> SELECT COT(0);

-> NULL

Daje vrijednost kotangens x.Ako je vrijednost 0 daje NULL vrijednost.

Funkcija * DEGREES()

mysql> SELECT DEGREES(PI());

-> 180

mysql> SELECT DEGREES(PI() / 2);

-> 90

Konvertuje radijane u stepene.

Funkcija * DIV()

Cjelobrojno dijeljenje.

58 |
mysql> SELECT 5 DIV 2;

-> 2

Funkcija * EXP()

mysql> SELECT EXP(2);

-> 7.3890560989307

mysql> SELECT EXP(-2);

-> 0.13533528323661

mysql> SELECT EXP(0);

-> 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)“

mysql> SELECT RADIANS(90);

-> 1.5707963267949

Funkcija PI()

Vraća vrijednost π (pi )

mysql> SELECT PI();

-> 3.141593

mysql> SELECT PI()+0.000000000000000000;

-> 3.141592653589793116

Funkcija POW(x,y),POWER(x,y)

Vraća vrijednost X i podiže na vrijednost Y

mysql> SELECT POW(2,2);


59 |
-> 4

mysql> SELECT POW(2,-2);

-> 0.25

POWER je sinonim za POW()

Funkcija Modulo operator ( %) „MOD(N,M),N%M,N MOD M

Vraća ostatak N podjeljen sa M.

mysql> SELECT MOD(234, 10);

-> 4

mysql> SELECT 253 % 7;

-> 1

mysql> SELECT MOD(29,9);

-> 2

mysql> SELECT 29 MOD 9;

-> 2

Ova funkcija je siguran za uporabu s BIGINT vrijednosti

MOD- također radi i na vrijednostima koje su razlomljeni dio i vraća ostatak nakon dijeljenja.

mysql> SELECT MOD(34.5,3);

-> 1.5

MOD (N, 0) vraća NULL

Funkcija Addition operator (+)

mysql> SELECT 3+5;

-> 8

Funkcija Minus operator

mysql> SELECT 3-5;

60 |
-> -2

61 |

You might also like