Baze Podataka

61
1 | E E L L E E K K T T R R O O T T E E H H N N I I Č Č K K A A Š Š K K O O L L A A T T U U Z Z L L A A B B A A Z Z E E P P O O D D A A T T A A K K A A 4 4 D D O O W W H H A A T T Y Y O O U U L L O O V V E E L L O O V V E E W W H H A A T T Y Y O O U U D D O O S S E E L L M M A A K K R R A A J J I I N N O O V V I I Ć Ć , , D D I I P P L L . . I I N N G G . . E E L L . .

description

Skripta sa osnovama iz baza podataka

Transcript of Baze Podataka

Page 1: Baze Podataka

1 |

EEELLLEEEKKKTTTRRROOOTTTEEEHHHNNNIIIČČČKKKAAA ŠŠŠKKKOOOLLLAAA TTTUUUZZZLLLAAA

BBBAAAZZZEEE PPPOOODDDAAATTTAAAKKKAAA 444

DDDOOO

WWWHHHAAATTT

YYYOOOUUU LLLOOOVVVEEE

LLLOOOVVVEEE

WWWHHHAAATTT

YYYOOOUUU

DDDOOO

SSSEEELLLMMMAAA KKKRRRAAAJJJIIINNNOOOVVVIIIĆĆĆ,,, DDDIIIPPPLLL... IIINNNGGG...EEELLL...

Page 2: Baze Podataka

2 |

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

Page 3: Baze Podataka

3 |

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

Page 4: Baze Podataka

4 |

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

Page 5: Baze Podataka

5 |

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

Page 6: Baze Podataka

6 |

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

Page 7: Baze Podataka

7 |

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

Page 8: Baze Podataka

8 |

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

Page 9: Baze Podataka

9 |

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

UCENIK

ODJELJENJE

NASTAVNIK

PREDMET

Ucenik_odjeljenje

_odjeljenje

Odjeljenje_

predmet

razrednik

1

n

1

1 n

m

Page 10: Baze Podataka

10 |

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

Page 11: Baze Podataka

11 |

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.

Page 12: Baze Podataka

12 |

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

Page 13: Baze Podataka

13 |

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.

Page 14: Baze Podataka

14 |

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.

Page 15: Baze Podataka

15 |

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.

Page 16: Baze Podataka

16 |

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

Page 17: Baze Podataka

17 |

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.

Page 18: Baze Podataka

18 |

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

Page 19: Baze Podataka

19 |

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.

Page 20: Baze Podataka

20 |

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

Page 21: Baze Podataka

21 |

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.

Page 22: Baze Podataka

22 |

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”

Page 23: Baze Podataka

23 |

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.

Page 24: Baze Podataka

24 |

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

Page 25: Baze Podataka

25 |

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

Page 26: Baze Podataka

26 |

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.

Page 27: Baze Podataka

27 |

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

Page 28: Baze Podataka

28 |

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

Page 29: Baze Podataka

29 |

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

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

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:

Page 30: Baze Podataka

30 |

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

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.

VJEŽBA 2

U školskoj bazi nemate prava kreirati nove/ mijenjati korisnike. Isprobajte Manage Security alat na kućnoj bazi!

Page 31: Baze Podataka

31 |

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‘;

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

username password

Page 32: Baze Podataka

32 |

Naredba GRANT, osnovni oblik

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

Pogleadajmo primjer:

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

Korisnik UCENIK dobiva pravo da čita

podatke (SELECT) iz … ...tabele OCJENE

Page 33: Baze Podataka

33 |

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)

Page 34: Baze Podataka

34 |

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;

Page 35: Baze Podataka

35 |

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.

GRANT SELECT ON ocjene TO ucenik;

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…

Korisnik UCENIK ukidamo pravo da čita

podatke (SELECT) iz … ...tabele OCJENE

Korisnik UCENIK dobiva pravo da čita

podatke (SELECT) iz … ...tabele OCJENE

Page 36: Baze Podataka

36 |

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.

Page 37: Baze Podataka

37 |

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.

Page 38: Baze Podataka

38 |

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.

Page 39: Baze Podataka

39 |

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

)

Page 40: Baze Podataka

40 |

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 .

Page 41: Baze Podataka

41 |

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

Page 42: Baze Podataka

42 |

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“

Page 43: Baze Podataka

43 |

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)

Page 44: Baze Podataka

44 |

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

Page 45: Baze Podataka

45 |

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;

Page 46: Baze Podataka

46 |

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,

Page 47: Baze Podataka

47 |

...

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

Page 48: Baze Podataka

48 |

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

Page 49: Baze Podataka

49 |

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

Page 50: Baze Podataka

50 |

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:

Page 51: Baze Podataka

51 |

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

Page 52: Baze Podataka

52 |

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

Page 53: Baze Podataka

53 |

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

Page 54: Baze Podataka

54 |

% 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);

Page 55: Baze Podataka

55 |

----> 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 (/):

Page 56: Baze Podataka

56 |

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

Page 57: Baze Podataka

57 |

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

Page 58: Baze Podataka

58 |

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

Page 59: Baze Podataka

59 |

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

Page 60: Baze Podataka

60 |

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

Page 61: Baze Podataka

61 |

-> -2