baze podataka ekis

89
Univerzitet u Nišu Elektronski fakultet Materijal za kurs Baze podataka Prof.dr Leonid Stoimenov Mr Aleksandar Stanimirović Dipl.inž Miloš Bogdanović Niš, 2009

Upload: nikola-veljkovic

Post on 30-Apr-2017

260 views

Category:

Documents


12 download

TRANSCRIPT

Page 1: Baze Podataka EKIS

Univerzitet u Nišu Elektronski fakultet

Materijal za kurs

Baze podataka

Prof.dr Leonid Stoimenov

Mr Aleksandar Stanimirović

Dipl.inž Miloš Bogdanović

Niš, 2009

Page 2: Baze Podataka EKIS
Page 3: Baze Podataka EKIS

Sadržaj 1 Baze podataka i relacioni model ............................................................................ 5

1.1 Uvod............................................................................................................... 5

1.2 Šta je sistem baza podataka?.......................................................................... 5

1.3 Šta je baza podataka? ..................................................................................... 6

1.4 Šta je Sistem za upravljanje bazama podataka (DBMS)?.............................. 7

1.4.1 Funkcije DBMSa.................................................................................... 7

1.4.2 Izbor DBMSa ......................................................................................... 8

1.5 Tipovi sistema baza podataka ........................................................................ 8

1.6 Modeli podataka........................................................................................... 10

1.6.1 Tipovi modela podataka....................................................................... 10

1.7 Relacioni model podataka............................................................................ 11

1.7.1 Zanimljivosti ........................................................................................ 11

1.7.2 Osnove relacionog modela................................................................... 11

1.7.3 NULL vrednosti atributa...................................................................... 12

1.7.4 Pregled osnovnih koncepata relacionog modela podataka .................. 12

1.7.5 Svojstva relacije ................................................................................... 13

1.7.6 Primer................................................................................................... 14

1.8 Ključevi relacije ........................................................................................... 15

1.9 Relacioni integritet ....................................................................................... 17

1.9.1 Referencijalni integritet i spoljni ključevi............................................ 17

1.10 Predstavljanje šema relacione baze podataka .............................................. 19

1.11 Preporuke kod izbora relacija ...................................................................... 20

1.12 Zadaci za vežbu............................................................................................ 21

2 SQL naredbe za kreiranje podataka ..................................................................... 25

2.1 Uvod............................................................................................................. 25

2.2 Baza podataka PREDUZEĆE ...................................................................... 26

2.2.1 Definicije tabela ................................................................................... 27

2.2.2 Test podaci za bazu podataka PREDUZEĆE ...................................... 29

2.3 SQL naredbe za kreiranje podataka ............................................................. 30

2.3.1 Tipovi podataka.................................................................................... 31

2.3.2 Ograničenja kolone .............................................................................. 32

2.3.3 Ograničenja tabele................................................................................ 33

2.3.4 Praktičan rad: Microsoft Access .......................................................... 36

Page 4: Baze Podataka EKIS

Baze podataka

4

3 Naredba SELECT – I deo..................................................................................... 42

3.1 Uvod ............................................................................................................. 42

3.2 Naredba SELECT......................................................................................... 42

3.3 Kaluzule SELECT i FROM ......................................................................... 43

3.4 Klauzula WHERE ........................................................................................ 45

3.5 Klauzula ORDER BY .................................................................................. 48

3.6 Aritmetičke funkcije i funkcije agregacije ................................................... 50

3.7 Praktičan rad: MS Access ............................................................................ 52

4 Naredba SELECT – II deo ................................................................................... 57

4.1 Uvod ............................................................................................................. 57

4.2 Klauzule GROUP BY i HAVING ............................................................... 57

4.3 Spajanje tabela.............................................................................................. 59

4.4 Dekartov proizvod (cross-join) .................................................................... 60

4.5 Unutrašnji spoj (inner-join).......................................................................... 61

4.6 Levi spoljašnji spoj (left-outer join)............................................................. 62

4.7 Desni spoljašnji spoj (right-outer join)......................................................... 62

4.8 Potpuni spoljašnji spoj (full-outer join) ....................................................... 63

4.9 Kombinovanje rezultata više SQL upita ...................................................... 64

5 SQL naredbe za manipulaciju podacima.............................................................. 67

5.1 Uvod ............................................................................................................. 67

5.2 Dodavanje novih podataka ........................................................................... 67

5.3 Ažuriranje podataka ..................................................................................... 70

5.4 Brisanje podataka ......................................................................................... 72

5.5 Modifikacija šeme relacione baze podataka................................................. 73

5.5.1 Brisanje tabele ...................................................................................... 73

5.5.2 Modifikacija tabela............................................................................... 73

6 Osnovne komponente Access aplikacija .............................................................. 75

6.1 Uvod ............................................................................................................. 75

6.2 Izrada i korišćenje formi (forms) ................................................................. 76

6.3 Izrada i korišćenje izveštaja ......................................................................... 80

6.4 Izrada i korišćenje makroa ........................................................................... 84

6.5 Access aplikacije .......................................................................................... 87

7 Literatura .............................................................................................................. 89

Page 5: Baze Podataka EKIS

1 Baze podataka i relacioni model

1.1 Uvod Moderne kompanije i institucije poseduju različite elektronske (računarske,

informacione) sisteme koje koriste kao podršku u procesu obrade informacija, koje nastaju kako unutar samog sistema tako i onih koji dolaze spolja. Takvi informacioni sistemi obezbeđuju kako osoblju tako i spoljnim korisnicima (kupci, dobavljači, agencije i sl) da pristupe informacijama kompanije sa različitim nivoima prioriteta i prava pristupa. Takvi sistemi mogu da budu sistemi za upravljanje dokumenata, sistemi za upravljanje projektima, e-mailing sistemi, intranet, internet stranice i sl. Takvi sistemi imaju jedan neizostavan deo – sistem baza podataka, koja čuva sve informacije koje se obrađuju i obezbeđuje pristup tim informacijama. Baze podataka su ključna komponenta kod standardnih informacionih sistema, ali i e-komerc i drugih Web zasnovanih aplikacija. Koriste ih oragnizacije i preduzeća od onih najmanjih do globalnih korporacija i milioni korisnika.

1.2 Šta je sistem baza podataka? Sistem baza podataka sadrži 4 osnovne komponente (slika 1-1):

(1) korisnici, (2) aplikacija nad bazom podataka, (3) sistem za upravljanje bazama podataka (Database Management System –

DBMS), i (4) baza podataka.

Slika 1-1 Komponente sistema baza podataka

Baza podataka predstavlja kolekciju povezanih podataka organizovanih u logičke celine predstavljene tabelama. Naredne sekcije ove lekcije su posvećene bazama podataka.

Page 6: Baze Podataka EKIS

Baze podataka

6

Sistem za upravljanje bazama podataka ili DBMS je računarski program (u praksi obično skup računarskih programa odnosno aplikacija) koji obezbeđuje kreiranje, obradu i administraciju nad bazom podataka. DBMS dobija zahteve u obliku upita (SQL upiti – naredne lekcije!) i prevodi te zahteve u odgovarajuće akcije nad bazom podataka. DBMS je obično jako velika, složena aplikacija koja obezbeđuje veliki broj funkcionalnosti za korisnika. U okviru ove lekcije možete da saznate više informacija o funkcijama DBMSa. Posle ove lekcije slede lekcije o SQL upitnom jeziku koji je glavna karika u procesu obrade podataka iz baza podataka.

Aplikacija nad bazom podataka predstavlja jednu ili više aplikacija (računarskih programa) koje predstavljaju posrednike između korisnika i DBMSa. Aplikacije mogu čitaju ili modifikuju podatke iz baze podataka tako što šalju SQL zahteve DBMSu koji vraća podatke (obično u obliku tabela). S druge strane, aplikacija na pogodan način prikazuje korisniku dobijene podatke. Lekcije u drugoj polovini kursa će vam obezbediti osnovne informacije o razvoju aplikacija nada bazama podataka.

Korisnici su četvrta komponenta sistema baza podataka. Oni preko formi aplikacije pregledaju, unose i modifikuju podatke iz baze podataka, a preko izveštaja mogu da prikažu ili štampaju rezultate pretraga i analiza podataka.

1.3 Šta je baza podataka? Baza podataka predstavlja kolekciju međusobno povezanih podataka koji su

organizovani u tabele i druge strukture podataka, a koriste za jednu ili više aplikacija.

Osnovna namena baze podataka je da bude repozitorijum (skladište) za podatke. Podaci mogu biti različitog tipa, tekstualni, numerički, slike, audio i video zapisi i sl.

Podaci u bazi podataka se čuvaju tako da je unos novih podataka, kao i čitanje i pretraživanje postojećih, je jednostavno, efikasno i ako je moguće, bez grešaka.

Iz „definicije“ baze podataka vidi se da je ona kolekcija međusobno povezanih podataka organizovanih u tabele. U ovoj „definiciji“ dve su činjenice od značaja – organizacija podataka u tabele i njihova međusobna povezanost.

Podaci u bazama podataka su organizovani u dvodimenzionalne tabele. Tabela može da ima više kolona, gde svaka kolona predstavlja neku osobinu ili atribut. Vrste tabele čine konkretni podaci, odnosno konkrente vrednosti osobina/atributa nekog objekta.

Na primer, jedna tabela može da sadrži informacije o učenicima. Kolone tabele mogu da definišu ime, prezime, godinu rođenja učenika, i sl. Vrste u takvoj tabeli su učenici, tako da se svaka vrsta odnosi na jednog učenika.

Koje će tabele da sadrži baza podataka zavisi od problema za koji treba realizovati bazu podataka. Na primer, baza podataka se može odnosti na školu, pa će u tom slučaju tabele biti o učenicima, nastavnicima, odeljenjima, i sl. Postupak izbora i definisanja tabela za bazu podataka je deo procesa modeliranja odnosno izgradnje modela podataka. Model podataka je detaljno objašnjen u sekciji nakon sekcije o DBMSu.

Međusobna povezanost podataka je ono po čemu se baza podataka razlikuje u odnosu na fajl sisteme (datoteke) i programe za unakrsna izračunavanja ko što je Excel. Povezanost podataka obezbeđuje značajne prednosti kod pretraživanja kada korisnik može da na osnovu veza izvuče mnogo više podataka. Na primer, ako postoji tabela koja čuva podatke o učenicima i tabela sa podacima o odeljenjima, veza između učenika i odeljenja može da obezbedi da odgovarajućim zahtevom (SQL upitom) izvučete sve učenike željenog odeljenja.

Page 7: Baze Podataka EKIS

Baze podataka i relacioni model

7

Baza podataka sadrži i tzv. metapodatke, odnosno podatke o samoj strukturi baze podataka. Metapodaci mogu da se odnose na imena tabela, imena kolona u svakoj tabeli, na podatke o korisnicima podataka, kao i raznim pomoćnim strukturama koje obezbeđuju brz prstup podacima (indeksi).

1.4 Šta je Sistem za upravljanje bazama podataka (DBMS)? Softverski sistem koji omogućava korisnicima definisanje, ažuriranje i kontrolu

pristupa bazi podataka naziva se sistem za upravljanje bazama podataka (eng. Database Management System - DBMS). DBMS obično nudi:

• Jezik za opis podataka (eng. Data Definition Language - DDL), koji omogućava korisnicima definisanje tipa i strukture podataka, kao i ograničenja nad podacima memorisanim u bazi podataka (naredne lekcije – CREATE TABLE naredba).

• Jezik za manipulaciju podacima (eng. Data Manipulation Language - DML), koji omogućava korisnicima umetanje, ažuriranje, brisanje i pretraživanje podataka iz baze podataka (naredne lekcije – SELECT, INSERT INTO, UPDATE naredbe).

• Jezik za definisanje načina memorisanja podataka (eng. Storage Definition Language - SDL), koji se koristi za specificiranje interne šeme baze podataka.

• Kontrolisani pristup bazi podataka, što uključuje različite funkcije i mehanizme za pristup podacima u bazi podataka

1.4.1 Funkcije DBMSa DBMS treba da obezbedi sledeće funkcije za kontrolisani pristup podacima u bazi

podataka:

• Sigurnosni sistem, koji onemogućava pristup bazi podataka neautorizovanim korisnicima (sigurnosni servisi), odnosno samo autorizovani korisnici mogu da koriste podatke u skladu sa definisanim privilegijama (autorizacioni servisi)

• Integritetni sistem, koji održava konzistentnost podataka u bazi podataka, odnosno da se sve promene dešavaju u skladu sa definisanim pravilima.

• Sistem za kontrolu konkurencije, koji dopušta deljivi pristup podacima iz baze podataka, tj da se obezbedi korektno ažuriranje podataka kada više korisnika pokušava istovremeno da vrši ažuriranja.

• Sistem za kontrolu oporavka baze podataka, koji omogućava rekonstrukciju prethodnog konzistentnog stanja u slučaju neke hardverske ili softverske neispravnosti.

• Katalog kome korisnici mogu pristupati, koji sadrži opis podataka koji su memorisani u bazi podataka.

• Podrška za transakcije, koja obezbeđuje korektno izvršavanje niza transakcija koje mogu biti međusobno zavisne; transakcija je skup operacija upisa i čitanja iz baze podataka koji se tretira kao celina tj ima svoj početak i kraj.

• Razne korisničke funkcije, kao što su import, eksport podataka, statističke analize, funkcije za nadgledanje,...

Page 8: Baze Podataka EKIS

Baze podataka

8

1.4.2 Izbor DBMSa Danas na tržištu postoji veliki broj proizvođača DBMSa koji nude sistema različitih

performansi i koji su namenjeni različitim segmentima tržišta. Koji DBMS ćete izabrati zavisi od tipa i veličine problema koji treba da rešite realizacijom aplikacije. U narednoj sekciji dat je kratak prikaz tipova sistema baza podataka.

1.5 Tipovi sistema baza podataka Tehnologija baza podataka se može koristiti za veliki broj aplikacija. Praktično danas

skoro i da ne možete da realizujete aplikaciju koja ne koristi neki sistem baza podataka za čuvanje podataka – bez obzira da li se radi o standardnim desktop aplikacijama, kao što su knjigovodstvene aplikacije, sistemi za upravljanje dokumentima, sistemi za banke, i sl, ili se radi o modernim Web aplikacijama koje obezbeđuju složenu funkcionalnost u distribuiranom okruženju, od on-line kupovine do raznih socijalnih mreža i sl. U zavisnosti od aplikacije, zahtevi prema bazi podataka mogu značajno da se razlikuju.

Jedan granični slučaj je da vam treba aplikacija za evidenciju kućnih troškova. U tom slučaju ona obično sadrži samo nekoliko tabela, gde svaka tabela može da ima samo nekoliko stotina vrsti. Aplikaciju, a samim tim i bazu podataka, koristite samo vi, odnosno samo jedan korisnik. Za takve sisteme se obično koristi naziv personalni sistemi baza podataka. Naravno, ovakvi sistemi mogu da se primene i na mnogo složenije aplikacije od evidencije kućnog budžeta. Na primer, mogu da pokriju i poslovane manjeg preduzeća, ili da podrže rad nekog Web sajta.

S druge strane, ako imate veliku kompaniju koja ima više organizacionih jedinica, gde svaka od njih ima sopstvene poslovne procese, neophodna vam je podrška sistema baza podataka koji može da obezbedi čuvanje i pretragu velike količine informacija na više distribuiranih lokacija. Takvi sistemi sadrže veliki broj tabela, a neke od njih mogu da imaju i nekoliko stotina hiljada vrsta i više. Podacima može konkurentno da pristupa veliki broj korisnika. Takvi sistemi obično moraju da rade 24 časa dnevno, 7 dana u nedelju. Takvi sistemi su poznati kao enterprise sistemi baza podataka.

Veličina problema, odnosno tip sistema baza podataka koji treba da primenite određuje izbor sistema za upravljanje bazama podataka. U slučaju da treba da realizujete parsonalni sistem, biće vam dovoljni Microsoft Access ili slični alati. U slučaju da treba razvijati veliki, enterprise sistem, logičan izbor je Oracle ili Microsoft SQL Server.

Naravno, između persoanalnih i enterpise sistema postoji širok opseg drugih sistema različitog nivoa složenosti u odnosu na količinu podataka koju treba obrađivati. Za takve sisteme možete da izaberete Access, SQL Server, Oracle ili neki drugi DBMS u zavisnosti od zahteva koji se postavljaju pred sistemom baze podataka, ali i u zavosnosti od cene i raspoloživih sredstava koje možete da potrošite za razvoj.

Komponente personalnog sistema baza podataka su prikazane na slici 1-2.

Kao što se vidi na slici 1-2, Microsoft Access ili neki drugi personalni DBMS, ima ulogu aplikacije i DBMSa. Microsoft je razvio Access tako da se korisniku obezbedi jednostavan razvoj personalnih sistema baza podataka. Korišćenjem Access-a, korisnik može da razvija aplikaciju ili da koristi funkcije DBMSa, često ne primećujući razliku između ova dva dela. Praktično, Access u sebi sadrži razvojno okruženje za aplikacije i DBMS. Na taj način skriveni su mnogi aspekti koji se odnose na „dešavanja iza scene“ u procesu obrade podataka. Iako u pozadini i ovaj tip DBMSa radi sa SQLom (pogledajte

Page 9: Baze Podataka EKIS

Baze podataka i relacioni model

9

naredne lekcije), korisniku je obezbeđen veliki broj čarobnjaka (wizard-a), čijom upotrebom možete da uradite mnogo toga. Na prvi pogled to predstavlja olakšanje, ali ako nešto od onoga što treba uraditi nije pokriveno čarobnjakom, kao i za bilo koji ozbiljni zahvat, moraćete da vidite šta je „iza scene“. Za razvoj bilo kog velikog sistema, korisnik mora da nauči i te skrivene tehnologije.

Slika 1-2 Personalni sistem baza podataka

Na slici 1-3. prikazan je enterpise sistem baza podataka. Zanimljivo je da su na slici prikazane aplikacije razvijane u različitim jezicima: Java, C#, HTML i ASP.NET. Takve aplikacije koriste velike DBMS sisteme za upravljanje bazom podataka. Nem čarobnjaka ili sličnih alata da pomognu u razvoju takvih sistema. Programeri moraju da napišu kod koji će da obezbedi pristup i pretraživanje podataka korišćenjem funkcija DBMSa.

Slika 1-3 Enterprise sistem baza podataka

Iako su početne prednosti koje pruža skrivanje tehnologija i složenosti DBMSa kod personalnih sistema jako zgodne, očigledno je da za razvoj velikih sistema neophodno mnogo šire znanje. Zbog toga će vam tehnologije prezentovane u narednim lekcijama dati mogućnost da razvijate i velike sisteme, ali i da personalne sisteme obogatite elementima koji nisu deo čarobnjaka.

Page 10: Baze Podataka EKIS

Baze podataka

10

1.6 Modeli podataka U procesu razvoja baze podataka najpre se formira model realnog sistema, tako što se

izaberu značajne karakteristike sistema koje se predstavljaju modelom.

Postoji mnogo različitih mogućnosti da se modelira sistem. U fazi modeliranja zadatak projektanta baze podataka je da otkrije funkcije koje sistem mora izvršavati, podatke koje mora pamtiti i obrađivati, informacije koje mora obezbeđivati za potrebe korisnika, sekvence u kojima se funkcije moraju izvršavati i u kojima se može pristupati podacima. Deo modela sistema koji se odnosi na podatke naziva se model podataka.

Realni svet (koji treba predstaviti modelom podataka) sastoji od objekata koji mogu biti stvarni ili apstraktni i koje nazivamo entitetima. Stvarni objekti mogu biti prirodni (na primer, reke, planine, mora, šume) ili veštački (na primer, telefonske ili vodovodne instalacije, putevi, vozila, zgrade). Apstraktni objekti mogu biti događaji (na primer, osiguranje vozila, popis stanovništva, prodaja robe, uplate na žiro račun, polaganje ispita, overa semestra, upis na fakultet), pojmovi (na primer, nauka, znanje, učenje, obuka, profit, republika, opština, kompanija, vremenska prognoza), stanja (na primer, radi na projektu, sluša predavanje, boravi u bolnici) i uloge (na primer, službenik, stranka, doktor, pacijent, radnik, profesor, student, stanovnik).

Važno: Izabrani entiteti će kasnije u bazi podataka biti predstavljeni tabelama. Zbog toga pogledajte pažljivo naveden objekte pošto mogu da vam budu dobar vodič kod izbora entiteta!

Svaki objekat, odnosno entitet, poseduje neka svojstva. Na primer, entitet "vozilo" ima vlasnika, registarski broj, datum registracije, godinu proizvodnje, proizvođača, marku, boju, tip motora, i dodatnu opremu. Svojstva ili atributi objekta će biti predstavljena kolonama u odgovarakućoj tabeli.

Objekti međusobno mogu biti povezani različitim odnosima odnosno relacijama. Svaka takva relacija može da poseduje posebna svojstva. Relacije se mogu iskoristiti kod pretraživanja međusobno povezanih podataka, na primer, kod pretraživanja podataka o registrovanim vozilima i njihovim vlasnicima. Više detalja o načinu povezivanja podataka iz tabela pogledajte u sekciji koja se odnosi na ključeve relacija, konkretno na strane ključeve i očuvanje integriteta.

Važno: Izborom objekata, definisanjem njihovih svojstava i prepoznavanjem veza između objekata, izvršili smo modeliranje dela realnog sveta koji predstavlja naš problem!

1.6.1 Tipovi modela podataka Da bi model podataka bio upotrebljiv mora obezbeđivati prostu korespodenciju

između koncepata koje nudi i koncepata realnog sveta. Prema tipu koncepata koji nude za opis baze podataka, modeli podataka se razvrstavaju u tri kategorije:

• Konceptualni modeli podataka nude koncepte visokog nivoa, kao što su entiteti, atributi i veze, koji su razumljivi i za krajnjeg korisnika i za projektanta baze podataka, i koji se mogu lako preslikati u implementacioni model podataka. Najpoznatiji konceptualni model podataka je model entitet-veza.

• Implementacioni modeli podataka nude koncepte koji su prihvatljivi za projektanta baze podataka i koji su pogodni za direktnu implementaciju na računaru. Najpoznatiji implementacioni modeli podataka su relacioni (naredna sekcija),

Page 11: Baze Podataka EKIS

Baze podataka i relacioni model

11

objektno-relacioni i objektno-orijentisani. Za predstavljanje informacije u relacionom modelu podataka koristi se kolekcija tabela, kod objektno-relacionog modela podataka koristi se kolekcija objekata klasa i tabela, a kod objektno-orijentisanog modela podataka koristi se kolekcija klasa i njihovih međusobnih veza.

• Fizički modeli podataka nude koncepte za opis načina memorisanja baze podataka u računaru. To su koncepti niskog nivoa, kao što su tipovi podataka, formati slogova, kriterijumi uređenja slogova, memorijske strukture podataka i pristupni putevi.

Konceptualni modeli podataka ne zavise od izabora DBMSa i ne utiču izbor. S druge strane izbor implementacionog modela određuje izbor tipa DBMSa. Najpoznatiji implementacioni model je relacioni model. Ogormna većina komercijalni sistema koristi relacioni model, pa se za takve baze podataka koristi naziv relacione baze podataka, a odgovarajući DBMS je relacioni DBMS (RDBMS).

1.7 Relacioni model podataka

1.7.1 Zanimljivosti Relacioni model je svakako najpopularniji i najrasprostranjeniji

model podataka danas i predstavlja osnovu za relacione baze podataka koje dominiraju na tržištu. Relacione baze podataka dominiraju na tržištu već skoro 40 godina!

Relacioni model je predložio E.F. Codd 1970 godine, dok je radio u IBMu.

System R je prvi sistem koji je koristio relacioni model, nakon toga IBM je implementirao svoj sistem poznat kao DB2. Nakon toga je Oracle realizovao svoj sistem zasnovan na ovom modelu,... i sve ostalo je istorija.

Relacija, kao osnovni koncept relacionog modela je zapravo matematička relacija, i ima jednostavnu reprezentaciju u obliku tabele sa podacima.

1.7.2 Osnove relacionog modela Relacioni model ima snažnu teorijsku osnovu, koja se zasniva na matematičkoj teoriji

relacija i na logici prvog reda, i za korisnika vrlo prihvatljivu reprezentaciju u vidu dvodimenzionalne tabele.

Relacioni model oslobađa korisnika frustracija oko rukovanja podacima na niskom nivou, zalaženja u detalje smeštanja podataka i metodama pristupa iz korisničkog interfejsa. Relacioni model obezbeđuje sredstva za opis podataka sa njihovom prirodnom strukturom, bez dodatnih struktura za potrebe mašinske reprezentacije. Ovaj model daje osnovu za jezik visokog nivoa za pristup podacima koji obezbeđuje maksimalnu nezavisnost između programa, s jedne strane, i mašinske reprezentacije, s druge strane.

U relacionom modelu podataka relacije se koriste za čuvanje informacije o objektima koje treba predstaviti u bazi podataka. U fazi projektovanja baze podataka, za konkretan problem, treba najpre prepoznati objekte realnog sveta (entiteti) za koje treba čuvati podatke i prepoznati njihove atribute. Svaki takav objekat predstavlja se relacijom u relacionom modelu.

Page 12: Baze Podataka EKIS

Baze podataka

12

Atributi su zajedničke osobine koje poseduju svi entiteti jednog skupa entiteta. Iz skupa atributa entiteta za potrebe konkretnog informacionog sistema bira se samo određeni podskup. Pošto se entiteti odnosno objekti realnog sveta predstavljaju relacijom, atributi predstavljaju svojstva te relacije. Pošto je relacija predstavljena tabelom, atributi predstavljaju kolone te tabele. Svaka relacija predstavlja skup torki, gde se svaka torka odnosi na konkretan entitet iz skupa entiteta. U tabelarnom prikazu relacije, vrste tabele su podaci o konkretnim entitetima, odnosno torke, tako da atribut za svaki konkretni entitet iz skupa entiteta poseduje određenu vrednost.

Skup vrednosti koje neki atribut može uzimati zovemo domen atributa. Praktično, svaki atribut u relaciji je definisan nad nekim domenom. Koncept domena je vrlo važan. Omogućava korisniku da definiše na jednom centralnom mestu značenje i izvor vrednosti koje atribut može uzimati. Svaki domen atributa se definiše: tipom podataka, dužinom podataka i opsegom vrednosti.

1.7.3 NULL vrednosti atributa Atributi uzimaju vrednosti iz odgovarajućeg domena koji im je dodeljen, što u praksi

znači da će vrednosti u tabeli za neku kolonu da budu onog tipa podataka koji smo izabrali za tu kolonu.

Međutim, DBMS dozvoljava da atribut nema dodeljenu vrednostm što podrazumeva korišćenje tzv NULL vrednosti. Ova specijalna vrednost se mora uvesti zato što u odgovarajuću ćeliju tabele treba da stoji neka vrednost da bi pretrage i analize radile.

NULL vrednost može da ima dva značenja:

• Vrednost atributa za posmatrani entitet ne postoji ili još uvek nije poznata. Na primer, za radnika koji je tek treba ili je tek počeo da radi vrednost atributa prethodni radni staž nije poznata.

• Vrednost atributa za posmatrani nije primenjiva. Na primer, ako za relaciju RADNIK imamo atribut FAKULTET u kome se čuva naziv fakulteta koji je radnik završio, svi radnici sa srednjom školskom spremom će imati NULL vrednost za taj atribut.

1.7.4 Pregled osnovnih koncepata relacionog modela podataka Važno: Relacija se u bazi podataka predstavlja dvodimenzionalnom tabelom, gde

vrste odgovaraju pojedinim slogovima, a kolone atributima. Atributi se mogu pojavljivati u bilo kom redosledu u tabeli. Redosled vrsta tabele takođe nije bitan. Svaka tabela, kao i svaka kolona u tabeli imaju ime.

Osnovni koncepti relacionog modela podataka su:

Relacija Relacija odgovara pojmu tabela sa vrstama i kolonama.

Atribut relacije

Predstavlja osobinu entiteta predstavljenog relacijom. Atribut je praktično imenovana kolona relacije odnosno tabele, koje se odnose na svojstva objekta predstavljenog relacijom.

Page 13: Baze Podataka EKIS

Baze podataka i relacioni model

13

Domen atributa Domen je skup dozvoljenih vrednosti za jedan ili više atributa.

Praktično se odnosi na tip podatka za kolonu.

Torka relacije Torka je vrsta relacije i odnosi se na jedan slog podataka.

Stepen relacije Broj atributa relacije (unarna, ako ima jednu kolonu, binarna sa dve

kolone i sl)

Kardinalnost relacije Broj vrsta (torki) relacije.

Šema relacije Šema relacije je opis relacije. Sadrži ime relacije, imena atributa i domene

atributa.

Relaciona baza podataka Kolekcija normalizovanih relacija.

Šema relacione baze podataka Skup šema relacija, pri čemu svaka ima različito ime.

Očigledno je da je relacija u relacionom modelu, odgovara pojmu tabela u bazi podataka. U svetu baza podataka, obično se koriste jedni termini kada se govori o relacionom modelu, a drugi kada se govori o bazi podataka, odnosno implementaciji relacionog modela. Uporedni prikaz termina i njihovog značenja dat je na slici 1-4.

Relacioni model Baza podataka Relacija Tabela Torka Vrsta Atribut Kolona

Domen atributa Tip podatka kolone Šema relacije Opis tabele

Slika 1-4 Ekvivalentni skup pojmova

1.7.5 Svojstva relacije Relacija ima sledeća svojstva:

• Svaka relacija ima ime koje se razlikuje od imena svih ostalih relacija u šemi relacione baze podataka,

• Svaka ćelija tabele (određena vrstom i kolonom) kojom je relacija predstavljena sadrži samo jednu atomičnu (prostu) vrednost,

• Svi atributi jedne relacije imaju različito ime,

• Sve vrednosti jednog atributa su iz istog domena,

• Sve torke relacije su različite, tj. u relaciji ne postoje duple torke,

• Redosled atributa u relaciji nema značaja, i

Page 14: Baze Podataka EKIS

Baze podataka

14

• Redosled torki u relaciji teoretski nema značaja, ali praktično redosled torki u relaciji može uticati na efikasnost pristupa torkama!

1.7.6 Primer Recimo da RADNIK predstavlja skup radnika nekog preduzeća (entiteta, tj objekata

iz realnog sveta). RADNIK je relacija u relacionom modelu koju predstavljamo tabelom u koju ćemo da čuvamo sve radnike. Za radnike treba čuvati informacije o imenu, prezimenu, matičnom broju, adresi stanovanja i plati – sve ovo su svojstva/osobine koje su nam važne i koje smo izabrali da ih predstavimo atributima relacije, odnosno to su nam kolone u tabeli. Svaka vrsta te tabele se odnosi na konkretnog radnika. U rešenju narednog zadatka, dat je izgled tabele koja odgovara relaciji RADNIK.

Zadatak 1: Izbor relacija Ako je neophodno projektovati bazu podataka koja se odnosi na preduzeće,

prepoznati entitete i njihova svojstva, koje ćete predstaviti relacijama u relacionom modelu, odnosno tabelama u bazi podataka.

Rešenje zadatka 1: Pretpostavimo da preduzeće ima više radnika, i za svakog od njih treba čuvati

informacije: ime, matični broj, stručna sprema, datum rođenja, pol, plata, adresa. Neka je preduzeće organizovano u sektore (sektor ima naziv, broj).

Podaci o radnicima preduzeća se mogu predstavljaju relacijom/tabelom RADNIK sa atributima LIME (lično ime), SSL (srednje slovo), PREZIME, MBR (matični broj), DATRODJ (datum rođenja), POL, PLATA i ADRESA. Niže je prikazana jedna instanca relacije RADNIK (tabela RADNIK) i jedna instanca relacije ODELJENJE (tabela SEKTOR).

RADNIK

LIME SSL PREZIME MBR DATRODJ POL PLATA ADRESA Ivana S Gocić 123456 15-10-87 Ž 17000 Niška 4 Milan I Savić 234567 01-03-57 M 32000 Humska 2 Ana P Rodić 666777 03-12-50 Ž 27000 Savska 34 Pera K Kostić 555333 31-12-53 M 43000 Čairska 3

SEKTOR

NAZIV SBROJ Projektovanje 40 Razvoj 50 Proizvodnja 60

Slika 1-5 Tabele RADNIK i SEKTOR

Dodatni zadatak: Ovo je delimično rešenje zadatka. Prepoznati ostale potenijalne relacije i njihove atribute!!

Zadatak 2: Domeni atributa Identifikovati domene atributa relacije RADNIK iz prethodnog primera.

Page 15: Baze Podataka EKIS

Baze podataka i relacioni model

15

Rešenje zadataka 2: Domeni nekih atributa relacije RADNIK su prikazani u tabeli 1.

Tabela 1 : Domeni atributa relacije radnik

Atribut Domen Značenje Definicija domena LIME Imena Osoba Skup mogućih imena

osoba Niz karaktera, dužine do 15.

PREZIME Prezime Osoba Skup mogućih prezimena osoba

Niz karaktera, dužine do 15.

MBR Maticni Broj Skup mogućnih matičnih brojeva radnika

Celi brojevi, napr. opsega 111111-999999*

DATRODJ Datum Rodjenja

Moguće vrednosti za datume rođenja zaposlenih u preduzeću

Datum, opseg, od 01-JAN-44 nadalje

POL Pol Pol radnika Karakter (1), vrednost M i Ž PLATA PlataRadnika Moguće vrednosti plata

radnika Broj, opseg od minLD do 40000.00, gde je minLD minimalni republički lični dohodak

ADRESA AdresaRadnika Moguće adrese radnika preduzeća

Niz karaktera (30)

*U praksi, 13 cifara

Dodatni zadatak: Identifikovati domene atributa relacije SEKTOR!!

1.8 Ključevi relacije Da bismo jedan entitet jednoznačno identifikovali u posmatranom skupu entiteta on

mora posedovati neko svojstvo, ili kombinaciju od nekoliko svojstava, takvu da vrednost tog ili tih svojstava jednoznačno određuju svaku pojavu tog tipa entiteta. Takva svojstva nazivamo karakterističnim, a njihove vrednosti koristimo kao identifikator entiteta unutar skupa.

Na primer, skup entiteta RADNIK predstavljamo relacijom/tabelom gde svaka vrsta odgovara jednom entitetu, odnosno predstavlja jednog konkretnog radnika. U tom slučaju neophodno je prepoznati svojstva (atribute) koje možemo da koristimo za identifikaciju radnika unutar skupa radnika.

U relacionom modelu podataka atribut ili skup atributa čije vrednosti predstavljaju identifikator entiteta (torke u relaciji) nazivamo ključem relacije. Takvi atributi se nazivaju ključni atributi.

Važno je naglasiti da je ključ minimalni skup atributa koji na jedinstven način identifikuje svaku pojavu tipa entiteta (svaku torku u relaciji), što znači da uklanjanjem bilo koje komponente ključa, ključ gubi svojstvo identifikacije pojave entiteta u skupu.

Ako relacija ne poseduje atribut ili skup atributa koji je identifikuju, tada se uvodi specijalni identifikacioni atribut - ključ surogat, koji se obično označava sa ID.

U relacionom modelu podataka postoji više termina koji se koriste za relacione ključeve, što će niže biti uvedeno.

Terminologija

Ključ Pošto su sve torke relacije različite, u relaciji mora postojati atribut ili

skup atributa (tzv kompozitni ključ – ključ od više atributa), nazvani

Page 16: Baze Podataka EKIS

Baze podataka

16

relacioni ključevi ili ključevi relacije, koji na jedinstven način identifikuje svaku torku relacije.

Super ključ Atribut ili skup atributa koji na jedinstven način identifikuju torku

unutar relacije.

Ključ kandidat Superključ čiji nijedan pravi podskup nije superključ relacije. Relacija

može imati više ključeva kandidata, kod implementacije se bira jedan od njih.

Primarni ključ Ključ kandidat koji je odabran da na jedinstven način identifikuje torke

unutar relacije.

Ključ surogat Identifikator koji je dodat relaciji kao primarni ključ, zato što relacija

nema odgovarajući atribut ili skup atributa koji može biti primarni ključ relacije.

Spoljni ključ / Strani ključ Atribut ili skup atributa jedne relacije koji se uparuje sa ključem

kandidatom neke druge ili iste relacije. Važan za ostvarivanje međusobnih veza između tabela!!!

Zadatak 3: Ključ relacije Identifikovati primarne ključeve relacija RADNIK i SEKTOR iz prethodnog

primera.

Rešenje zadatka 3: Primarni ključ u relaciji SEKTOR je broj sektora, odnosno atribut SBROJ,

zato što na jedinstven način identifikuje svaki sektor u preduzeću (ne mogu da postoje dva sektora sa istim brojem). Ključ kandidat (i potencijalni primarni ključ) u ovoj relaciji može biti i naziv sektora, uz pretpostavku da sektori ne mogu da imaju ista imena. U relaciji RADNIK primarni ključ je očigledno matični broj radnika. Kod radnika se može identifikovati i potencijalni kompozitni ključ kandidat, na primer od kombinacije atributa ime (ime, srednje slovo i prezime zajedno) i datuma rođenja. Naravno, ovakav ključ se može izabrati ako ne postoji neki očigledniji i jednostavniji kao što je u ovom slučaju matični broj.

U relaciji RADNIK atributi BRSEK i MATBRS su spoljni ključevi. Prvi je primarni ključ u matičnoj relaciji SEKTOR, a drugi je primarni ključ u relaciji RADNIK. Relacija SEKTOR ima spoljni ključ MATBRR koji je primarni ključ u relaciji RADNIK. U relaciji SEKTOR atribut NAZIV je ključ kandidat, ako važi pravilo da u preduzeću nepostoje dva ili više sektora sa istim imenima.

Page 17: Baze Podataka EKIS

Baze podataka i relacioni model

17

1.9 Relacioni integritet U prethodnim odeljcima smo ukratko prikazali strukturnu komponentu relacionog

modela podataka. U ovom odeljku ćemo se upoznati sa integritetnom komponentom. Već smo ukazali da se za svaki atribut u relaciji vezuje određeni domen. Ustvari radi se o domenskim ograničenjima (eng. domain constraints), kojima se ograničava skup dozvoljenih vrednosti atributa relacije.

Postoje još dva pravila integriteta, poznata kao integritet entiteta (eng. entity integrity) i referencijalni integritet (eng. referential integrity), koja ograničavaju ili zabranjuju pojave određenih torki u relaciji.

Integritet entiteta Nijedan atribut primarnog ključa bazne relacije nesme imati NULL

vrednost.

Referencijalni integritet Ako postoji neki spoljni ključ u relaciji, njegova vrednost mora biti

jednaka vrednosti ključa kandidata neke torke u matičnoj relaciji ili njegova vrednost mora biti NULL.

Referencijalni integritet je važan kod definisanja međusobnih veza između tabela.

Ograničenja poslovanja (Business constraints, business logic) To su ograničenja koja definiše korisnik ili administrator baze

podataka, a proističu iz pravila poslovanja realnog sistema za koji se baza projektuje. Jedno od pravila poslovanja u preduzeću je da rukovodilac mora imati veću platu od svog osoblja. Drugo pravilo može biti da radnici koji rade na lokaciji X imaju platu uvećanu za 10% od radnika na istom poslu na ostalim lokacijama sektora.

1.9.1 Referencijalni integritet i spoljni ključevi Jedna od osnovnih osobina relacionih baza podataka je međusobna povezanost

podataka. Za ostvarivanje veza između podataka predstavljenih relacijom koriste se strani (spoljni) ključevi. Kao što je već navedeno, strani ključ predstavlja atribut koji se uparuje sa ključem iz neke relacije. Šta to znači u praktičnoj realizaciji?

Pretpostavimo da imamo relacije RADNIK i SEKTOR, kako je to navedeno u prvom primeru, i da za radnike treba čuvati informacije o sektoru u kome rade. U tom slučaju, dovoljno je da se u relaciju RADNIK doda atribut čije vrednosti odgovaraju ključevima u relaciji SEKTOR, tako da za konkretnog radnika ovaj atribut ima vrednost koja odgovara ključu sektora u kome radnik radi. Za relaciju RADNIK koju smo imali u primeru 1, treba dodati atribut BRSEK kao spoljni ključ relacije.

S druge strane, za SEKTOR se može zahtevati da se čuvaju informacije o rukovodiocu sektora. Rukovodioci su takođe radnici, pa se svi podaci o njima čuvaju u tabeli RADNIK. Zbog toga je dovoljno u relaciju SEKTOR dodati atribut MATBRS (sa značenjem „matični broj šefa“) koji odgovara ključu relacije RADNIK i čuva vrednost koja odgovara šefu sektora. Uz strani ključ koji predstavlja vezu mogu se čuvati i druge vrednosti preko atributa veze. Na primer, uz podatak o šefu sektora može se čuvati i informacija o datumu postavljanja tako što se doda atribut DATPOST.

Page 18: Baze Podataka EKIS

Baze podataka

18

Na primeru relacija koje smo imali u primeru 1, može se videti sadržaj tabela RADNIK sa dodatim stranim ključevima BRSEK i MATBRS (prvi je primarni ključ u matičnoj relaciji SEKTOR, a drugi je primarni ključ u relaciji RADNIK), i SEKTOR sa stranim ključem MATBRR koji je primarni ključ u relaciji RADNIK.

Može se uočiti da je Ivani Gocić šef radnik sa matičnim brojem 66777, a to je Ana Rodić, dok je Anin šef radnik sa matičnim brojem 55333, odnosno Pera Kostić. Radnici Milan i Petar nemaju šefove, odnosno vrednost atributa MBRS je NULL.

Na osnovu vrednosti atributa BRSEK, vidi se da tri radnika rade u sektoru čiji je broj 40 (iz tabele SEKTOR to je Projektovanje), a samo jedan u sektoru sa brojem 60 (iz tabele SEKTOR to je Proizvodnja).

RADNIK

LIME SSL PREZIME MBR DATRODJ POL PLATA ADRESA MBRS BRSEK

Ivana S Gocić 123456 15-10-87 Ž 17000 Niška 4 66777 40 Milan I Savić 234567 01-03-57 M 32000 Humska 2 NULL 60 Ana P Rodić 666777 03-12-50 Ž 27000 Savska 34 55333 40 Pera K Kostić 555333 31-12-53 M 43000 Čairska 3 NULL 40

SEKTOR NAZIV SBROJ MATBRR DATPOST Projektovanje 40 555333 15-01-2000 Razvoj 50 NULL 01-01-99 Proizvodnja 60 234567 01-01-97

Slika 1-6 Primer referencijalnog integriteta za tabele RADNIK i SEKTOR

Navedeni primeri pokazuju kako se preko stranih ključeva mogu ostvariti veze između podataka u tabelama. Međutim, ovakav način povezivanja omogućava predstavljanje veza 1:1 i 1:N. Pri tome, 1 i N se odnose na kardinalnost (brojnost). Ako posmatrate vezu između dve relacije, gledate najpre odnos između jednog entiteta iz prve relacije i svih ostalih entiteta iz druge. Nakon toga isti postupak ponovite za drugi smer, odnosno odnos jednog entiteta iz druge relacije sa svim entitetima iz prve.

Na primer, pomenuta veza između relacija RADNIK i SEKTOR (odnosi se na radnike koji rade u nekom sektoru):

RADNIK : SEKTOR X : Y

- Najpre posmatramo jednog radnika i određujemo sa koliko sektora je on u vezi. Pošto jedan radnik može da radi samo u jednom sektoru, kardinalnost sa strane sektora je 1:

RADNIK : SEKTOR X : 1

- Nakon toga posmatramo jedan sektor i određujemo sa koliko radnika je u pomenutoj vezi. Jedan sektor može da ima više radnika, pa je kardinalnost sa strane radnika u ovoj vezi N:

RADNIK : SEKTOR N : 1

Page 19: Baze Podataka EKIS

Baze podataka i relacioni model

19

Veze tipa 1:1 i 1:N se jednostavno definišu dodavanje stranog ključa. Kod veza 1:N, strani ključ se dodaje na N strani (u primeru, u relaciju RADNIK se doda strani ključ iz relacije SEKTOR). Kod veza 1:1 strani ključ se može dodati bilo kojoj relaciji, ali se obično bira ona kod koje svi entiteti učestvuju u vezi (ako takva postoji, ili proizvoljno na jednu ili drugu stranu ako ne postoji). Na primer, ako posmatramo vezu RADNIK:SEKTOR, ali u smislu rukovodioca sektora, svaki sektor ima jednog rukovodioca, i jedan radnik rukovodi samo jednim sektorom. Veza je očigledno 1:1. U tom slučaju treba izabrati dodavanje stranog ključa u relaciju SEKTOR zato što svi entiteti iz ove relacije učestvuju u vezi, dok to nije slučaj za entitete iz relacije RADNIK (svi sektori imaju šefa, ali nisu svi radnici šefovi).

Komplikovanija situacija je ako je veza između dve relacije više-na-više, odnosno M:N. Na primer, ako imamo relacije PREDMET koja se odnosi na predmete, i relaciju UČENIK, veza između njih (PREDMET:UČENIK) koja definiše koji učenici pohađaju odgovarajući predmet je M:N. Jedan predmet pohađa više učenika (x:N), a jedan učenik ima više predmeta (M:N). Kako predstaviti ovakvu vezu?

Predstavljanje veza tipa M:N je jedino moguće kreiranjem nove relacije koja sadrži ključeve iz obe relacije koje učestvuju u vezi, plus eventualno dodatne atribute veze ako postoje. U primeru veze PREDMET:UČENIK treba kreirati novu relaciju POHAĐA, koja sadrži atribute: ključ relacije PREDMET, ključ relacije UČENIK, i eventualno dodatne atribute veze. Ključ te nove relacije je kombinacija atributa ključeva obe relacije.

1.10 Predstavljanje šema relacione baze podataka Uobičajena konvencija za predstavljanje relacione šeme obuhvata ime relacije iza

koga slede imena atributa u malim zagradama. Imena atributa se odvajaju zapetama. Primarni ključ se podvlači, a spoljni ključevi se pišu italikom. Niže je prikazana relaciona šema baze podataka PREDUZEĆE:

RADNIK (LIME, SSLOVO, PREZIME, MATBR, DATRODJ, POL, PLATA, ADRESA, MATBROJS, BRSEK)

PROJEKAT (NAZIV, LOKPR, BROJPR, BRS)

SEKTOR (NAZIV, SBROJ, MATBRR, DATPOST)

CLAN-PORODICE (MATBRRAD, IME, POL, SRODSTVO, DATRODJ)

LOK-SEK (BRS, LOKACIJA)

RADI-NA (MBR, BRPR, SATI)

Radi poboljšanja čitljivosti relacione šeme, obično se za imena atributa ili entiteta koriste mala slova, tako da šema dobija jedan od sledećih formata:

RADNIK (Lime, Sslovo, Prezime, MatBr, DatRodj, Pol, Plata, Adresa, MatBrojS, BrSek)

PROJEKAT (Naziv, LokPr, BrojPr, BrS)

SEKTOR (Naziv, SBroj, MatBrR, DatPost)

CLAN-PORODICE (MatBrRad, Ime, Pol, Srodstvo, DatRodj)

LOK-SEK (BrS, Lokacija)

Page 20: Baze Podataka EKIS

Baze podataka

20

RADI-NA (Mbr, BrPr, Sati)

radnik (LIME, SSLOVO, PREZIME, MATBR, DATRODJ, POL, PLATA, ADRESA, MATBROJS, BRSEK)

projekat (NAZIV, LOKPR, BROJPR, BRS)

sektor (NAZIV, SBROJ, MATBRR, DATPOST)

clan_porodice (MATBRRAD, IME, POL, SRODSTVO, DATRODJ)

lok_sek (BRS, LOKACIJA)

radi_na (MBR, BRPR, SATI)

Uobičajena konvencija za predstavljanje relacione šeme je dijagram relacije. Svaka relacija se predstavlja jednim izduženim pravougaonikom koji ima onoliko ćelija koliko je atributa u relaciji. Ime relacije se ispisuje iznad pravougaonika, a imena atributa u ćelijama, pri čemu ostaje pravilo da se primarni ključ podvlači, a da se spoljni ključevi pišu italikom. Niže je prikazan dijagram relacione šeme baze podataka PREDUZEĆE:

RADNIK

LIME SSLOVO PREZIME MATBR DATRODJ POL ...

... PLATA ADRESA MATBROJS BRSEK PROJEKAT

NAZIV LOKPR BROJPR BRS SEKTOR

NAZIV SBROJ MATBRR DATPOST CLAN_PORODICE

MATBRRAD IME POL SRODSTVO DATRODJ LOK_SEKTOR RADI_NA

BRS LOKACIJA MBR BRPR SATI Slika 1-7 Relaciona šema baze podataka PREDUZEĆE

1.11 Preporuke kod izbora relacija Projektovanje relacionog modela baze podataka je složen zadatak koji zahteva

poznavanje koncepata ovog modela i dosta iskustva u radu. Osnovne preporuke kojih se treba pridržavati i koje vam mogu pomoći kod modeliranja baze podataka su:

• Identifikujte tipove entiteta detaljnom analizom i čitanjem zahteva. Tipove entiteta možete obično prepoznati traženjem imenica u rečenicama, ili na osnovu spiska objekata realnog sveta koji vam je dat na početku ove lekcije. Svaki prepoznati tip entiteta je potencijalna relacija u relacionom modelu, odnosno tabela u bazi podataka.

• Analizirajte atribute kod svih prepoznatnih entiteta. Ako neki od njih nemaju atribute ili ih ima malo, razmotrite njihovu egzistenciju u obliku relacija. Možda se ti atributi mogu pridružiti nekoj drugoj relaciji!

• Pronađite identifikatore za svaku relaciju (kandidati za ključeve).

Page 21: Baze Podataka EKIS

Baze podataka i relacioni model

21

• Odredite domene atributa. Proverite da li se neki atributi mogu dekomponovati na prostije – na primer, ime na lično ime, srednje slovo i prezime ili adresa na ulicu, broj, naziv mesta i sl. Naravno, ako za tako nešto postoji potreba!

• Proverite da li neki atributi imaju više različitih vrednosti za konkretan entitet iz skupa. Na primer, neki sektor preduzeća može da ima više lokacija, recimo u Nišu, Pirotu i Prokulju. Atribut Lokacija za sektor u tom slučaju ne može da čuva sve tri vrednosti odjednom u vrsti tabele koja se odnosi na konkretan sektor. U tom slučaju razmotrite uvođenje nove relacije koja će preko spoljnjeg ključa da ima vezu sa prvom.

• Atributi mogu pomoći i kod prepoznavanja veza, u slučaju da imate atribut koji se referencira na drugu relaciju koja postoji u vašem modelu.

• Proverite da li model sadrži redundantne komponente.

• Vodite računa o nivou detaljnosti i konzistentnosti; na primer, u početnim fazama možete izostaviti atribute iz modela i sl.

1.12 Zadaci za vežbu Zadatak 4: Relacije Na osnovu zahteva koji su dati prepoznati relacije i njihove atribute, definisati

odgovarajuće tabele i njihove primarne ključeve:

(a) Brod: brod ima ime, registracioni kod, bruto nosivost, i godina igradnje.

(b) Restoran: restorani imaju naziv, adresu, broj mesta, telefon, i vrstu hrane (roštilj, riba, pice).

(c) Krava: krava muzara ima ime, datum rođenja, rasu i numerisnu plastičnu oznaku na uvetu.

Zadatak 5: Veze između relacija Na osnovu zahteva koji su dati prepoznati relacije i njihove međusobne veze,

definisati odgovarajuće tabele, primarne ključeve i spoljne ključeve koji predstavljaju veze (napomena: atributi nisu navedeni, tako da morate da predložite određeni skup atributa relacije koji opisuju svojstva entiteta):

(a) Fakultet ima više studenata, ali jedan student može da studira samo na jednom fakultetu.

(b) Avion može da ima više putnika, ali jedan putnik može da bude na samo jednom letu u određeno vreme.

(c) Država ima više regiona, svaki region ima više gradova.

(d) Ćevapdžinica prodaje više vrsta pljeskavica. Isti dodaci (salate) se mogu koristiti uz različite tipove pljeskavica.

(e) Pacijent može da ima više doktora, a jedan doktor ima više pacijenata.

Zadatak 6: Modeliranje – jednostavan relacioni model U bazi podataka treba čuvati podatke o dva tipa entiteta: VOZILO, sa atributima Tip,

RegistarskiBroj, BrojMotora, BrojŠasije, i VLASNIK sa atributima LičnoIme, Prezime, Adresa, BrojDozvole. Za vozila se znaju vlasnici. Jedan vlasnik može da poseduje više vozila, a vozilo ima samo jednog vlasnika.

Page 22: Baze Podataka EKIS

Baze podataka

22

1. Prepoznati relacije i definisati odgovarajuće tabele.

2. Koji atributi su primarni ključevi ovih relacija?

3. Koji strani ključ i u koju relaciju treba dodati da bi se modelirala veza između vlasnika i vozila?

Zadatak 6: Baza podataka o slikarima Projektovati relacionu šemu baze podataka koja treba da čuva podatke o slikarima i

muzejima u kojima se nalaze njihove slike. Za svaku sliku, treba pamtiti informacije o veličini (dimenzijama), godini kada je ona nastala, naslov i stil. Za slikare pamtiti nacionalnost, datum rođenja i datum smrti (ako je poznat). Za svaki muzej, pamtiti lokaciju, kao i specijalnost, ako postoji.

Zadatak 7: Baza podataka PREDUZEĆE Na osnovu navedenih zahteva projektovati relacionu šemu baze podataka

PREDUZEĆE.

Zahtevi: 1. Preduzeće ima više sektora. Svaki sektor ima ime, broj i rukovodioca. Sektor ima bar

četiri radnika. Vodi se evidencija o datumu kada je rukovodilac postavljen na tu funkciju. Sektor može imati više lokacija.

2. U sektoru se radi na više projekata. Svaki projekat ima ime, broj i jedinstvenu lokaciju.

3. Za svakog radnika se pamti ime, matični broj, adresa, plata, pol i datum rođenja. Svaki radnik radi u jednom sektoru, a može biti angažovan na više projekata, koje ne vodi isti sektor. Pri tome se vodi evidencija o broju radnih časova koje radnik provede na nekom od projekata. Takođe se vodi evidencija o hijerarhiji odgovornosti, odnosno evidentira se za svakog radnika ko mu je neoposredni rukovodilac.

4. Vodi se i evidencija o članovima porodice. Za svakog člana evindetira se ime, pol, datum rođenja i srodstvo.

Rešenje zadatka 7: Najpre ćemo na osnovu zahteva da prepoznamo potencijalne relacije koje ćemo

predstaviti tabelama. To su RADNIK, SEKTOR i PROJEKAT, sa atributima kako je to prikazano:

RADNIK

LIME SSLOVO PREZIME MATBR DATRODJ POL PLATA ADRESA SEKTOR

NAZIV SBROJ PROJEKAT

NAZIV LOKPR BROJPR

Član porodice je takođe potencijalna relacija, ali je očigledno da se svako dete u ovom slučaju nema atribut koji može da bude ključ. S druge strane, dete se može identifikovati preko svog imena ako je poznato ko mu je roditelj (odnosno preko ključa roditelja). Zbog toga se ovoj relaciji dodaje kao strani ključ matični broj roditelja. Ovo je situacija kada se član porodice pojavljuje kao slabi tip entiteta, kod koga se ključ formira

Page 23: Baze Podataka EKIS

Baze podataka i relacioni model

23

kao kombinacija delimičnog ključa (u ovom slučaju ime deteta) i stranog ključa (mat.br. roditelja). Vodite računa da je ovo dugačija situacija od dodavanja ključa surogata kako je to navedeno kod objašnjavanja ključeva.

ČLAN-PORODICE

MATBRRAD IME POL SRODSTVO DATROĐ

Na osnovu zahteva se mogu prepoznati i veze:

RUKOVODI, između radnika i sektora. Ovo je veza 1:1, pošto jedan radnik može da rukovodi samo jednim sektorom, a jedan sektor ima jednog rukovodioca. Izbor na koju stranu staviti strani ključ se može doneti na osnovu dodatne analize veze: u ovoj vezi potpuno učestvuje svaka torka iz relacije SEKTOR, odnosno svaki sektor mora da ima rukovodioca (s druge strane, relacija RADNIK ne učestvuje potpuno, jer nisu svi radnici rukovodioci sektora). Zbog toga se relaciji SEKTOR dodaje atribut DAT_POST (datum postavljanja rukovodioca) i spoljni ključ MATBRR (matični broj rukovodioca) koji predstavlja primarni ključ relacije RADNIK.

SEKTOR

NAZIV SBROJ MATBRR DATPOST

Veze RADI_U i NADZOR, koje su tipa 1:N, u kojima se na N strani javlja RADNIK, kao i veza JE_NOSILAC u kojoj je na N strani PROJEKAT. Relacijama na N strani se dodaju kao spoljni ključevi primarni ključevi relacije na 1 strani.

RADNIK LIME SSLOVO PREZIME MATBR DATRODJ POL

PLATA ADRESA MATBROJS BRSEK

PROJEKAT NAZIV LOKPR BROJPR BRS

Na osnovu zahteva može se prepoznati i jedna veza M:N: RADI-NA između relacija RADNIK i PROJEKAT, tako da se za nju formira posebna relacija RADI-NA u koju se kao spoljni ključevi uključuju primarni ključevi relacija RADNIK i PROJEKAT. Ova dva spoljna ključa formiraju primarni ključ relacije RADI-NA.

RADI-NA MBR BRPR SATI

Dodatna komplikacija u ovim zahtevima je i viševrednosni atribut LOKACIJA koji se odnosi na relaciju SEKTOR. Za njega se formira nova relacija LOK-SEKTOR koja kao spoljni ključ ima primarni ključ relacije SEKTOR.

LOK-SEKTOR BRS LOKACIJA

Na taj način, na osnovu navedenih zahteva kreiran je kompletni relacioni model baze podataka PREDUZEĆE koji konačno izgelda ovako:

RADNIK LIME SSLOVO PREZIME MATBR DATRODJ POL

PLATA ADRESA MATBROJS BRSEK

Page 24: Baze Podataka EKIS

Baze podataka

24

PROJEKAT

NAZIV LOKPR BROJPR BRS

SEKTOR

NAZIV SBROJ MATBRR DATPOST

CLAN_PORODICE

MATBRRAD IME POL SRODSTVO DATROĐ

LOK_SEKTOR RADI_NA

BRS LOKACIJA MBR BRPR SATI

Zadatak 8: Baza podataka o takmičenju u odbojci Projektovati relacionu šemu baze podataka o takmičenju u odbojci. U bazi podataka

treba čuvati informacije o ekipama koje učestvuju (naziv, zemlja, trener, najbolji plasman na svetskim i evropskim prvenstvima) i igračima za svaku ekipu. Za igrače pamti se ime i prezime, mesto u timu i broj. Brojevi igrača su jedinstveni u okviru ekipe. Treba pamtiti i podatke o utakmicama (jedinstveni identifikator, datum, vreme, sudije, dve ekipe koje igraju i konacni rezultat u setovima). Utakmice se igraju na tri dobijena seta, a za svaki set na utakmici treba pamtiti njegov redni broj i rezultat. Za utakmice pamti se i statistika za igrace i ekipu. Za svakog igrača, za svaku utakmicu, pamti se broj osvojenih poena i broj promena. Za svaku ekipu na utakmici vodi se statistika o broju as servisa, broju direktnih poena i broju poena na greške protivnika.

Zadatak 9: Baza podataka za Video klub Projektovati relacionu šemu baze podataka za Video klub. Potrebno je pratiti sledeće

informacije o filmovima: jedinstveni broj, naslov filma, režiser, tip (akcioni, komedija, drama,...), rejting filma („kritika“ u novinama označena brojem zvezdica), godina, nominacije za nagrade Akademije (tzv. „Oskar“, Academy Award), dobijene nagrade Akademije. Za svaki film treba pamtiti imena glumaca i tip uloge (glavna, sporedna,...). O glumcima se pamte imena (ime i prezime), podaci o datumu rođenja i mestu rođenja, datumu smrti (ako postoji). Za svakog glumca postoji jedinstveni identifikator. Pamtiti podatke o režiserima filmova: za svakog režisera postoji jedinstveni broj, pamte se imena, datum rođenja i datum smrti (ako postoji). Treba pamtiti i informacije o članovima kluba: broj članske karte, ime i prezime, adresa, jedinstveni broj, datum učlanjenja, ukupan iznos najamnine (od svih iznajmljenih kaseta) i vrednost ostvarenog bonusa (određuje se na osnovu pet iznajmljivanja). Pamtiti podatke o kasetama: jedinstveni kod kasete, datum dobijanja, film koji se na njoj nalazi i broj iznajmljivanja kasete. Više kaseta može biti sa istim filmom. Za svakog člana kluba treba pamtiti kasete koje je uzeo i datum izdavanja.

Page 25: Baze Podataka EKIS

2 SQL naredbe za kreiranje podataka

2.1 Uvod Structured Query Language (SQL) predstavlja programski jezik koji je projektovan

za potrebe pretraživanja i upravljanja podacima u Sistemima za upravljanje relacionim bazama podataka (Relational Database Management Systems – RDBMS), za kreiranje i modifikacija šema relacione baze podataka i za kontrolu pristupa objektima baze podataka.

Prva verzija programskog jezika SQL razvijena je od strane kompanije IMB krajem 1970-ih godina. Ova verzija, inicijalno nazvana SEQUEL, je razvijena za potrebe manipulacije podacima System R sistemu za upravljanje relacionim bazama podataka.

SQL je formalno standardizovan 1986 godine, od strane American National Standards Institute (ANSI), pod nazivom SQL-86. Ovaj standard je kasnije prihvaćen id od strane International Organization for Standardization (ISO). Svi SQL standardi koji su naknadno usvojeni predstavljaju zajedničke standarde organizacija ANSI i ISO (Tabela 2). Većina RDBMS-ova implementira jedan od navedenih standarda.

Tabela 2: Usvojeni SQL standardi

Godina Naziv Ostali nazivi 1986 SQL-86 SQL-87 1989 SQL-89 FIPS 127-1 1992 SQL-92 SQL2, FIPS 127-21999 SQL:1999 SQL3 2003 SQL:2003 2006 SQL:2006 2008 SQL:2008

SQL je programski jezik razvijen sa specifičnom namenom . Njegova osnovna karakteristika je da se radi o deklarativnom jeziku za upravljanje i manipulacijom podacima u relacionim bazama podataka. SQL omogućava pribavljanje, dodavanje, ažuriranje i brisanje podataka u relacionoj bazi podataka. Većina proizvođača RDBMS-a proširuje SQL standard dodajući proceduralne elemente, kontrolne strukture, korisnički definisane tipove podataka i druge elemente. SQL standard SQL-99 mnoga od ovih proširenja su formalno prihvaćenakao delovi SQL jezika u vidu SQL Persistent Stored Modules (SQL/PSM) (Tabela 3).

Page 26: Baze Podataka EKIS

Baze podataka

26

Tabela 3 : Proširena SQL jezika koja su postala deo standarda

Proizvođač Ime Puno ime ANSI/ISO Standard

SQL/PSM SQL/Persistent Stored Modules

Interbase/Firebird PSQL Procedural SQL IBM SQL PL SQL Procedural Language (implements SQL/PSM) Microsoft/Sybase T-SQL Transact-SQL MySQL SQL/PSM SQL/Persistent Stored Module (implements

SQL/PSM Oracle PL/SQL Procedural Language/SQL (based on Ada) PostgreSQL PL/pgSQL Procedural Language/PostgreSQL Structured Query

Language (bazira se na Oracle PL/SQL) PostgreSQL PL/PSM Procedural Language/Persistent Stored Modules

Većina proizvođača relacionih DBMS-ova оbezbeđuje alat za kreiranje i izvršavanje naredbi SQL jezika. Ovaj alat može biti običan Command-line Interface (SQL/CLI) ili alat sa bogatim grafičkim interfejsom. Takođe, u većini slučajeva, je obezbeđena programksa podrška koja omogućava da se SQL naredbe kreiraju i koriste iz drugih programskih jezika.

Sve naredbe SQL jezika se mogu podeliti u dve velike grupe:

1. Data Definition Language (DDL) – jezik koji se koristi za definisanje strukture relacione baze podataka

2. Data Manipulation Language (DML) – jezik za pribavljanje I ažuriranje podataka u relacionoj bazi podataka.

2.2 Baza podataka PREDUZEĆE U nastavku je prikazana relaciona baza podataka PREDUZEĆE koja će biti korišćena

u svim lekcijama ovog kursa koje se bave SQL programskim jezikom. Relacioni dijagram baze podataka PREDUZEĆE prikazan je na Slici 2-1.

Slika 2-1 Relacioni dijagram baze podataka PREDUZEĆE

Tabela RADNIK čuva podatke o radnicima preduzeća. Za svakog radnika se pamti matični broj, ime, srednje slovo, prezime, datum rođenja, pol, plata, adresa, matični broj

Page 27: Baze Podataka EKIS

SQL naredbe za kreiranje podataka

27

neposrednog rukovodioca i broj sektora u kome radnik radi. Za primarni ključ je izabran matični broj radnika odnosno kolona MatBr. Tabela ima dva strana ključa: Rukovodilac i Sektor. Kolona Rukovodilac referencira kolonu MatBr u istoj tabeli jer rukovodilac je jedan od radnika (rekurzivna veza). Kolona Sektor referencira kolonu Broj u tabeli Sektor.

Preduzeće je podeljeno na veći broj sektora. U tabeli SEKTOR se pamte sledeći podaci o sektorima: broj sektora, naziv sektora, matični broj šefa sektora i datum kada je šef sektora postavljen na svoju dužnost. Za primarni ključ je izabran broj sektora odnosno kolona Broj. Jedini strani ključ je kolona Sef koja referencira kolonu MatBr u tabeli RADNIK (šef sektora je jedan od radnika u preduzeću).

Tabela PROJEKAT čuva podatke o projektima koji su aktivni unutar preduzeća. Za svaki projekat se pamti: broj projekta, naziv projekta, lokacija projekta i broj sektora koji je zadužen za projekat. Za primarni ključ je izabran broj projekta odnosno kolona Broj. Jedini strani ključ je kolona Sektor koja referencira kolonu Broj u tabeli Sektor.

Tabela CLAN_PORODICE čuva sledeće podatke o članovima porodica radnika: matični broj radnika, ime člana porodice, pol, srodstvo sa radnikom i datum rošenja. Primarni ključ je kompozitni i čine ga kolone Radnik i Ime. Strani ključ je kolona Radnik koja referencira kolonu MatBr u tabeli RADNIK.

Tabela LOK_SEK čuva podatke o lokacijama na kojima se nalazi određeni sektor: broj sektora i naziv lokacije. Primarni ključ je kompozitni i čine ga kolone Sektor i Lokacija. Strani ključ je kolona Sektor koja referencira kolonu Broj u tabeli SEKTOR.

Tabela RADI_NA predstavlja evidenciju angažovanja radnika na različitim projektima. Za svako angažovanje se pamti: matični broj angažovanog radnika, broj projekta na kome je angažovan i broj radnih sati nedeljno koliko je angažovan na projektu. Primarni ključ je kompozitni i čine ga kolone Radnik i Projekat. Tabela ima dva strana ključa: Radnik i Projekat. Kolona Radnik referencira kolonu MatBr u tabeli RADNIK a kolona Projekat referencira kolonu Broj u tabeli PROJEKAT.

2.2.1 Definicije tabela

Tabela 4: Definicija tabele RADNIK

Kolona Tip Ključ Obavezna Napomena MatBr Number Primarni ključ Da Long Integer Ime Text(20) Ne Da SSLovo Text(1) Ne Da Prezime Text(30) Ne Da DatumRodj Date/Time Ne Ne Adresa Text(100) Ne Ne Pol Text(1) Ne Ne Plata Number Ne Ne Single Rukovodilac Number Strani ključ Ne Long Integer Sektor Number Strani ključ Da Byt

Page 28: Baze Podataka EKIS

Baze podataka

28

Tabela 5: Definicija tabele SEKTOR

Kolona Tip Ključ Obavezna Napomena Broj Number Primarni ključ Da Byte Naziv Text(50) Ne Da Sef Number Strani ključ Da Long Integer DatPost Date/Time Ne Ne

Tabela 6: Definicija tabele PROJEKAT

Kolona Tip Ključ Obavezna Napomena Broj Number Primarni ključ Da Integer Naziv Text(100) Ne Da Lokacija Text(50) Ne Ne Sektor Number Strani ključ Da Byte

Tabela 7: Definicija tabele CLAN_PORODICE

Kolona Tip Ključ Obavezna Napomena Radnik Number Primarni ključ, Strani ključ Da Long Integer Ime Text(20) Primarni ključ Da Pol Text(1) Ne Ne Srodstvo Text(10) Ne Da DatRodj Date/Time Ne Ne

Tabela 8: Definicija tabele LOK_SEK

Kolona Tip Ključ Obavezna Napomena Sektor Number Primarni ključ, Strani ključ Da Byte Lokacija Text(50) Primarni ključ Da

Tabela 9: Definicija tabele RADI_NA

Kolona Tip Ključ Obavezna Napomena Radnik Number Primarni ključ, Strani ključ Da Long Integer Projekat Number Primarni ključ, Strani ključ Da Integer Sati number Ne Da Byte

Page 29: Baze Podataka EKIS

SQL naredbe za kreiranje podataka

29

2.2.2 Test podaci za bazu podataka PREDUZEĆE RADNIK MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 333445555 Sima F Todorović 12/8/1955 Dušanova 32 M 40000 888665555 5 453453453 Jelena P Janković 7/31/1972 Vizantijski bulevar

123/12 Ž 25000 333445555 5

666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5 888665555 Jovan S Obradović 11/10/1947 Nikole Kopernika 11 M 55000 0 1 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4 987987987 Stanko L Manojlović 3/29/1969 Nemanjina 23 M 25000 987654321 4 999887777 Valentina D Kovačević 1/19/1968 Knjeginje Ljubice

12/34 Ž 25000 987654321 4

Slika 2-2 Tabela RADNIK

SEKTOR Broj Naziv Sef DatPost 1 Uprava 888665555 6/19/19814 Administracija 987654321 1/1/1985 5 Razvoj 333445555 5/22/1988

Slika 2-3 Tabela SEKTOR

PROJEKAT Broj Naziv Lokacija Sektor1 ProizvodX Niš 5 2 ProizvodY Pirot 5 3 ProizvodZ Niš 5 10 Reorganizacija Niš 1 20 Informacioni sistem Leskovac 4 30 Godišnji izveštaj Niš 4

Slika 2-4 Tabela PROJEKAT

CLAN_PORODICE Radnik Ime Pol Srodstvo DatRodj 123456789 Ana Ž ćerka 12/30/1988123456789 Jelena Ž supruga 5/5/1966 123456789 Mihajlo M sin 1/4/1988 333445555 Milan M sin 10/25/1983333445555 Nevena Ž ćerka 4/5/1986 333445555 Teodora Ž supruga 5/3/1958 987654321 Veselin M suprug 2/28/1942

Slika 2-5 Tabela CLAN_PORODICE

LOK_SEK Sektor Lokacija1 Niš 4 Leskovac4 Niš 5 Niš 5 Pirot

Slika 2-6 Tabela LOK_SEK

Page 30: Baze Podataka EKIS

Baze podataka

30

RADI_NA Radnik Projekat Sati123456789 1 32 123456789 2 7 333445555 2 10 333445555 3 10 333445555 10 10 333445555 20 10 453453453 1 20 453453453 2 20 666884444 3 40 888665555 20 0 987654321 20 15 987654321 30 20 987987987 10 25 987987987 20 5 999887777 10 10 999887777 30 30

Slika 2-7 Tabela RADI_NA

2.3 SQL naredbe za kreiranje podataka SQL DDL naredbe se koriste za kreiranje, izmenu i brisanje same relacione baze

podataka kao i objekata koji čine relacionu baze podataka. Centralni objekat svake relacione baze podataka jeste tabela. Za kreiranje tabele koristi se SQL naredba CREATE TABLE.

CREATE TABLE <ime_tabele>

(<lista_deklaracija_kolona>

[,<lista_deklaracija_organičenja_tabele>]);

<ime_kolone><tip_podatka>[(<dužina>)] [<ograničenje_kolone>],

Deklaracija kolone sadrži ime kolone, tip podatka kolone, opciono dužinu (ako je neophodna, u zavisnosti od tipa podatka) i opciono, ograničenja za kolonu. Deklaracije kolona se razdvojaju zapetama. U odeljku Tipovi podataka navedeni su tipovi podataka koje možete koristiti. Ograničenja za kolonu su opciona i mogu da sadrže specifikaciju predefinisane vrednosti i niz specifikacija ograničenja, što je detaljnije opisano u odeljku Ograničenja kolona.

Nakon deklaracije svih kolona navode se ograničenja koja važe za celu tabelu. Specifikacije ograničenja za tabelu su navedena u odeljku Ograničenja tabele.

Navedena sintaksa naredbe CREATE TABLE nije kompletna. SQL standard obezbeđuju korišćenje velikog broja dodatnih klauzula koje korisnicima omogućavaju preciznu kontrolu procesa kreiranja tabele. Osim toga proizvođači RDBMS-ova prošuruju CREATE TABLE naredbu klauzulama koje su posledica specifičnih osobina njihovih proizvoda.

Page 31: Baze Podataka EKIS

SQL naredbe za kreiranje podataka

31

2.3.1 Tipovi podataka U Tabeli 10 su dati generički tipovi podataka koje definiše SQL standard. Ne

podržavaju svi RDBMS-ovi tipove podataka definisane u SQL standardu.

Tabela 10: Generički SQL tipovi podataka

Tip podataka Opis integer Celobrojna vrednost smallint Celobrojna vrednost numeric(p,s) Argument p definiše ukupan broj cifara broja dok argument s definiše broj cifara desno

od decimalnog zareza. Npr. numeric(6, 2) je broj koji ima 4 cifre ispred decimalnog zareza i 2 cifre iza decimalnog zareza.

decimal(p,s) Argument p definiše ukupan broj cifara broja dok argument s definiše broj cifara desno od decimalnog zareza. Npr. numeric(6, 2) je broj koji ima 4 cifre ispred decimalnog zareza i 2 cifre iza decimalnog zareza.

real Broj u pokrenom zarezu jednostruke preciznosti double precision Broj u pokretnom zarezu dvostruke preciznosti float(p) Argument p definiše preciznost broja. char(x) Argument x predstavlja maksimalan broj karaktera koji kolona može da prihvati. Ovaj tip

definiše tekstualne podatke fiksne dužine, odnosno podataka se dopunjuje blanko znacima sa desne strane kako bi se obezbedila specificirana dužina.

varchar2(x) Argument x predstavlja maksimalan broj karaktera koji kolona može da prihvati. Ovaj tip definiše tekstualne podatke promenljive dužine (nema dopunjavanja blanko znacima).

bit(x) Argument x definiše maksimalan broj bitova koje podataka može da prihvati. Podaci su fiksne dužine.

bit varying(x) Argument x definiše maksimalan broj bitova koje podataka može da prihvati. Podaci su promenljive dužine.

date Datum. time Vreme. timestamp Datum i vreme. time with time zone time koji uključuje i informaciju o vremenskoj zoni. timestamp with time zone

timestamp koji uključuje i informaciju o vremenskoj zoni..

Interval Vremenski interval.

U Tabeli 11 su navedeni tipovi podataka koje implementira Microsoft SQL Server familija proizvoda.

Tabela 11: Tipovi podataka koje implementira MS SQL Server

Tip podataka Opis binary(n) Argument n (1 do 8000) definiše maksimalan broj bajtova koji kolona može da prihvati. Ovaj tip

definiše binarne podatke fiksne dužine. char(n) Argument n (1 do 8000) predstavlja maksimalan broj karaktera koji kolona može da prihvati. Ovaj

tip definiše tekstualne podatke fiksne dužine, odnosno podataka se dopunjuje blanko znacima sa desne strane kako bi se obezbedila specificirana dužina.

datetime Tip podataka koji se koristi za predstavljanje informacija o vremenu i datumu. Koristi 8 bajtova za pamćenje informacija o datumu i vremenu sa preciznošću od 3,33 milisekunde. Mogu se predstaviti podaci o datumu i vremenu u opsegu od 01.01.1753 do 31.12.9999. godine.

image Binarni podaci promenljive dužine. Maksimalan broj bajtova koji kolona može prihvatiti je 2^31 - 1 (2,147,483,647).

int Celobrojna vrednost u opsegu od -2^31 (-2,147,483,648) do 2^31 - 1 (2,147,483,647). numeric(p, s) Argument p (1 do 38) definiše ukupan broj cifara broja dok argument s (0 ≤ s ≤ p) definiše broj

cifara desno od decimalnog zareza. Mogu se predstaviti brojevi u opsegu od - 10^38 +1 through 10^38 – 1.

smalldatetime Tip podataka koji se koristi za predstavljanje informacija o vremenu i datumu. Koristi 4 bajta za

Page 32: Baze Podataka EKIS

Baze podataka

32

pamćenje informacija o datumu i vremenu sa preciznošću od 1 minuta. Mogu se predstaviti podaci o datumu i vremenu u opsegu od 01.01.1900 do 06.06.2079. godine.

smallint Colobrojna vrednost u opsegu od -2^15 (--32,768) do 2^15 - 1 (-32,767). text Tip podataka koji se koristi za predstavljanje tekstualnih podataka promenljive dužine. Maksimalna

dužina je 2^31 - 1 (2,147,483,647) bajtova. tinzint(x) Colobrojna vrednost u opsegu od 0 do 255. varchar(n) Argument x definiše maksimalan broj bitova koje podataka može da prihvati. Podaci su

promenljive dužine.

Primer: SQL DDL naredbe za kreiranje tabela RADNIK i SEKTOR CREATE TABLE RADNIK ( MatBr Int, Ime VarChar(15), SSlovo Char(1), Prezime VarChar(15), DatRodj Date, Pol Char(1), Plata Numeric(8, 2), Adresa VarChar(30), Rukovodilac Int, Sektor Int ); CREATE TABLE SEKTOR ( Broj Int, Naziv VarChar(15), Sef Int, DatPost Date );

2.3.2 Ograničenja kolone Ograničenja koja možete da definišete za kolonu kod kreiranja tabela su:

• NULL ili NOT NULL –definiše da kolona može ili ne može imatu NULL vrednosti.

• UNIQUE – definiše da kolona ima jedinstvene vrednosti (kandidati za ključeve).

• PRIMARY KEY – definiše da kolona predstavlja primarni ključ tabele (može da se primeni na samo jednu kolonu u tabeli).

• CHECK –definiše ograničenje za proveru vrednosti kolone (koristi se kod upisa ili ažuriranja vrednosti).

• DEFAULT – definiše podrazumevanu vrednost za kolonu (kolona uzima ovu vrednost, ako vrednost kolone nije navedena).

• REFERENCES –definiše da kolona predstavlja spoljni ključ tabele.

Za vrednost kolone se mogu specificirati ograničenja NULL ili NOT NULL čime se dozvoljava ili zabranjuje NULL vrednost kolone. Strože ograničenje je UNIQUE, koje ne dozvoljava ponavljanje vrednosti u koloni.

Page 33: Baze Podataka EKIS

SQL naredbe za kreiranje podataka

33

Za kolonu podrazumevano ograničenje je NULL vrednost. To znači da navodimo samo ograničenje NOT NULL, ako je definisano za konkretnu kolonu.

Kod navođenja PRIMARY KEY podrazumeva se NOT NULL ograničenje za tu kolonu, tako da ga ne treba posebno navoditi.

Pri kreiranju tabele u kojoj je atribut A primarni ključ, a atribut B spoljni ključ možete koristi oblik naredbe sledeći CREATE TABLE.

CREATE TABLE <imeTabele> ( A <tip_podatka> PRIMARY KEY, B <tip_podatka> REFERENCES <ime_ref_tabele>(<ime_ref_kolone>), ostali atributi );

Uočite da kod deklaracije spoljnog ključa tabele treba navesti iza ključne reči REFERENCES ime referencirane tabele i opciono, u maloj zagradi, ime referencirane kolone u toj tabeli. Oracle SQL očekuje da je referencirana kolona primarni ključ (kolona deklarisana sa PRIMARY KEY) u referenciranoj tabeli.

Na taj način atribit iza koga stoji klauzula REFERENCES definisan je kao spoljni ključ u odnosu na primarni ključ tabele čije je ime navedeno iza klauzule REFERENCES.

Primer: SQL DDL naredba za kreiranje tabele PROJEKAT CREATE TABLE PROJEKAT ( Broj Int PRIMARY KEY, Naziv VarChar(25) NOT NULL, Lokacija VarChar(15) DEFAULT("Niš"), Sektor Integer REFERENCES SEKTOR(Broj) );

2.3.3 Ograničenja tabele Za definisanje ograničenja koja važe za tabelu u celini možete koristiti:

• PRIMARY KEY – definiše koja kolona ili koje kolone čine primarni ključ tabele.

• UNIQUE – definiše koja kolona ili koje kolone imaju jedinstvene vrednosti (kandidati za ključeve).

• FOREIGN KEY – definiše koja kolona ili koje kolone čine spoljni ključ tabele.

• CHECK –definiše ograničenja vrednosti kolone ili kolona koje DBMS proverava kod upisa ili ažuriranja vrednosti te ili tih kolona.

Za kreiranje tabele u kojoj je skup atributa (a,b,c) primarni ključ možete koristiti oblik sledeći oblik CREATE TABLE naredbe:

Page 34: Baze Podataka EKIS

Baze podataka

34

CREATE TABLE < ime_tabele > ( <atributi i njihovi tipovi podataka>, PRIMARY KEY (a,b,c) );

Atribute a, b i c treba deklarisati u sekciji < atributi i njihovi tipovi podataka >.

Primer: DDL naredba za kreiranje tabele RADI_NA CREATE TABLE RADI_NA ( Radnik Int, Projekat Int, Sati Int NOT NULL, CONSTRAINT RadiNaPK PRIMARY KEY (Radnik, Projekat) );

U deklaraciji kolone ili tabele, nakon klauzule REFERENCES, mogu se navesti klauzule ON DELETE ili ON UPDATE koje specificiraju aktivnosti u slučaju narušavanja integriteta.

ON DELETE omogućava specifikaciju aktivnosti nad torkama relacije, odnosno vrstama tabele, na koju se referencirate u REFERENCES klauzuli u slučaju brisanja torki u tabeli u kojoj je navedeno ovo ograničenje.

ON UPDATE omogućava specifikaciju aktivnosti nad torkama referencirane tabele u slučaju ažuriranja (promene vrednosti) podataka u tabeli gde je REFERENCES ograničenje specificirano.

U oba slučaja, iza ovih klauzula se navodi jedna od klauzula koja definiše aktivnost koja će se izvršiti nad torkama u slučaju brisanja ili ažuriranja vrednosti torke u tabeli u kojoj je ograničenje navedeno:

• NO ACTION – nema akcije (ovo je predefinisana vrednost).

• CASCADE – kaskadno izvršenje aktivnosti brisanja (brišu se torke u tabeli na koju se referencirate) kod ON DELETE ili aktivnosti ažuriranja (ažuriraju se vrednosti referenciranih atributa) kod ON UPDATE.

• SET DEFAULT – promena vrednosti atributa u tabeli na koju se referencirate na predefinisanu vrednost.

• SET NULL – promena vrednosti atributa u tabeli na koju se referencirate na NULL.

Ne zaboravite da je kod deklarisanja FOREIGN KEY ograničenja na kraju deklaracije tabele, neophodno navesti listu referentnih atributa u okviru zagrada, tako da CREATE TABLE naredba ima sledeći oblik:

CREATE TABLE <naziv_tabele> ( FOREIGN KEY (<lista_atributa_koji_čine_spoljni_ključ>) REFERENCES (<lista_referenciranih_atributa>)

Page 35: Baze Podataka EKIS

SQL naredbe za kreiranje podataka

35

[ON DELETE { NO ACTION | CASCADE | SET DEFAULT |SET NULL}] [ON UPDATE { NO ACTION | CASCADE | SET DEFAULT |SET NULL}] CHECK (<uslovni_izraz>) );

Primer: DDL naredba za kreiranej tabele CLAN_PORODICE CREATE TABLE RADI_NA ( Radnik Int, Projekat Int, Sati Int NOT NULL, CONSTRAINT RadiNaPK PRIMARY KEY (Radnik, Projekat), CONSTRAINT RadnikFK FOREIGN KEY (Radnik)

REFERENCES RADNIK(MatBr), CONSTRAINT ProjekatFK FOREIGN KEY (Projekat)

REFERENCES PROJEKAT(Broj) );

DDL naredbe za kreiranje baze podataka PREDUZEĆE CREATE TABLE RADNIK ( MatBr Int, Ime VarChar(15) NOT NULL, SSlovo Char(1), NOT NULL, Prezime VarChar(15) NOT NULL, DatRodj Date, Pol Char(1) DEFAULT "M", Plata Numeric(8, 2) CHECK (PLATA > 1000), Adresa VarChar(30), Rukovodilac Int, Sektor Int NOT NULL, CONSTRAINT RadnikPK PRIMARY KEY (MatBr), CONSTRAINT RukovodiFK FOREIGN KEY (Rukovodilac)

REFERENCES RADNIK(MatBr), CONSTRAINT SektorFK1 FOREIGN KEY (Sektor)

REFERENCES SEKTOR(Broj) ); CREATE TABLE SEKTOR ( Broj Int, Naziv VarChar(15) NOT NULL, Sef Int NOT NULL, DatPost Date, CONSTRAINT SektorPK PRIMARY KEY (Broj), CONSTRAINT SefFK FOREIGN KEY (Sef)

REFERENCES RADNIK(MatBr) ); CREATE TABLE PROJEKAT ( Broj Int, Naziv VarChar(25) NOT NULL, Lokacija VarChar(15) DEFAULT "Niš", Sektor Integer NOT NULL, CONSTRAINT ProjekatPK PRIMARY KEY (Broj), CONSTRAINT NadlezanFK FOREIGN KEY (Sektor)

REFERENCES SEKTOR(Broj) );

Page 36: Baze Podataka EKIS

Baze podataka

36

CREATE TABLE CLAN_PORODICE ( Radnik Int, Ime VarChar(15), Pol Char(1) NOT NULL DEFAULT "M", DatRodj Date, CONSTRAINT ClanPorodicePK PRIMARY KEY (Radnik, Ime), CONSTRAINT RoditeljFK FOREIGN KEY (Radnik)

REFERENCES RADNIK(MatBr) ); CREATE TABLE LOK_SEK ( Sektor Int, Lokacija VarChar(15), CONSTRAINT LokacijaPK PRIMARY KEY (Sektor, Lokacija), CONSTRAINT SektorFK2 FOREIGN KEY (Sektor)

REFERENCES SEKTOR(Broj) ); CREATE TABLE RADI_NA ( Radnik Int, Projekat Int, Sati Int NOT NULL, CONSTRAINT RadiNaPK PRIMARY KEY (Radnik, Projekat), CONSTRAINT RadnikFK FOREIGN KEY (Radnik)

REFERENCES RADNIK(MatBr), CONSTRAINT ProjekatFK FOREIGN KEY (Projekat)

REFERENCES PROJEKAT(Broj) );

2.3.4 Praktičan rad: Microsoft Access Proučiti detaljno funkcije MS Access-a kao alata za razvoj aplikacija i DBMSa,

kreirati novu bazu podataka i u njoj kreirati tabele iz nekog od primera (PREDUZEĆE, VIDEO KLUB i sl).

Kratko uputstvo za korišćenje MS Access-a:

1. Kreiranje baze podataka

a. Startujte MS Access - Windows , Programs, pronaći ikonicu za Access

b. Pojaviće se početna upozorenja koja se odnose na sigurnost i treba ih potvrditi

c. Kreirati novu bazu podataka - kada se otvori Access, Create New database, kao na slici, a nakon toga izabrati Blank Database i uneti ime baze podataka:

Page 37: Baze Podataka EKIS

SQL naredbe za kreiranje podataka

37

Slika 2-8 Kreiranje nove MS Access baze podataka

Slika 2-9 Dodeljivanje imena i snimanje kreirane baze podataka

Klik na Create a new file…

Unesite ime baze podataka

Page 38: Baze Podataka EKIS

Baze podataka

38

2. Kreiranje tabela i izbor ključa – nakon otvaranja Database Window-a kao na slici:

Slika 2-10 Kreiranje nove tabele

a. Počnte sa kreiranjem tabela klikom na Table i Create Table in Design View:

Slika 2-11 Definisanje kolona

Page 39: Baze Podataka EKIS

SQL naredbe za kreiranje podataka

39

b. Kreirajte sve tabele iz baze podataka koju ste projektovali tako što ćete da unesete imena i tipove kolona:

Slika 2-12 Izbor tipova kolona

c. i snimite tabelu pod željenim imenom.

d. Domen atributa odredite tipom podataka koji nudi Access:

Ime Tip podataka Veličina

Text Brojevi i karakteri, tekst Maksimalno 255 znakova

Memo Veliki tekst Maksimalno 65,535 znakova

Number Numerički podaci Različiti tipovi brojeva

Date/Time Datum i vreme Od 100-te godine do 9999

Currency Brojevi sa dec.tačkom, za valute

1 do 4 decimalna mesta

AutoNumber Jedinstveni sekv.broj Povećava se za 1, za ID

Yes/No Dve vrednosti sa značenjem Da/Ne

Yes/No, On/Off, True/False, itd.

Hyperlink Adresa hyperlink-a Maksimalno 2048 znakova u svakom delu adrese

OLE Object Ugrađeni OLE objekat Makcimalno 1 gigabyte

Page 40: Baze Podataka EKIS

Baze podataka

40

e. Izaberite ključni atribut, selekcijom tog atributa i klikom na ikonicu sa ključem na toolbar-u.

3. Tabele možete modifikovati tako što ćete iz istog prozora da klikom na tabelu i izborom opcije Design.

4. Unos i modifikacija podataka u tabeli – jednostavno dvostrukim klikom na tabelu otvara se tabela u modu za prikaz i unos podataka. Možete da unosite nove vrste ili da menjate postojeće:

Slika 2-13 Unos podataka u tabelu

5. Podešavanja za očuvanje referencijalnog integriteta

a. Izabrati ikonicu za Relationship i otvoriće vam se sledeći prozor u kome možete da dodate tabele između kojih ćete definisati veze za očuvanje referencijalnog integriteta:

Slika 2-14 Povezivanje tabela

b. Za kreiranje veze između dve tabele jednostavno kliknite i povucite ključ jedne tabele i prevucite ga preko stranog ključa u drugoj tabeli. Podesite ograničenja:

Page 41: Baze Podataka EKIS

SQL naredbe za kreiranje podataka

41

Slika 2-15 Definisanje ograničenja

Page 42: Baze Podataka EKIS

3 Naredba SELECT – I deo 3.1 Uvod

Pretraživanje i pribavljanje podataka su najčešće operacije koje korisnici izvršavaju u relacionoj bazi podataka. Za pretraživanje i pribavljanje podataka SQL programski jezik obezbeđuje naredbu SELECT. Naredba SELECT pribavlja podatke iz jedne tabele ili više povezanih tabela koje se nalaze u relacionoj bazi podataka. U svom osnovnom obliku naredba SELECT ne može ni na koji način da izmeni podatke koji se nalaze u relacionoj bazi podataka.

Naredba SELECT je deklarativna naredba. Korišćenjem ove naredbe korisnici imaju mogućost samo da specificiraju rezultate koje žele. Sa druge strane RDBMS je zadužen da isplanira, optimizuje i izvrši fizičke operacije neophodne za generisanje specificiranih rezultata.

Rezultat SELECT naredbe je uvek relacija. Naredba SELECT koristi podatke iz jedne ili većeg broja tabela, manipulište tim podacima i kao rezultat generiše tabelu. Čak i kada je rezultat obrade skalarna vrednost ona se tretira kao tabela sa jednom vrstom i jednom kolonom.

3.2 Naredba SELECT Naredba SELECT je jedna od najkompleksnijih naredbi SQL programskog jezika.

Uključuje veći broj ključnih reči klauzula:

• SELECT – definiše listu kolona koje će biti uključene u rezultujuću tabelu

• FROM – definiše tabele iz kojih se pribavljaju podaci za potrebe generisanja rezultujuće tabele. Klauzula FROM može da uključi jednu ili više opcionih JOIN klauzula za povezivanje tabela na osnovu kriterijuma zadatih od strane korisnika.

• WHERE – definiše predikat na osnovu koga se ograničava broj vrsta u rezultujućoj tabeli. Ova klauzula iz rezultata eliminiše sve vrste za koje specificirani predikat ne vraća vrednost TRUE.

• GROUP BY – grupiše vrste koje u određenim kolonama imaju identične vrednosti.

• HAVING – definiše predikat na osnovu koga se elimišu vrste nakon što je klauzula GROUP BY primenjena na rezultujuću tabelu.

Page 43: Baze Podataka EKIS

Naredba SELECT – I deo

43

• ORDER BY – koristi se za sortiranje rezultujuće tabele. Korisnici specificiraju kolone po kojima se vrši sortiranje kao i smer sortiranja.

3.3 Kaluzule SELECT i FROM Klauzule SELECT i FROM su jedine obavezne u okviru SELECT naredbe. klauzula

FROM specificira tabele iz kojih se pribavljaju podaci. Ukoliko se navede više tabela potrebno je specificirati način spajanja tabela. Spajanje tabela će biti detaljno objašnjeno u narednoj lekciji. Za sada ćemo se ograničiti samo na pribavljanje podataka iz jedne tabele.

Klauzula SELECT specificira kolone koje treba uključiti u rezultujuću tabelu. Mogu se koristiti sledeće opcije:

• ALL – u rezultujućoj tabeli prikazuju se sve vrste koje zadovoljavaju navedeni predikat

• DISTINCT – iz rezultujuće tabele izbacuju se duplikati vrsta

• * - rezultujuća tabela uključuje sve kolone tabele ili tabela iz kojih se pribavljaju podaci

• tabela.* - rezultujuća tabela uključuje sve kolone specificirane tabele

• izraz - ime kolone ili funkcije nad kolonama koja će biti uključena u rezultujuću tabelu

• AS pseudonim - novo ime kolone ili funkcije nad kolonama koje im se dodeljuje u rezultujućoj tabeli

Primer 1 U nastavku je dat SQL upit koji prikazuje kompletan sadržaj tabele RADNIK SELECT * FROM RADNIK;

Primer 1 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 333445555 Sima F Todorović 12/8/1955 Dušanova 32 M 40000 888665555 5 453453453 Jelena P Janković 7/31/1972 Vizantijski bulevar 123/12 Ž 25000 333445555 5 666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5 888665555 Jovan S Obradović 11/10/1947 Nikole Kopernika 11 M 55000 0 1 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4 987987987 Stanko L Manojlović 3/29/1969 Nemanjina 23 M 25000 987654321 4 999887777 Valentina D Kovačević 1/19/1968 Knjeginje Ljubice 12/34 Ž 25000 987654321 4

Rezultat bi bio ekvivalenta da smo napisali upit kod koga su umesto * navedena imena svih kolona u tabeli.

SELECT MatBr, ime, Sslovo, Prezime, DatRodj, Adresa, pol, Plata, Rukovodilac, Sektor FROM RADNIK;

Page 44: Baze Podataka EKIS

Baze podataka

44

Primer 2 Ukoliko želimo da prikažemo samo određene kolone iz tabele RADNIK posle

SELECT klauzule navešćemo imena kolona koje su od interesa. U nastavku je dat SQL upit koji prikazuje samo imena i prezimena radnika.

SELECT Ime, Prezime FROM RADNIK;

Primer 2 Ime Prezime Marko Petrović Sima Todorović Jelena Janković Velibor Jovanović Jovan Obradović Aleksandra Petrović Stanko ManojlovićValentina Kovačević

Redosled kojim su kolone navedene u klauzuli SELECT definiše redosled kolona u rezultujućoj tabeli. U nastavku je dat SQL upit koji prikazuje imena i prezimena svih radnika ali u nešto drugačijem redosledu.

SELECT Prezime, Ime FROM RADNIK;

Primer 2 Prezime Ime Petrović Marko Todorović Sima Janković Jelena Jovanović Velibor Obradović Jovan Petrović AleksandraManojlović Stanko Kovačević Valentina

Primer 3

U nastavku je dat SQL upit koji za svakog radnik određuje matični broj njegovog neposrednog rukovodioca.

SELECT Rukovodilac FROM RADNIK;

Primer 3 Rukovodilac333445555 888665555 333445555 333445555 0 888665555 987654321 987654321

Page 45: Baze Podataka EKIS

Naredba SELECT – I deo

45

Možemo da primetimo da se u rezultujućoj tabeli neki matični brojevi javljaju više puta. To je posledica činjenice da veći broj radnika može imati istog rukovodioca. Ukoliko želimo da eliminišemo duplikate koristićemo ključnu reč DISTINCT.

SELECT DISTINCT Rukovodilac FROM RADNIK;

Primer 3 Rukovodilac0 333445555 888665555 987654321

3.4 Klauzula WHERE

Klauzula WHERE specificira uslov na osnovu koga se kreira rezultujuća tabela. U rezultujuću tabelu će biti uključene samo one vrste koj ezadovoljavaju specificirani uslov. U uslovu se mogu javiti:

1. Relacioni operatori 2. Logički operatori 3. Operator BETWEEN 4. Operator IN 5. Operator LIKE 6. Operator IS NULL

SQL podržava šest relacionih operatora koji imaju sledeće značenje:

1. = Jednako 2. <> Nije jednako(različito) 3. < Manje od 4. > Veće od 5. <= Manje ili jednako a 6. >= Veće ili jednako

Primer 4 U ovom primeru dat je SQL upit koji prikazuje podatke o radnicima koji se prezivaju

Petrović. SELECT * FROM RADNIK WHERE Prezime = "Petrović";

Primer 4 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor 123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4

Treba primetiti da se tekstualni podaci zadaju korišćenjem znaka navoda: "Petrović".

Page 46: Baze Podataka EKIS

Baze podataka

46

Primer 5 Primer sadrži SQL upit koji prikazuje imena i prezimena radnika čija je plata jednaka

ili veća od 40000. SELECT Ime, Prezime FROM RADNIK WHERE PLATA >= 40000;

Primer 5 Ime Prezime Sima TodorovićAleksandra Petrović Jovan Obradović

SQL omogućava korišćenje standardnih logičkih operatore AND, OR i NOT, ali i operatore IN i BETWEEN koji omogućavaju jednostavnije korišćenje prethodno

navedenih operatora u nekim slučajevima.

Prioritet logičkih operatora je sledeći:

1. NOT 2. AND 3. OR

Logički operatori AND i OR se koriste na standardni način. Međutim, kod SQL-a, logički operator negacije NOT se navodi na početku logičkog izraza, a ne ispred operatora poređenja. Na primer, NOT A = B je validni WHERE uslov, ali A NOT = B nije.

Primer 6 Ukolimo želimo da prikažemo podatke o radnicima koji se prezivaju Petrović i čija je

plata jednaka ili veća od 40000 možemo koristiti SQL upit koji je dat u nastavku. SELECT * FROM RADNIK WHERE Prezime = "Petrović" AND Plata >= 40000;

Primer 6 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4

Primer 7 U nastavku je dat SQL upit koji prikazuje podatke o radnicima koji se prezivaju

Petrović i čija je plata jednaka ili veća od 40000. SELECT * FROM RADNIK WHERE Prezime = "Petrović" AND NOT Plata >= 40000;

Primer 7 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor 123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5

Primer 8 Primer sadrži SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrović

ili se prezivaju Jovanović.

Page 47: Baze Podataka EKIS

Naredba SELECT – I deo

47

SELECT * FROM RADNIK WHERE Prezime = "Petrović" OR Prezime = "Jovanović";

Primer 8 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor 123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4 666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5

IN zamenjuje višestruku upotrebu operatora OR i = . Operator NOT IN prikazuje sve

vrste osim onih određenih IN listom.

Primer 9 Korišćenjem operatora IN izdvajaju se samo radnici koji se prezivaju Petrović ili

Jovanović. SELECT * FROM RADNIK WHERE Prezime IN ("Petrović","Jovanović");

Primer 9 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor 123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4 666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5

Naredni upit pribavlja podatke o svim radnicima osim onih koji se prezivaju Petrović ili Jovanović.

SELECT * FROM RADNIK WHERE Prezime IN ("Petrović","Jovanović");

Primer 9 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor333445555 Sima F Todorović 12/8/1955 Dušanova 32 M 40000 888665555 5 999887777 Valentina D Kovačević 1/19/1968 Knjeginje Ljubice 12/34 Ž 25000 987654321 4 453453453 Jelena P Janković 7/31/1972 Vizantijski bulevar 123/12 Ž 25000 333445555 5 987987987 Stanko L Manojlović 3/29/1969 Nemanjina 23 M 25000 987654321 4 888665555 Jovan S Obradović 11/10/1947 Nikole Kopernika 11 M 55000 0 1

Operator BEETWEEN zamenjuje višestruku upotrebu operatora AND i =. Ovaj operator omogućava ispitivanje da li je vrednost atributa/kolone u zadatom opsegu.

Primer 10

Za prikazivanje podataka o radnicima čija je plata u opsegu od 30000 do 40000 (uključujući i granice opsega) možemo iskoristiti operator BETWEEN.

SELECT * FROM RADNIK WHERE Plata BETWEEN 30000 AND 40000;

Page 48: Baze Podataka EKIS

Baze podataka

48

Primer 10 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor 123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 333445555 Sima F Todorović 12/8/1955 Dušanova 32 M 40000 888665555 5 666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5

Operator LIKE omogućava poređenje vrednosti kolone sa zadatim šablonom. Kod definisanja šablona koristi se procenat (%) i znak pitanja (?). Procenat (%) predstavlja bilo koji mogući znak (broj, slovo, interpunkcijski znak) ili skup znakova. Znak pitanja (?) zamenjuje samo jedan znak.

Primer 11 Za zadavanje šablona MS Access koristi nešto drugačije simbole. Umesto procenta

koristi se zvezdica (*). U narednom primeru * iza slova "J" označava proizvoljan broj znakova (0 ili više), odnosno predstavlja uzorak za poklapanje koji sadrži na početku slovo "J" i proizvoljan broj znakova iza njega. Za nalaženje svih radnika koji imaju "J" na početku prezimena, može se koristiti šablon "J%".

SELECT * FROM RADNIK WHERE Prezime LIKE "J*";

Primer 11 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor 666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5 453453453 Jelena P Janković 7/31/1972 Vizantijski bulevar 123/12 Ž 25000 333445555 5

Za nalaženje svih radnika koji sadrže slovo "J" negde u prezimenu mogao bi se koristiti šablon "*J*". Obratite pažnju da se ne pravi razlika između malih i velikih slova.

Operator NOT LIKE prikazuje sve vrste koje ne odgovaraju prethodno datom opisu, tj za prethodni slučaj, sve radnike koji nemaju slovo "J" u svom prezimenu.

Operator IS NULL se koristi za poređenje sa NULL vrednostima. Treba voditi računa da se na NULL v ednosti ne može primenti ne može primeniti ni jedan relacioni operator. Može se samo proveravati da li kolona ima NULL vrednost ili nema.

Primer 12

U nastavku je dat SQL upit koji izdvaja podatke o svim radnicima kojima nije definisan datum rođenja odnosno datum rođenja ima NULL vrednost.

SELECT * FROM RADNIK WHERE DatRodj IS NULL;

3.5 Klauzula ORDER BY Klauzula ORDER BY specificira redosled prikazivanja vrste rezultujuće tabele,

sortiranjem po vrednosti nekih kolona u rastući (ASC) (predefinisana vrednost) ili opadajući redosled (DESC). Ukoliko klauzula ODER BY nije navedena vrste u

Page 49: Baze Podataka EKIS

Naredba SELECT – I deo

49

rezultujućoj tabeli su poređane po slučajnom principu i ne postoji nikakva garancije da će isti upit uvek generisati rezultujuću tabelu čije su vrste poređane na isti način.

Primer 13 U nastavku je dat SQL upit koji prikazuje podatke o radnicima i sortira ih prema

prezimenu u opadajućem i rastućem redosledu. SELECT FROM RADNIK ORDER BY Prezime;

Primer 13 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor453453453 Jelena P Janković 7/31/1972 Vizantijski bulevar 123/12 Ž 25000 333445555 5 666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5 999887777 Valentina D Kovačević 1/19/1968 Knjeginje Ljubice 12/34 Ž 25000 987654321 4 987987987 Stanko L Manojlović 3/29/1969 Nemanjina 23 M 25000 987654321 4 888665555 Jovan S Obradović 11/10/1947 Nikole Kopernika 11 M 55000 0 1 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4 123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 333445555 Sima F Todorović 12/8/1955 Dušanova 32 M 40000 888665555 5

Obratite pažnju da ukoliko vrste sortirate u rastućem redosledu nije potrebno eksplicitno navesti smer sortiranja. Rastući redosled je podrazumevan u ORDER BY klauzuli.

SELECT FROM RADNIK ORDER BY Prezime DESC;

Primer 13 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor333445555 Sima F Todorović 12/8/1955 Dušanova 32 M 40000 888665555 5 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4 123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 888665555 Jovan S Obradović 11/10/1947 Nikole Kopernika 11 M 55000 0 1 987987987 Stanko L Manojlović 3/29/1969 Nemanjina 23 M 25000 987654321 4 999887777 Valentina D Kovačević 1/19/1968 Knjeginje Ljubice 12/34 Ž 25000 987654321 4 666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5 453453453 Jelena P Janković 7/31/1972 Vizantijski bulevar 123/12 Ž 25000 333445555 5

Primer 14 Sortiranje je moguće vršiti na osnovu vrednosti više kolona. SQL upit u nastavku

sortira podatke o radnicima prema broju sektora u opadajućem redosledu a prema prezimenu u rastućem redosledu.

SELECT FROM RADNIK ORDER BY Sektor DESC, Prezime ASC;

Page 50: Baze Podataka EKIS

Baze podataka

50

Primer 14 MatBr Ime SSlovo Prezime DatRodj Adresa Pol Plata Rukovodilac Sektor 453453453 Jelena P Janković 7/31/1972 Vizantijski bulevar 123/12 Ž 25000 333445555 5 666884444 Velibor T Jovanović 9/15/1962 Knjaževačka 132/12 M 36000 333445555 5 123456789 Marko J Petrović 1/9/1965 Obilićev Venac 11 M 30000 333445555 5 333445555 Sima F Todorović 12/8/1955 Dušanova 32 M 40000 888665555 5 999887777 Valentina D Kovačević 1/19/1968 Knjeginje Ljubice 12/34 Ž 25000 987654321 4 987987987 Stanko L Manojlović 3/29/1969 Nemanjina 23 M 25000 987654321 4 987654321 Aleksandra S Petrović 6/20/1941 Knjaževačka 11 Ž 43000 888665555 4 888665555 Jovan S Obradović 11/10/1947 Nikole Kopernika 11 M 55000 0 1

3.6 Aritmetičke funkcije i funkcije agregacije SQL dozvoljava korišćenje matematičkih funkcija u SELECT i WHERE klauzulama.

Na taj način se kao rezultat pretraživanja mogu prikazati rezultati izračunavanja nekog matematičkog izraza.

Primer 15 U nastavku je dat SQL upit koji prikazuje imena i prezimena radnika kao i njihove

plate uvećane za bonus od 5000. SELECT Ime, Prezime, Plata + 5000 PlataSaBonusom FROM RADNIK;

Primer 15 Ime Prezime PlataSaBonusomMarko Petrović 35000 Sima Todorović 45000 Jelena Janković 30000 Velibor Jovanović 41000 Jovan Obradović 60000 Aleksandra Petrović 48000 Stanko Manojlović 30000 Valentina Kovačević 30000

Obratite pažnju da je rezultatu matematičke funkcije (Plata + 5000) dodeljeno ime korišćenjem sintakse pseudonima: AS PlataSaBonusom.

Aritmetičke funkcije se mogu primenjivati i u WHERE klauzuli. SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom FROM RADNIK WHERE Plata + 5000 > 40000;

Ime Prezime PlataSaBonusomSima Todorović 45000 Aleksandra Petrović 48000 Velibor Jovanović 41000 Jovan Obradović 60000

Page 51: Baze Podataka EKIS

Naredba SELECT – I deo

51

Funkcije agregacije su dobile naziv po tome što vrše agregaciju rezultata upita. Korišćenje ovih funkcija je jednostavno, pošto se navode u listi kolona SELECT klauzule koje se prikazuju. Značenje funkcija je sledeće:

• AVG(kolona) - izračunava srednju vrednost datog atributa

• SUM(kolona) - izračunava sumu svih vrednosti atributa

• MIN(kolona) - nalazi minimalnu vrednost atributa

• MAX(kolona) - nalazi najveću vrednost atributa

• COUNT(*) - nalazi broj vrsta u tabeli (grupi)

• COUNT(kolona) - nalazi broj broj vrsta sa ne NULL vrednostima kolone

• COUNT (DISTINCT kolona) - nalazi broj vrsta sa različitim vrednostima zadate kolone (nije podržano od strane MS Access-a)

Primer 16 Funkcija COUNT određuje broj vrsta u rezultujućoj tabeli. SELECT COUNT(*) AS PlataSaBonusom FROM RADNIK;

Primer 16 UkupnoRadnika8

Sledeći SQL upit određuje maksimalnu, minimalnu, prosečnu i ukupnu platu svih radnika.

SELECT MAX(Plata) AS MaxPlata, MIN(Plata) AS MinPlata, AVG(Plata) AS ProsPlata, SUM(Plata) AS UkPlata

FROM RADNIK;

Primer 16 MaxPlata MinPlata ProsPlata UkPlata55000 25000 34875 279000

Primer 17 Posebno je bitno zapamtiti da funkcije agregacije nije moguće koristiti u WHERE

klauzuli. To je posledica činjenice da se rezultat funkcija agregacija izračunava nakon što se odrede vrste koje ulaze u sastav rezultujuće tabele, odnosno nakon obrade predikta koji je zadta u WHERE klauzuli. U nastavku je dat SQL upit koji se NE MOŽE IZVRŠITI i koji će GENERISATI GREŠKU.

SELECT Ime, Prezime, Plata FROM RADNIK WHERE Plata > AVG(Plata).

Page 52: Baze Podataka EKIS

Baze podataka

52

3.7 Praktičan rad: MS Access Rad sa SQL programskim jezikom u okviru MS Access-a se bazira na korišćenju

Query objekata u SQL View modu. Za primer ćemo uzeti najednostavnij upit koji prikazuje sve podatke iz tabele CUSTOMER.

SELECT * FROM Customer;

1. Startujte MS Access - Windows , Programs, pronaći ikonicu za Access

2. U meniju izaberite stavku File | Open. Prikazaće se Open dijalog. Pronađite PREDUZECE.mdb datoteku na disku, selektujte je i kliknite na dugme Open. Kada se pojavi Security Warning dijalog, kliknite dugme Open da bi ste otvorili bazu podataka.

3. U prozoru PREDUZECE:Database, na Objects traci izaberite stavku Queries (slika 3-1).

Slika 3-1 Kreiranje novog upita

4. Izaberite stavku Create Query in Design View. Nakon toga se pojavljuje prozor Query 1: Select Query i dijalog Show Table (slika 3-2).

5. Korišćenjem dugmeta Close zatvorite Show Table dijalog. Prikazaće se prozor Query 1: Select Query kao na slici 3-3. Ovaj prozor se koristi za kreiranje upita

Traka Objects

Dvostruki klik na stavku Create Query in Design View za kreiranje novog upita.

Page 53: Baze Podataka EKIS

Naredba SELECT – I deo

53

korišćenjem MS Access QBE alata. Za sada nećemo koristiti ovaj alat već ćemo direktno unositi SQL upite. Obratite pažnju na SQL View dugme na toolbar-u.

Slika 3-2 Dodavanje tabela u upit

Slika 3-3 Prelazak u SQL View režim

5. Kliknite na SQL View dugme na Query Design toolbar-u. Prozor Query 1: Select Query se prebacuje u SQL View režim rada (slika 3-4). Obratite pažnju da je

Show Table

Prozor Query1 : Select

SQL ViewProzor Query1 : Select Query u

Design View režimu

Page 54: Baze Podataka EKIS

Baze podataka

54

komanda SELECT već započeta.Unesite komandu SELECT * FROM Customer kao na slici 3-5.

Slika 3-4 Unos SELECT komande

Slika 3-5 Izvršavanje upita

7. Kliknite na dugme Run na Query Design toolbar-u. Ukoliko je sve u redu prikazuje se rezultat upita kao na slici 3-6.

Tekst

Prozor Query1 : Select Query u SQL View režimu

Dugme

Dugme

Page 55: Baze Podataka EKIS

Naredba SELECT – I deo

55

8. Da bi ste snimili upit izaberite dugme Save na Query Design toolbar-u. Pojaviće se Save As dijalog kao na slici 3-7.

Slika 3-6 Rezultati upita

Slika 3-7 Snimanje upita

9. Za ime upita unesite Test i kliknite na dugme OK. Upit je snimljen i ime prozora je sada promenjeno u skladu sa novim imenom upita.

10. Zatvorite prozor Test : Select Query. Objekat Test se sada pojavljuje u listi Query objekata (slika 3-8).

Dugme

Novo ime

Page 56: Baze Podataka EKIS

Baze podataka

56

Slika 3-8 Novi upit u listi Queries

Query objekat

Page 57: Baze Podataka EKIS

4 Naredba SELECT – II deo

4.1 Uvod U ovoj lekciji će biti obrađene naprednije teme vezane za korišćenje SELECT

naredbe za pretraživanje i pribavljanje podataka iz relacione baze podataka. U prethodnoj lekciji smo obradili osnovne oblike SELECT naredbe i videli kako naredba može da se koristi za pribavljanje podataka iz jedne tabele. U ovoj lekciji upoznaćemos e sa mogućnošću grupisanja podataka po različitim kriterijumima. Videćemo kako je u rezultujućoj tabeli moguće kombinovati podatke iz nekoliko različitih tabela. Takođe, upoznaćemo se i sa mogućnostima kombinovanja rezultata većeg broja SQL upita.

4.2 Klauzule GROUP BY i HAVING U prethodnoj lekciji upoznali smo se sa funkcijama agregacije. Ove funkcije imaju

zadatak da omoguće generisanje sumarnih informacija na osnovu podataka u relacionoj bazi podataka.

Klauzula GROUP BY ima zadatak da omogući grupisanje vrsta u rezultujućoj tabeli na osnovu zajedničkih vrednosti. Time se povećava vrednost funkcija agregacije jer se u kombinaciji sa GROUP BY klauzulom mogu primenjivati na grupe vrsta a ne samo na čitavu rezultujuću tabelu.

Primer 1 Potrebno je voditi računa, da ukoliko ne postoji GROUP BY klauzula, u SELECT

klauzuli nije moguće kombinovati funkcije agregacije sa imenima kolona. U nastavku je dat SQL upit koji NE MOŽE DA SE IZVRŠI i koji će dovesti do POJAVE GREŠKE.

SELECT Ime, Prezime, SUM(Plata) FROM RADNIK;

Ovaj upit je moguć samo uz upotrebu GROUP BY klauzule.

Klauzula GROUP BY zahteva od DBMS-a da izvrši sortiranje rezultujuće tabele prema specificiranim kolonama i izvrši grupisanje vrsta koje imaju iste vrednosti za specificirane kolone. Ukoliko su prisutne funkcije agregacije one će se primeniti na tako dobijene grupe. Tek uz prisustvo GROUP BY klauzule moguće je u SELECT klauzuli kombinovati imena kolona i funkcije agregacije.

Bitno je da napomenuti da se klauzula GROUP BY izvršava nakon klauzule WHERE odnosno da se grupisanje vrši tek nakon što su određene vrste koje treba da uđu u sastav rezultujuće tabele.

Primer 2

U nastavku je dat primer SQL upita koji za svaki sektor računa broj radnika koji rade u njemu. Za grupisanje radnika po broju sektora u kome radi iskorišćena je GROUP BY klauzula.

Page 58: Baze Podataka EKIS

Baze podataka

58

SELECT Sektor, COUNT(*) FROM RADNIK GROUP BY Sektor;

Primer 2 Sektor BrojRadnika

1 14 35 4

Klauzula HAVING omogućava filtriranje rezultata dobijenih korišćenjem GROUP BY klauzule. Ova klauzula primenjuje uslov filtriranje na formirane grupe.

Primer 3 SQL upit iz prethodnog primera je modifikovan, korišćenjem HAVING klauzule,

tako da su prikazani podaci samo o sektorima koji imaju više od jednog radnika. SELECT Sektor, COUNT(*) FROM RADNIK GROUP BY Sektor HAVING COUNT(*) > 1;

Primer 3 Sektor BrojRadnika

4 35 4

Klauzule GROUP BY i HAVING je moguće kombinovati sa WHERE klauzulom. Pri tome treba voditi računa o redosledu izvršavanja (isti je redosled po kome se klauzule ređaju prilikom pisanja SELECT naredbe):

1. WHERE – primenjuje se predikat koji određuje vrste koje ulaze u sastav rezultujuće tabele

2. GROUP BY - vrši se grupisanje vrsta u rezultujućoj tabeli 3. HAVING – primenjuje se predikat koji određuje vrste koje će ostati u rezultatu

upita 4. ORDER BY – sortiranje rezultata se vrši tek na kraju SELECT Sektor, COUNT(*) FROM RADNIK WHERE Pol = 'Ž' GROUP BY Sektor HAVING COUNT(*) > 1;

Primer 3 Sektor BrojRadnika

4 2

Primer 4 Klauzulu GROUP BY je moguće primeniti istovremeno na veći broj kolona. Pri tome

su kriterijum za formiranje grupa zajedničke vrednosti u specificiranim kolonama. Prilikom formiranja grupa vodi se računa i o redosledu po kome su kolone za grupisanje navedene (kao da se formiraju grupe sa podgrupama u okviru njih).

Page 59: Baze Podataka EKIS

Naredba SELECT – II deo

59

SELECT Sektor, Pol, COUNT(*) AS ProsekPlata FROM RADNIK GROUP BY Sektor, Pol ORDER BY AVG(Plata);

Primer 4 Sektor Pol ProsekPlata

5 Ž 250004 M 250004 Ž 340005 M 35333.33333333331 M 55000

Prilikom korišćenja klauzule GROUP BY, sve kolone koje su navedene u klauzuli SELECT a na koje nije primenjena neka funkcija agregacije, MORAJU BITI NAVEDENE U GROUP BY KLAUZULI. U suprotnom SQL upit neće moći da se izvrši.

4.3 Spajanje tabela Svi SQL upiti koje smo do sada razmatrali su koristili podatke iz samo jedne tabele.

Često se javlja situacija da se tražena informacija nalazi u većem broju tabela. U takvim situacijama potrebno je izvršiti spajanje vrsta iz različitih tabela i generisanje rezultujuće tabele.

Za pribavljanje podataka iz većeg broja tabela dovoljno je u klauzuli FROM navesti imena tabela iz kojih želimo da pribavimo podatke. Da bi spajanje tabela bilo uspešno, osim u nekim specijalnim slučajevima, potrebno je da navedemo uslov spoja, odnosno da navedemo kolone na osnovu čijih vrednosti se vrši spajanje vrsta iz različitih tabela. Spajanje tabela se vrši tako što se najčešće uparuje strani ključ iz jedne tabele sa primarnim ključem koji referencira u drugoj tabeli (Videti ograničenja stranog ključa u lekciji Uvod u SQL). Uslov spajanja može da se zada u okviru WHERE klauzule ili korišćenjem ključne reči JOIN u okviru FROM klauzule.

Spoj na jednakost (equi-join) obezbeđuje spajanje podataka iz dve ili više tabela na osnovu jednakosti odgovarajućih atributa, obično na osnovu primarnih i spoljnih ključeva. Najjednostavniji slučaj navođenja spoja je kada se u WHERE klauzuli specificira uslov spoja po jednakosti.

Dekartov proizvod je slučaj kada u WHERE klauzuli ne postoji uslov spoja, a u FROM klauzuli je navedeno više tabela. U tom slučaju nema spajanja vrsta po vrednosti nekog atributa, već se pravi kombinacija svake vrste iz jedne tabele sa svakom vrstom iz druge tabele (u slučaju Dekartovog proizvoda dve tabele)

Spoljni spoj (outer-join) omogućava spajanje dve tabele po vrednosti nekog atributa (kao kod equi-join), ali i uključivanje onih torki (vrsta) iz jedne ili druge tabele (ili iz obe), koje ne zadovoljavaju uslov jednakosti.

Da bi bolje razumeli različite tipove spoja koristićemo tabele RADNIK i SEKTOR ali u nešto jednostavnijem obliku. Pojednostavljene verzije tabela, RADNIK1 i SEKTOR1, date su u tabelama 12 i 13. Za svaki tip spoja daćemo oba oblika navođenja uslova spoja: i korišćenjem WHERE klauzule i korišćenjem ključne reči JOIN u klauzuli FROM.

Page 60: Baze Podataka EKIS

Baze podataka

60

Tabela 12: Pojednostavljeni prikaz tabele RADNIK1

RADNIK1 MatBr Ime Prezime Sektor

123456789 Marko Petrović 5333445555 Sima Todorović 5453453453 Jelena Janković 5666884444 Velibor Jovanović 5888665555 Jovan Obradović 1987654321 Aleksandra Petrović 4987987987 Stanko Manojlović 4999887777 Valentina Kovačević 4111111111 Borivoje Veljković 10

Table 13: Pojednostavljeni prikay tabele SEKTOR1

SEKTOR1 Broj Naziv

1 Uprava 4 Administracija5 Razvoj

12 Prodaja

4.4 Dekartov proizvod (cross-join) Dekartov proizvod dve tabele (A CROSS JOIN B) se dobija tako što se svaa vrsta iz

jedne tabele kombinuje sa svakom vrstom iz druge tabele.

Primer 5 Prilikom korišćenja Dekartovog proizvoda tabela treba voditi računa da sintaksa

CROSS JOIN nije podržana od strane MS Access-a. SELECT * FROM SEKTOR1, RADNIK1; SELECT * FROM SEKTOR1 CROSS JOIN RADNIK1;

Primer 5

Broj Naziv MatBr Ime Prezime Sektor5 Razvoj 123456789 Marko Petrović 54 Administracija 123456789 Marko Petrović 51 Uprava 123456789 Marko Petrović 5

12 Prodaja 123456789 Marko Petrović 55 Razvoj 333445555 Sima Todorović 54 Administracija 333445555 Sima Todorović 51 Uprava 333445555 Sima Todorović 5

12 Prodaja 333445555 Sima Todorović 55 Razvoj 999887777 Valentina Kovačević 44 Administracija 999887777 Valentina Kovačević 41 Uprava 999887777 Valentina Kovačević 4

12 Prodaja 999887777 Valentina Kovačević 45 Razvoj 987654321 Aleksandra Petrović 44 Administracija 987654321 Aleksandra Petrović 4

Page 61: Baze Podataka EKIS

Naredba SELECT – II deo

61

Primer 5 Broj Naziv MatBr Ime Prezime Sektor

1 Uprava 987654321 Aleksandra Petrović 412 Prodaja 987654321 Aleksandra Petrović 4

5 Razvoj 666884444 Velibor Jovanović 54 Administracija 666884444 Velibor Jovanović 51 Uprava 666884444 Velibor Jovanović 5

12 Prodaja 666884444 Velibor Jovanović 55 Razvoj 453453453 Jelena Janković 54 Administracija 453453453 Jelena Janković 51 Uprava 453453453 Jelena Janković 5

12 Prodaja 453453453 Jelena Janković 55 Razvoj 987987987 Stanko Manojlović 44 Administracija 987987987 Stanko Manojlović 41 Uprava 987987987 Stanko Manojlović 4

12 Prodaja 987987987 Stanko Manojlović 45 Razvoj 888665555 Jovan Obradović 14 Administracija 888665555 Jovan Obradović 11 Uprava 888665555 Jovan Obradović 1

12 Prodaja 888665555 Jovan Obradović 15 Razvoj 111111111 Borivoje Veljković 104 Administracija 111111111 Borivoje Veljković 101 Uprava 111111111 Borivoje Veljković 10

12 Prodaja 111111111 Borivoje Veljković 10

4.5 Unutrašnji spoj (inner-join) Inner join predstavlja najčešće korišćeni tip spoja. Ovaj tip spoja, u osnovi, definiše

presek vrsta iz tabela koje učestvuju u spoju.

Prilikom spajanja dve tabele (A INNER JOIN B) uzimaju se sve vrste iz tabele A i pronalazi im se odgovarajuća vrsta u tabeli B. Ukoliko vrsta iz tabele A nema odgovarajuću vrstu u tabeli B ne uključuje se u rezultat. Ukoliko vrsti iz tabele A odgovara više vrsta tabele B ona se u rezultatu ponavlja više puta (po jednom za svaku odgovarajuću vrstu u tabeli B).

Primer 6 Prilikom spajanja tabela treba voditi računa o tome da kolone u različitim tabelama

mogu imati ista imena. Potrebno je obezbediti mehanizam koji će DBMS-u precizno specificirati kolonu koju želite da referencirate. U takvim situacijama se koristi sintaksa IME_TABELE.IME_KOLONE. U SQL upitima koji su dati u nastavku taj pristup je iskorišćen za kolone SEKTOR1.Broj i RADNIK1.Sektor mada nije bilo neophodno jer kolone imaju različita imena. Isti pristup treba primeniti i za klauzulu SELECT ukoliko se javi sličan problem.

SELECT * FROM SEKTOR1, RADNIK1 WHERE SEKTOR1.Broj = RADNIK1.Sektor; SELECT * FROM SEKTOR INNER JOIN RADNIK ON SEKTOR1.Broj = RADNIK1.Sektor;

Page 62: Baze Podataka EKIS

Baze podataka

62

Primer 6

Broj Naziv MatBr Ime Prezime Sektor5 Razvoj 123456789 Marko Petrović 55 Razvoj 333445555 Sima Todorović 54 Administracija 999887777 Valentina Kovačević 44 Administracija 987654321 Aleksandra Petrović 45 Razvoj 666884444 Velibor Jovanović 55 Razvoj 453453453 Jelena Janković 54 Administracija 987987987 Stanko Manojlović 41 Uprava 888665555 Jovan Obradović 1

4.6 Levi spoljašnji spoj (left-outer join) Left-outer join u osnovi predstavlja prošireni inner-join. Ovaj tip spoja pred vrsta koje

uključuje unutrašnji spoj i vrste iz tabele A (leve tabele) koje nemaju odgovarajuću vrstu u tabeli B (desnoj tabeli). Kolone iz tabele B u ovom slučaju imaju vrednost NULL.

Primer 7 SELECT * FROM SEKTOR LEFT OUTER JOIN RADNIK ON SEKTOR1.Broj = RADNIK1.Sektor;

Primer 7

Broj Naziv MatBr Ime Prezime Sektor5 Razvoj 453453453 Jelena Janković 55 Razvoj 666884444 Velibor Jovanović 55 Razvoj 333445555 Sima Todorović 55 Razvoj 123456789 Marko Petrović 54 Administracija 987987987 Stanko Manojlović 44 Administracija 987654321 Aleksandra Petrović 44 Administracija 999887777 Valentina Kovačević 41 Uprava 888665555 Jovan Obradović 1

12 Prodaja

4.7 Desni spoljašnji spoj (right-outer join) Right outer join funkcioniše kao i left outer join samo je sada uloga tabela

promenjena. Desni spolja[nji spoj u rezultat uključuje vrste iz tabele B (desne tabele) koje nemaju odgovarajuću vrstu u tabeli A (levoj tabeli).

Primer 8 SELECT * FROM SEKTOR RIGHT OUTER JOIN RADNIK ON SEKTOR1.Broj = RADNIK1.Sektor;

Page 63: Baze Podataka EKIS

Naredba SELECT – II deo

63

Primer 8

Broj Naziv MatBr Ime Prezime Sektor5 Razvoj 123456789 Marko Petrović 55 Razvoj 333445555 Sima Todorović 54 Administracija 999887777 Valentina Kovačević 44 Administracija 987654321 Aleksandra Petrović 45 Razvoj 666884444 Velibor Jovanović 55 Razvoj 453453453 Jelena Janković 54 Administracija 987987987 Stanko Manojlović 41 Uprava 888665555 Jovan Obradović 1

111111111 Borivoje Veljković 10

4.8 Potpuni spoljašnji spoj (full-outer join) Full outer join predstavlja kombinaciju rezultata koje vraćaju left outer i right outer

join. Poptpuni spoljašnji spoj sadrži vrste iz obe tabele (i iz A i iz B) koje nemaju odgovarajuće slogove u drugoj tabeli.

Primer 9 MS Access ne podržava FULL OUTER JOIN sintaksu koja je korišćena u narednom

SQL upitu. SELECT * FROM SEKTOR FULL OUTER JOIN RADNIK ON SEKTOR1.Broj = RADNIK1.Sektor;

Primer 9 Broj Naziv MatBr Ime Prezime Sektor

111111111 Borivoje Veljković 101 Uprava 888665555 Jovan Obradović 14 Administracija 987654321 Aleksandra Petrović 44 Administracija 987987987 Stanko Manojlović 44 Administracija 999887777 Valentina Kovačević 45 Razvoj 123456789 Marko Petrović 55 Razvoj 333445555 Sima Todorović 55 Razvoj 453453453 Jelena Janković 55 Razvoj 666884444 Velibor Jovanović 5

12 Prodaja

Primer 10

U nastavku je dat SQL upit koji prikazuje imena sektora i broj radnika koji rade u njima. Obratite pažnju da je kod ovog upita iskorišćena mogućnost da se tabelama dodele pseudonimi.

SELECT S.Broj, S.Naziv, COUNT(*) AS BrojR FROM SEKTOR1 AS S INNER JOIN RADNIK1 AS R ON S.Broj=R.Sektor GROUP BY S.Broj, S.Naziv;

Primer 10 Broj Naziv BrojR

1 Uprava 14 Administracija 35 Razvoj 4

Page 64: Baze Podataka EKIS

Baze podataka

64

Primer 11 Sledeći SQL upit za sve žene radnike određuje imena projekata na kojima su

angažovane. Spajanje tabela u ovom upitu izvedeno je korišćenjem WHERE klauzule.

Obratite pažnju da WHERE klauzula pored uslova spoja može da sadrži i uslove kojima se selektuju vrste koje će ući u rezultujuću tabelu.

Takođe, obratite pažnju da sada podatke izvlačimo iz tri tabela: RADNIK, RADI_NA i PROJEKAT. Broj tabela iz kojih izvlačimo podatke nije ničim ograničen. Potrebno je voditi računa da spojevi između tabela budu definisani na odgovarajući način kako bi dobili željene podatke. Kako je već napomenuto spoj se najčešće definiše između spoljašnjeg ključa u jednoj tabeli i primarnog ključa koji se referencira u drugoj tabeli (RADI_NA.Radnik i RADNIK.MatBr, RADI_NA.Projekat i PROJEKAT.Broj). Za spajanje različitih tabela mogu se kombinovati različiti tipovi spoja.

SELECT R.MatBr, R.ime, R.Prezime, P.Naziv FROM RADNIK R, RADI_NA RN, PROJEKAT P WHERE R.MatBr = RN.Radnik AND RN.Projekat = P.Broj AND R.pol = 'Ž';

Primer 11 MatBr ime Prezime Naziv

999887777 Valentina Kovačević Godišnji izveštaj 999887777 Valentina Kovačević Reorganizacija 987654321 Aleksandra Petrović Godišnji izveštaj 987654321 Aleksandra Petrović Informacioni sistem453453453 Jelena Janković ProizvodX 453453453 Jelena Janković ProizvodY

Primer 12 Naredni SQL upit za svaki sektor daje ukupan broj radnih sati koje radnici provode na

projektima za koje je taj sektor zadužen. MS Access zahteva da spojevi između tabela budu grupisani korišćenjem zagrada.

SELECT S.Broj, S.Naziv, SUM(Sati) AS SatiUkupno FROM (SEKTOR AS S INNER JOIN PROJEKAT AS P ON S.Broj = P.Sektor)

INNER JOIN RADI_NA AS RN ON P.Broj = RN.Projekat GROUP BY S.Broj, S.Naziv;

Primer 12

Broj Naziv SatiUkupno1 Uprava 454 Administracija 805 Razvoj 139

4.9 Kombinovanje rezultata više SQL upita Programski jezik SQL dozvoljava kombinovanje rezultata većeg broj SQL upit

korišćenjem operacija za rad sa skupovima: unija (UNION), presek (INTERSECT) i razlika (MINUS).

Klauzula UNION kombinuje rezultate dva ili više upita u jednu rezultujuću tabelu. Rezultati upita koji se kombinuju moraju imati kolone koje se slažu po broju (isti broj kolona), redosledu (odgovarajuće kolone se nalaze na istim pozicijama) i tipu (odgovarajuće kolone moraju imati kompatibilne tipove).

Page 65: Baze Podataka EKIS

Naredba SELECT – II deo

65

Primer 13 SQL upit u nastavku koristi klauzulu UNION da bi implementirao full-outer join koji

nije podržan u MS Access-u. SELECT * FROM SEKTOR1 LEFT OUTER JOIN RADNIK1 ON SEKTOR1.Broj=RADNIK1.Sektor UNION SELECT * FROM SEKTOR1 RIGHT OUTER JOIN RADNIK1 ON SEKTOR1.Broj=RADNIK1.Sektor;

Primer 14 U nastavku je dat SQL upit koji vraća nazive sektora u kojima rade radnici koji se

prezivaju Petrović i Jovanović. SELECT Naziv FROM SEKTOR, RADNIK WHERE Broj = Sektor AND Prezime = 'Jovanović' UNION SELECT Naziv FROM SEKTOR, RADNIK WHERE Broj = Sektor AND Prezime = 'Petrović';

Klauzula INTERSECT vraća samo vrste koje se javljaju u rezultujućim tabelama svih SQL upita koji se kombinuju.

Primer 15 U sledećem primeru imamo SQL upit koji korišćenjem klauzule INTERSECT

određuje podatke o radnicima koji rade u sektoru Administracija I koji imaju platu veću od 40000. MS Access ne podržava klauzulu INTERSECT.

SELECT MatBr, Ime, Prezime FROM SEKTOR, RADNIK WHERE Broj = Sektor AND Naziv = 'Administracija' INTERSECT SELECT MatBr, Ime, Prezime FROM SEKTOR, RADNIK WHERE Broj = Sektor AND plata > 40000;

Primer 15 MatBr Ime Prezime

987654321 Aleksandra Petrović

Klauzula MINUS vraća samo one vrste koje se javljaju u rezultatu provg SQL upita ali se ne javljaju I u rezultatima ostalih SQL upita.

Primer 16 Ukoliko želimo da dobijemo podake o radnicima koji rade u sektoru Administracija a

plat aim je manja od 40000, upit iz prethodnog primera treba modifikovati takod a se umesto klauzule INTERSECT koristi klauzula MINUS. MS Access ne podržava klauzulu MINUS.

Page 66: Baze Podataka EKIS

Baze podataka

66

SELECT MatBr, Ime, Prezime FROM SEKTOR, RADNIK WHERE Broj = Sektor AND Naziv = 'Administracija' INTERSECT SELECT MatBr, Ime, Prezime FROM SEKTOR, RADNIK WHERE Broj = Sektor AND plata > 40000;

Primer 16

MatBr Ime Prezime 999887777 Valentina Kovačević987987987 Stanko Manojlović

Page 67: Baze Podataka EKIS

5 SQL naredbe za manipulaciju podacima

5.1 Uvod U prethodne dve lekcije smo se uglavnom bavili naredbom SELECT koja omogućava

pretraživanje i pribavljanje podataka iz relacione baze podataka. U ovoj lekciji ćemo obraditi ostatak DML naredbi odnosno obradićemo naredbe koje omogućavaju modifikaciju podataka u relacionoj bazi podataka.

Postoje tri moguće operacije za modifikovanje podataka:

1. Dodavanje novih podataka (dodavanje novih vrsta u tabelu)

2. Ažuriranje podataka (izmena vrednosti kolona u postojećim vrstama tabele)

3. Brisanje podataka (brisanje vrsta iz tabele)

Pored DML naredbi za ažuriranje podataka u ovoj lekciji će biti obrađene i DDL naredbe koje omogućavaju izmenu šeme relacione baze podataka, odnosno posvetićemo pažnju naredbama koje omogućavaju brisanje i modifikaciju tabela u relacionoj bazi podataka.

5.2 Dodavanje novih podataka Za dodavanje podataka u tabelu koristi se SQL naredba INSERT...INTO. Naredba

INSERT...INTO dodaje nove vrste u tabelu relacione baze podataka. Vrednosti kolona se definišu zadavanjem vrednosti u obliku konstanti ili korišćenjem rezultata SQL upita. U zavisnosti od načina zadavanja vrednosti kolona postoje različiti oblici INSERT..INTO naredbe.

Svi primeri u nastavku će biti razmatrani za slučaj tabele PROJEKAT. U nastavku je data CREATE TABLE naredba koja je iskorišćena za kreiranje ove tabele kao i test podaci.

CREATE TABLE PROJEKAT ( Broj Int, Naziv VarChar(25) NOT NULL, Lokacija VarChar(15) DEFAULT "Niš", Sektor Integer NOT NULL, CONSTRAINT ProjekatPK PRIMARY KEY (Broj), CONSTRAINT NadlezanFK FOREIGN KEY (Sektor)

REFERENCES SEKTOR(Broj) );

Page 68: Baze Podataka EKIS

Baze podataka

68

PROJEKAT Broj Naziv Lokacija Sektor

1 ProizvodX Niš 52 ProizvodY Pirot 53 ProizvodZ Niš 5

10 Reorganizacija Niš 120 Informacioni sistem Leskovac 430 Godišnji izveštaj Niš 4

U nastavku je dat oblik INSERT..INTO naredbe koji se koristi u situacijama kada se vrednosti kolona zadaju korišćenjem konstanti.

INSERT INTO <ime_tabele> [(<ime_kolone1> [,<ime_kolone2>]...)] VALUES (<vrednost_kolone1> [{, <vrednost_kolone2>}...]) ;

Iz definicije možemo zaključiti da je lista kolona opciona. Ukoliko je lista kolona izostavljena, u listi vrednosti kolona moraju se navesti vrednosti za svaku kolonu koja postoji u tabeli u koju se dodaje nova vrsta. U tom slučaju lista vrednosti kolona mora da odgovara redosledu kojim su kolone navedene prilikom kreiranja tabele (u CREATE TABLE naredbi). Takođe, vrednosti kolona, moraju biti kompatibilne po tipu sa tipovima podataka koji su za kolone navedeni prilikom kreiranja tabele.

Primer 1 SQL naredba kojom se dodaje nova vrsta u tabelu PROJEKAT. Dodaju se

informacije o projektu čiji je broj 1, zove se ProizvodX, lociran je u Nišu i za njega je zadužen sektor čiji je broj 5.

INSERT INTO PROJEKAT VALUES( 4, 'ProizvodM', 'Prokuplje', 5);

PROJEKAT Broj Naziv Lokacija Sektor

1 ProizvodX Niš 52 ProizvodY Pirot 53 ProizvodZ Niš 54 ProizvodM Niš 5

10 Reorganizacija Niš 120 Informacioni sistem Leskovac 430 Godišnji izveštaj Niš 4

Ukoliko se u INSERT...INTO naredbi zadaje lista kolona, moguće je promeniti redosled zadavanja kolona u odnosu na onaj koji je specificiran u CREATE TABLE naredbi.

Primer 2

Naredba INSERT...INTO kod koje je specificirana lista kolona. INSERT INTO PROJEKAT (Naziv, Broj, Sektor, Lokacija) VALUES('ProizvodN', 5, 4, 'Svrljig');

Page 69: Baze Podataka EKIS

Osnovne komponente Access aplikacija

69

PROJEKAT

Broj Naziv Lokacija Sektor1 ProizvodX Niš 52 ProizvodY Pirot 53 ProizvodZ Niš 54 ProizvodM Niš 55 ProizvodN Svrljig 4

10 Reorganizacija Niš 120 Informacioni sistem Leskovac 430 Godišnji izveštaj Niš 4

Lista kolona u pojedinim slučajevima ne mora biti kompletna. Iz liste se mogu izostaviti kolone kod kojih nije definisano NOT NULL ograničenje i kolone koje imaju definisano DEFAULT ograničenje. Za istovljene kolone se upisuje podrazumevana vrednost definisana DEFAULT ograničenjem ili se upisuje NULL vrednost ukoliko DEFAULT ograničenje ne postoji.

Primer 3 U narednom primeru iz liste kolona je izbačena kolona Lokacija. Pošto je u tabeli za

tu kolona definisano DEFAULT ograničenje, prilikom dodavanja nove vrste u tu kolonu će biti upisana vrednost 'Niš'. Da DEFAULT ograničenje ne postoji u kolonu Lokacija bi bila upisana vrednost NULL.

INSERT INTO PROJEKAT (Naziv, Broj, Sektor) VALUES('ProizvodK', 6, 5);

PROJEKAT Broj Naziv Lokacija Sektor

1 ProizvodX Niš 52 ProizvodY Pirot 53 ProizvodZ Niš 54 ProizvodM Niš 55 ProizvodN Svrljig 46 ProizvodK Niš 5

10 Reorganizacija Niš 120 Informacioni sistem Leskovac 430 Godišnji izveštaj Niš 4

Prilikom dodavanja nove vrste u tabelu biće proverena sva ograničenja koja su definisana nad tabelom: primarni ključ, NOT NULL, CHECK... Ukoliko bar jedno ograničenje nije zadovoljeno DBMS će prijaviti poruku o grešci.

Ukoliko se vrednosti kolona zadaju korišćenjem upita, naredba INSERT...INTO ima nešto drugačiji oblik.

INSERT INTO <ime_tabele> [(<ime_kolone1> [,<ime_kolone2>]...)] <upit>;

U ovom slučaju za listu kolona važe ista pravila kao i u prethodnim situacijama. Vrednosti kolona se sada ne zadaju kako konstante već se zadaju kao rezultujuća tabela nekog upita. Redosled i tip kolona u rezultujućoj tabeli upita mora da odgovara redosledu i tipu kolona u listi.

Page 70: Baze Podataka EKIS

Baze podataka

70

Primer 4 INSERT...INTO naredba koja koristi SQL upit da bi u tabelu PROJEKAT dodala

podatke iz neke fiktivne tabele PROJEKAT1. INSERT INTO PROJEKAT (Naziv, Broj, Sektor, Lokacija) SELECT Naziv, Broj, Sektor, Lokacija FROM PROJEKAT1;

Primer 5 U nastavku su date INSERT...INTO naredbe za punjenje test podacima tabele

RADNIK. INSERT INTO RADNIK (MatBr, Ime, Prezime, DatRodj, Pol, Plata, Rukovodilac, Sektor) VALUES( 123456789, 'Đorđe', 'B', 'Savić', '09/01/1955', 'M', 3000,

333445555, 5); INSERT INTO RADNIK (MatBr, Ime, Prezime, DatRodj, Pol, Plata, Rukovodilac, Sektor) VALUES( 3334455555, 'Voja', 'T', 'Vasić', '08/12/1945', 'M', 6000,

888665555, 5); INSERT INTO RADNIK (MatBr, Ime, Prezime, DatRodj, Pol, Plata, Rukovodilac, Sektor) VALUES( 999887777, 'Ana', 'J', 'Petrović','19/07/1958', 'Ž', 3500,

987654321, 4); INSERT INTO RADNIK (MatBr, Ime, Prezime, DatRodj, Pol, Plata, Rukovodilac, Sektor) VALUES( 987654321, 'Jelena', 'S', 'Marković', '20/06/1965', 'Ž',

5300, 888665555, 4); INSERT INTO RADNIK (MatBr, Ime, Prezime, DatRodj, Pol, Plata, Rukovodilac, Sektor) VALUES( 666884444, 'Ratko', 'K', 'Veljković', '15/09/1952', 'M',

3800, 333445555, 5); INSERT INTO RADNIK (MatBr, Ime, Prezime, DatRodj, Pol, Plata, Rukovodilac, Sektor) VALUES( 456456456, 'Milica', 'A', 'Stojić', '31/07/1962', 'Ž', 2300,

3334455555, 5); INSERT INTO RADNIK (MatBr, Ime, Prezime, DatRodj, Pol, Plata, Rukovodilac, Sektor) VALUES( 987987987, 'Jovan', 'V', 'Janković', '29/03/1959', 'M', 2500,

987654321, 4); INSERT INTO RADNIK (MatBr, Ime, Prezime, DatRodj, Pol, Plata, Rukovodilac, Sektor) VALUES( 888665555, 'Ivan', 'E', 'Perić', '09/01/1955', 'M', 5500,

NULL, 5);

5.3 Ažuriranje podataka Za ažuriranje podataka s ekoristi SQL naredba UPDATE...SET. Osnovni oblik ove

komande je dat unastavku.

Page 71: Baze Podataka EKIS

Osnovne komponente Access aplikacija

71

UPDATE <ime_tabele> SET <ime_kolone> = <izraz> [,<ime_kolone> = <izraz>...] [WHERE <uslov>];

SET definiše u kojoj se koloni menja vrednost definisana zadatim izrazom. Izraz može bti konstantna vrednost, vrednost nekog izraza ili vrednost koju vraća SQL upit.

Ako se navede WHERE klauzula, ažuriranje se vrši samo za kolone koje ispunjavaju navednost nekog navedenog uslova.

Primer 6 U ovom primeru se koristi UPDATE...SET naredba da bi se lokacija projekta čiji je

broj 5 promenila na vrednost 'Beograd'. UPDATE PROJEKAT SET Lokacija = 'Beograd' WHERE Broj = 5;

PROJEKAT

Broj Naziv Lokacija Sektor1 ProizvodX Niš 52 ProizvodY Pirot 53 ProizvodZ Niš 54 ProizvodM Niš 55 ProizvodN Beograd 46 ProizvodK Niš 5

10 Reorganizacija Niš 120 Informacioni sistem Leskovac 430 Godišnji izveštaj Niš 4

Treba biti jako oprezan prilikom korišćenja UPDATE...SET naredbe. UKOLIKO SE U PRETHODNOM PRIMERU IZOSTAVI WHERE KLAUZULA ILI USLOV NIJE DOBRO DEFINISAN, LAKO MOŽEMO DA IZMENIMO I VRSTE KOJE NISMO ŽELELI DA MENJAMO, ODNOSNO DA IZGUBIMO NEKE DRAGOCENE PODATKE.

Korišćenjem UPDATE...SET naredbe moguće je istovremeno menjati vrednosti većeg broja kolona. U sledećem primeru svi projekti koji u nazivu sadrže reč Proizvod se premeštaju u Niš u nadležnost sektora broj 4.

UPDATE PROJEKAT SET Lokacija = 'Niš', Sektor = 4 WHERE Naziv LIKE 'Proizvod*';

PROJEKAT Broj Naziv Lokacija Sektor

1 ProizvodX Niš 42 ProizvodY Niš 43 ProizvodZ Niš 44 ProizvodM Niš 45 ProizvodN Niš 46 ProizvodK Niš 4

10 Reorganizacija Niš 120 Informacioni sistem Leskovac 430 Godišnji izveštaj Niš 4

Page 72: Baze Podataka EKIS

Baze podataka

72

5.4 Brisanje podataka Za brisanje podataka iz relacione baze podataka koristi se naredba DELETE. U svom

osnovnom obliku naredba DELETE ima sledeću sintaksu: DELETE FROM <ime_tabele> [WHERE <uslov>];

Primer 7 SQL naredba koja je navedena u nastavku iz tabele RADNIK briše podatke o svim

radnicima čije prezime počinje slovom 'S'. DELETE FROM RADNIK WHERE Prezime LIKE 'S*';

Uslov koji navedete u WHERE definiše kriterijume za selekciju torki koje treba obrisati iz zadate tabele. AKO SE NE NAVEDE WHERE KLAUZULA, NAREDBA DELETE BRIŠE SVE VRSTE IZ TABELE ČIJE SE IME NAVEDE U FROM KLAUZULI. Zbog toga treba biti jako oprezan prilikom korišćenja naredbe DELETE. Ukoliko izostavite uslov ili je uslov neadekvatno definisan može doći do trajnog brisanja podataka koje nismo želeli da obrišemo.

Primer 8 SQL naredba u nastavku briše podatke o svim projektima. DELETE FROM PROJEKAT;

Primer 9 Prilikom korišćenja naredbe DELETE treba voditi računa i o efektima koji mogu da

se jave kao posledica postojanja ograničenja stranog ključa. Možemo za primer uzmemo tabele RADNIK i SEKTOR iz baze podataka PREDUZEĆE, i da pokušamo da obrišemo podatke o sektoru čiji je naziv 'Administracija'.

DELETE FROM SEKTOR WHERE Naziv = 'Administracija';

Izvršavanjem ove naredbe moguće je da se javi jedna od naredne tri situacije:

1. Iz tabele SEKTOR biće obrisani podacai o sektoru čiji je naziv 'Administracija' – u tabeli RADNIK ne postoji definisano ograničenje stranog ključa nad kolonom Sektor koje referencira primarni ključ u tabeli sektor.

2. DBMS će prijaviti grešku i neće izvršiti brisanje – u tabeli RADNIK postoji definisano ograničenje stranog ključa nad kolonom Sektor i ovo ograničenje referencira primarni ključ u tabeli SEKTOR. Brisanje u ovom slučaju nije moguće jer bi u tabeli RADNIK dobili vrste koje referenciraju nepostojeći sektor čime bi bio narušen referencijalni integritet.

3. Iz tabele SEKTOR biće obrisani podacai o sektoru čiji je naziv 'Administracija' ali će i iz tabele RADNIK biti obrisani podaci o radnicima koji rade u sektoru 'Administracija' - u tabeli RADNIK postoji ograničenje stranog ključa nad kolonom Sektor i strani ključ je definisan korišćenjem opcije ON DELETE

Page 73: Baze Podataka EKIS

Osnovne komponente Access aplikacija

73

CASCADE. Za razliku od prethodnog slučaja gde će DBMS sprečiti brisanje da ne bi došlo do narušavanja referencijalnog integriteta, U OVOM SLUČAJU DBMS AUTOMATSKI BRIŠE SVE PODATKE KOD KOJIH MOŽE DOĆI DO NARUŠAVANJA REFERENCIJALNOG INTEGRITETA. Ovo je još jedan razlog više zbog čega treba biti jako oprezan prilikom korišćenja DELETE naredbe.

5.5 Modifikacija šeme relacione baze podataka Postoji veliki broj SQL DDL naredbi koje omogućavaju izmenu šeme relacione baze

podataka. Prilikom korišćenja ovih naredbi potrebno je da budemo jako oprezni kako greškom, ili usled nepažnje ne bi obrisali neke objekte ili podatke koji su nam od značaja.

5.5.1 Brisanje tabele Za brisanje tabela iz relacione baze podataka koristi se naredba DROP TABLE. Ova

naredba briše strukturu tabelu zajedno sa svim podacima koji se u tabeli nalaze.

Primer 10 U ovom primerju je data naredba koja briše tabelu RADNIK zajedno sa svim

podacima koji se u tabeli nalaze. DROP TABLE RADNIK;

DBMS će sprečiti brisanje tabele u slučaju da to dovodi do narušavanja referencijalnog integriteta, odnosno brisanje tabele nije moguće ukoliko u bazi podataka postoje ograničenja stranog ključa koja referenciraju tabelu koju želimo d aobrišemo.

5.5.2 Modifikacija tabela Za modifikaciju strukture tabela koristi se naredba ALTER TABLE.

Primer 11 SQL naredba koja u tabelu PROJEKAT dodaje novu kolonu. ALTER TABLE PROJEKAT ADD VrednostProjekta NUMERIC(10, 2);

Prilikom dodavanja nove kolone ne možemo odmah primeniti NOT NULL ograničenje jer bi u tom slučaju ograničenje odmah bilo narušeno. Zbog toga se kolona dodaje bez NOT NULL ograničenja, dodaju se neophodni pdoaci pa se tek naknadno dodaje ograničenje.

Naredba ALTER TABLE se može primeniti i za brisanje kolona iz tabele. ALTER TABLE PROJEKAT DROP COLUMN VrednostProjekta;

Primer 12 SQL naredba koja u tabelu PROJEKAT dodaje novo ograničenje. ALTER TABLE PROJEKAT

Page 74: Baze Podataka EKIS

Baze podataka

74

MODIFY VrednostProjekta NUMERIC(10, 2) NOT NULL DEFAULT 10000;

Naredba ALTER TABLE se može primeniti i za brisanje ograničenja iz tabele. ALTER TABLE PROJEKAT DROP CONSTRAINT NadlezanFK;

Page 75: Baze Podataka EKIS

6 Osnovne komponente Access aplikacija

6.1 Uvod Baze podataka se razlikuju kako u pogledu veličine tako i u pogledu broja korisnika

koje opslužuju. Pojedine baze koristi svega nekoliko formi ili izveštaja, druge koriste aplikacije zasnovane na korišćenju Internet tehnologija, poput Active Server Pages (ASP) ili Java Server Pages (JSP), ili neke od tehnologija za kreiranje standardnih desktop aplikacija. Neke baze podataka i dalje koriste apliakcije razvijene u COBOL programskom jeziku ili nekom od novijih programskih jezika poput Visual Basic .NET, Java, C# i ostalih. Sa druge strane mnoge od baza podataka koriste se putem poziva uskladištenih procedura i trigera. Princip korišćenja baza podataka od strane aplikacija razvijenih različitim tehnologijama i različiti slučajevi korišćenja baze podataka uopšte prikazani su na slici 6-1. Bez obzira na tehnologiju korišćenu za njihovo razvijanje, aplikacije koje koriste podatke smeštene u nekoj bazi podataka za svoje osnovne komponente imaju upite, forme i izveštaje. Svaka od navedenih tipova komponenti može biti razvijena nekim programskim jezikom ili korišćenjem alata baza podataka koji omogućavaju automatizaciju generisanja ovih komponenti. Sistem koji upravlja bazom podataka može posedovati generatore upita, formi i izveštaja, kakav je slučaj kod Access-a.

Slika 6-1 Slučajevi korišćenja baza podataka

Prednost korišćenja Access-a može se ogleda se u činjenici da je moguće koristiti njegove mehanizme za kreiranje aplikacija tj upita, formi i izveštaja i paru sa bazom

Page 76: Baze Podataka EKIS

Baze podataka

76

podataka kojoj upravlja neki drugi sistem za upravljanje bazama podataka poput MS SQL Server-a. Na ovaj način moguće je kreirati aplikacije koje kao izvor podataka koriste udaljene baze podataka. Access poseduje veliki broj mehanizama koji automatizuju kreiranje osnovnih komponenti aplikacija: formi, makroa i izveštaja. Korišćenjem ovih mehanizama moguće je jako efikasno kreirati apliakcije koje se po svojim funkcionalnostima neće u mnogome razlikovati od aplikacija razvijenih korišćenjem bilo kog višeg programskog jezika. Mehanizmi ugrađeni u Access skraćuju vreme izrade aplikacija i dozvoljavaju, pored razvoja, i testiranje aplikacija i smislu debagiranja ukoliko se prilikom razvoja koriste makroi.

6.2 Izrada i korišćenje formi (forms) Access-ove forme (forms) prave korisnički interfejs prema tabelama. Mada koristite

izglede Table i Query da izvršite iste funkcije kao i sa formama, oni nude niz prednosti predstavljanja podataka na organizovan i atraktivan način. Raspored polja na formi uradite tako da se unos podataka ili operacija izmene vrši sa leva na desno i odozgo na dole. Pravilno projektovana forma ubrzava unos podataka i smanjuje greške pri kucanju.

Forme su napravljene od skupa pojedinačnih elemenata strukture koji se zovu kontrole. Kontrole su komponente koje se vide u prozorima i okvirima za dijalog Access i ostalih Windows aplikacija.

Slika 6-2 Primer forme

Najlakši način da izradite formu je korišćenje Form Wizard-a. Korišcenje Form Wizard značajno štedi vreme kreiranja strukture osnovne forme. Form Wizard omogućava izradu forme koja sadrži polja iz jedne ili više tabela ili upita. Form Wizard gradi osnovnu strukturu forme i dodaje okvire za kontrole za prikazivanje i izmenu vrednosti stavki podataka. Odabirom opcije Forms iz glavnog Database prozora i odabirom opcije New moguće je pokrenuti Form Wizard. Izgled wizard-a prikazan je na slici 6-3.

Page 77: Baze Podataka EKIS

Osnovne komponente Access aplikacija

77

Slika 6-3 Pokretanje form wizard-a

Form wizard omogućava odabir kolona iz tabela koje je potrebno prikazati na formi.

Slika 6-4 Odabir kolona tabela

Moguće je odabrati kolone iz više tabela pri čemu će se zadržati veza između podataka iz različitih tabela. Pored odabira kolona koje će bit prikazane na formi, moguće je odabrati stil prikaza podataka na formi i tip tabelarnog prikaza podataka. Za svaku od formi neophodno je definisati naziv. Form Wizard pravi forme a onda ih automatski snima. Kada Form Wizard završi izradu formi, on prikazuje glavnu formu (slika 6-5).

Slika 6-5 Osnovna forma podataka zaposlenih, izrađen pomoću Form Wizard

Page 78: Baze Podataka EKIS

Baze podataka

78

Na glavnoj formi Form Wizard stvara jedno tekstualno polje, svako sa odgovarajućom oznakom, za ulaz ili izmenu vrednosti podataka svake od odabranih kolona tabele. Osnovna forma koju je napravio Form Wizard je odmah upotrebljiva, ali se može poboljšati delimičnim podešavanjem rasporeda. Modifikovanje strukture forme ostvaruje se odabirom Form Design moda rada. Pokretanjem ovog moda pojavljuje se prozor Form Design (slika 6-6), gde je maksimalno povećan prozor za strukturu. Plivajući prozor, koji se pojavljuje u režimu Form Design, sadrži neučvršćenu liniju alata, nazvanu kutija sa alatima, koja omogućava dodavanje nove kontrole na formu.

Slika 6-6 Osnovni forma u Design modu

Forme se mogu podeliti u tri sekcije: Form Header (zaglavlje forme), Detail (sekcija Detalja) i Form Footer (podnožje forme) prikazane na slici 6-6. Zaglavlja i podnožja su opciona. Prozor Form Design ima sledeće osnovne elemente:

• Linija alata Form Design, sadrži dugmad koja su prečice za biranje menija u režimu Form Design.

• Linija alata Formating, sadrži dugmad koja su prečice za boju, tekst, ivice i različite druge opcije formatiranja;

• Skup vertikalnih i horizontalnih lenjira, za verziju Access za SAD u inčima, i u centimetrima za verzije Accessa za zemlje gde se koristi metrički sistem;

• Vertikalna linija postavlja desnu marginu forme. Liniju za marginu pomerate tako što je kliknete i odvučete na željenu lokaciju;

• Horizontalna linija koja predstavlja donju marginu forme. Možete kliknuti i odvući ovu liniju na novu lokaciju;

• Vertikalne i horizontalne trake za pomeranje, koje omogućavaju da vidite delove forme van granica prozora forme;

Traka Form Header definiše visinu sekcije zaglavlja forme. Ovo se primenjuje samo ako izaberete da formi dodate zaglavlje i podnožje. Sekcija Form Header sadrži statički tekst, grafičke likove i ostale kontrole koji se pojavljuju na vrhu forme. Zaglavlje se pojavljuje samo na prvoj strani forme sa više strana;

Traka Form Detail odvaja Form Header od ostatka forme. Na traci Form Detail su kontrole koji prikazuju podatke iz tabela i upita i statički elementi podataka, kao što su oznake i zaštitni znaci;

Traka Form Footer definiše visinu sekcije podnožja forme. Sekcija Form Footer je slična sekciji Form Header. Ako štampate formu sa više strana, Form Footer se

Page 79: Baze Podataka EKIS

Osnovne komponente Access aplikacija

79

pojavljuje samo jednom. Formi možete dodati sekcije Form Header i Form Footer, ili ih izbrisati, biranjem View, Form Header/Footer.

Svojstva koja se primenjuju na celu formu, na sekcije forme i na svaku kontrolu forme su određena vrednostima prikazanim u prozoru Properties. Da razgledate prozor Properties za kontrolu, izaberite kontrolu tako što kliknete negde na njegovoj površini; zatim kliknite na dugme Properties na liniji alata. Na slici 6-7 su prikazane sekcije Access forme pri čemu su aktivne sekcije zaglavlja stranica (Page Header i Page Footer).

• Form (forma) Da izaberete objekat Form izaberite Edit, Select Form. Ako prozor Properties ( ) nije otvoren, morate dva puta kliknuti na kvadrat gde se ukrštaju linije lenjira. Biranjem forme, omogućava vam se da postavite svojstva forme kao celine;

• Header section (sekcija zaglavlja). Da izaberete Form Header, kliknite na liniju Form Header, ili Page Header. Skup svojstava sa kojima radite se primenjuje samo na sekciju Form Header ili Page Header;

• Detail section (sekcija detalja). Da izaberete sekciju Detail, kliknite na liniju Detail. Dobijate skup svojstava, sličnih onima u sekciji Form Header, ali koja se primenjuju samo kod sekcije Detail;

Slika 6-7 Formatiranje izgleda izveštaja

• Footer section (sekcija podnožja). Da izaberete sekciju Footer, kliknite na liniju Form Footer, ili Page Footer;

• Control object (kontrole). Da biste ga izabrali, kliknite na površinu kontrole. Svaki tip kontrole ima svoj skup svojstava.

Visinu sekcije možete izmeniti povlačenjem mišem vertikalnih traka Form Header, Page Header, Detail, Page Footer ili Form Footer. Kada postavite pokazivač miša na gornju ivicu trake za podelu sekcije, pretvara se u liniju sa dve vertikalne strelice. Povlačenjem pokazivača podešava se veličinu sekcije iznad pokazivača miša.

Sekcija zaglavlja forme

Sekcija zaglavlja stranice Sekcija podnožja stranice

Sekcija detalja

Sekcija podnožja forme

Page 80: Baze Podataka EKIS

Baze podataka

80

Svaka kontrola koja se nalazi na formi dozvoljava promenu svoje veličine. Podrazumevani prikaz dizajna forme prikazuje kontrole u rešetki (grid-u) pa je pomeranje kontrole i promenu njene veličine moguće vršiti na osnovu tačaka rešetke. Moguće je vršiti promenu pozicija grupe kontrola. Prethodno je neophodno selektovati kontrole koje je potrebno pomeriti. Poravnanje selektovanih kontrola vrši se izborom jedne od Align opcija podmenija Format glavnog menija Access-a. Osim manuelnih promena stila prikaza kontrola, moguće je koristi neki od ugrađenih stilova korišćenjem AutoFormat opcije iz linije alata. U formatiranom prikazu moguće je naknadno promeniti redosled prikaza odabranih kolona tabele korišćenjem Tab Order opcije.

6.3 Izrada i korišćenje izveštaja Izveštaj je krajnji proizvod većine aplikacija baza podataka. Kod Accessa, izveštaj je

specijalna vrsta neprekidne forme, projektovanog za štampanje. Access kombinuje podatke u tabelama i upitima tako da možete štampati i distribuirati onima kojima je potreban, ili koji ga zahtevaju.

Većina metoda za izradu formi za transakcione obrade, primenjuje se i kod izveštaja. Bitne su dve osnovne razlike između formi i izveštaja:

• Izveštaji su namenjeni samo za štampanje i za razliku od formi, nisu namenjeni za pregled podataka u prozoru.

• Vrednost osnovnih podataka za izveštaj ne možete izmeniti.

Izveštaji Access imaju mnoge zajedničke karakteristike sa formama, uključujući sledeće:

• Report Wizards, prave tri osnovne vrste izveštaja: sa jednom kolonom, izveštaje po grupama i zbirovima i poštanske nalepnice;

• Sections (sekcije), sadrže zaglavlja i podnožja izveštaja koja se pojavljuju jednom na početku i na kraju izveštaja, i zaglavlja i podnožja stranice koja se štampaju na vrhu i dnu svake stranice. Podnožje izveštaja se često koristi za štampanje ukupnog zbira. Sekcije izveštaja odgovaraju sekcijama forme sličnih imena;

• Group sections (sekcije grupe) izveštaja, kao celina, obuhvataju ekvivalenat sekcije Detail forme. Grupe se često nazivaju pojasi (bands), a proces grupisanja zapisa formiranje pojasa (banding). Dodajete Group Headers koji uključuju naziv za svaku grupu, i Group Footers za štampanje grupnih podzbirova. U sekcije zaglavlja i podnožja možete staviti statičku (nezavisnu) grafiku, a unutar sekcija grupe zavisnu grafiku;

• Controls (kontrole) su dodati izveštajima iz okvira sa alatima Accessa i onda pomereni; njihova veličina se menja pomoću ručica; i

• Subreports (podizveštaji) se ugraduju u izveštaje na isti način na koji se kontrole podforme dodaju u glavne forme.

Postoji šest osnovnih tipova izveštaja napravljenih u Accessu, koji se zovu izgledi (layout):

• Izveštaji sa jednom kolonom (single-column reports), navode u jednoj dugoj koloni okvira za tekst vrednosti svakog polja u svakom zapisu tabele ili upita.

Page 81: Baze Podataka EKIS

Osnovne komponente Access aplikacija

81

Oznaka pokazuje ime polja, a okvir za tekst, desno od oznake, obezbeđuje vrednosti.

• Tabelarni izveštaji (tabular reports), obezbeđuju kolonu za svako polje tabele ili upita i štampanje vrednosti svakog polja zapisa u redovima ispod zaglavlja kolone.

• Višekolonski izveštaji (multicolumn reports) se prave iz izveštaja sa jednom kolonom, koristeći novinsku kolonu aplikacije stonog izdavaštva i obrade teksta. Informacije koje ne stanu u prvu kolonu prelaze na drugu kolonu, i tako redom. Format više kolonskih tabela troši manje papira, ali ima ograničenu upotrebu, jer poravnavanje kolona nije onakvo kakvo se želi.

• Izveštaji po grupama i zbirovima (groupsltotals reports) su najčešća vrsta izveštaja. Oni sabiraju podatke za grupe zapisa i onda dodaju ukupni zbir na kraju izveštaja.

• Poštanske nalepnice (mailing labels) su posebna vrsta višekolonskih izveštaja, projektovane za štampanje imena i adresa ili drugih podataka iz više polja, u grupama. Svaka grupa polja čini ćeliju u rešetki. Izgled samolepljive nalepnice robe na kojoj štampate, određuje koliko redova i kolona ima na stranici.

• Nezavisni izveštaji (unbound reports), sadrže podizveštaje zasnovane na nepovezanim izvorima podataka, kao što su tabele ili upiti.

Prva četiri tipa izveštaja koriste tabelu ili upit kao izvor podatak, kao što to rade forme. Za ovu vrstu izveštaja se kaže da su zavisni u odnosu na izvor podataka. Glavni izveštaj nekog nezavisnog izveštaja nije vezan na tabelu ili upit kao izvor podataka. Podizveštaji koji su u nezavisnom izveštaju, međutim, moraju biti zavisni u odnosu na izvor podataka.

Slično Form Wizard, Report Wizard omogućava da pravite izveštaje koji sadrže podatke iz više tabela, bez da prethodno napravite upit. Ovaj izveštaj prikazuje ime, prezime, adresu i platu radnika kao i naziv sektora u kome radi. Prednost korišćenja Report Wizard je što uvodi teme strukture izveštaja Access i što su koraci u ovom procesu paralelni sa koracima koji se čine pri počinjanju sa inicijalno praznim izveštajem.

Najlakši način kreiranja izveštaja je korišćenje Report Wizard-a. Nakon odabira opcije za kreiranje izveštaja potrebno je odabrati Report Wizard način kreiranja izveštaja.

Slika 6-8 Okvir za dijalog New Report, u kome birate tip izveštaja i izvor podataka

Page 82: Baze Podataka EKIS

Baze podataka

82

Slično formama, izveštaji zahtevaju izvor podataka, koji može biti tabela ili upit. Iz tabele ili upita biraju se kolone koje će biti prikazane u izveštaju.

Slika 6-9 Početni okvir za dijalog koji otvara Report Wizard omogućava izbor

polja izveštaja iz jedne ili više tabela ili upita

Nakon prolaska kroz sve korake Report Wizard-a, Report Wizard pravi izveštaj i prikazuje ga u režimu pogleda za štampanje.

Slika 6-10 Osnovni izveštaj koji napravi Report Wizard, prikazan u maksimizovanom prozoru

Prilikom formatiranja izveštaja moguće je koristiti ugrađene stilove na isti način kao kod formatiranja izgleda formi. Access posebno smešta stilove definisane za forme i za izveštaje pa je za izveštaje moguće kreirati posebne stilove. Formatiranje prikaza

Page 83: Baze Podataka EKIS

Osnovne komponente Access aplikacija

83

izveštaja posebno je bitno jer je svrha izveštaja njihovo pregledavanje i štampanje pa će u ovim situacijama svaki pogrešno postavljeni objekat bilo vrlo uočljiv. Zbog toga je prilikom pripreme izveštaja za pregledavanje i štampu u Access-u moguće poravnati i formatirati kontrole, podesiti razmak između redova, poravnati kontrole horizontalno i vertikalno, podesiti margine izveštaja i slično.

Većina kreiranih izveštaja zahteva organizovanje podataka u grupe i podgrupe, u stilu sličnom rasporedu kod knjige. Report Wizard obezbeđuje svojstava za početno grupisanje i sortiranje podatkaka. Okvir za dijalog Sorting and Grouping omogućava izmenu ovih svojstava da u režimu projektovanja izveštaja. Metod koji se koristi za grupisanje podataka zavisi od podataka u polju preko kojih se vrši grupisanje. Kada se grupisanje vrši po kategorijama, jedinstvena vrednost mora predstavljati svaku kategoriju. Kada se grupisanje vrši preko opsega vrednosti, one su obično numeričke, ali mogu biti i alfabetske. Korišćenjem Sorting and Grouping dijaloga moguće je odrediti kategorije po kojima se vrši grupisanje. Takođe korišćenjem ovog dijaloga moguće je menjati red grupisanja.

Slika 6-11 Okvir za dijalog Sorting and Grouping

Često je potrebno sortirati izveštaje po opsegu vrednosti. Ako je potrebno podeliti izveštaj i grupisati ga po kategoriji koja ima tekstualne vrednosti, a da svaka grupa sadrži vrednosti kateroje u opsegu od po tri sloca (A do C, D do F, itd.), unosi u okviru za dijalog Sorting and Grouping mogu da izgledaju kao unosi na slici 6-12.

Slika 6-12 Kriterijum Sorting and Grouping za grupne zapise u alfabetskim intervalima

Page 84: Baze Podataka EKIS

Baze podataka

84

Funkcija Accessa VBA =Asc([Ime]) vraća ASCII (numeričku) vrednost prvog karaktera njegovog argumenta niza. Potrebno je osobine Group On postaviti na Interval i postaviti Group Interval na 3. Ovo postavlja grupe podataka u imena koja počinju sa A do C, D do F, i tako dalje. Mada su vrednosti ograničene, alfabetsko grupisanje je često korisno za grupisanje dugih, alfabetskih lista za pomaganje čitaocima u traženju posebnog zapisa.

6.4 Izrada i korišćenje makroa Marko je jedan od objekata koje je moguće kreirati i koristiti u okviru Access

aplikacije koja se oslanja na korišćenje baze podataka. Makro je zapravo mali program koji omogućava ponovno izvršenje odgovarajućih akcija. Za razliku od makroa drugih Windows aplikacija, makroi u Access-u se ne koriste za dupliranje pritisaka tastera ili pomeranja miša. Ukupan broj dostupnih komandi za koje je moguće kreirati makroe u Access-u je relativno mali – skup komandi sastoji se od 56 komandi. Svaka od komandi poseduje naziv koji opisuje njenu funkcionalnost. Izgled okruženja za kreiranje makroa prikazan je na slici 6-13.

Slika 6-13 Okruženje za kreiranje makroa

Kolona MacroName omogućava uključivanje više makroa pod jednim makroom baze podataka. Ova opcija obično se koristi prilikom grupisanja povezanih makroa. Ova opcija se prikazuje izborom opcije Macro Name iz podmenija View glavnog menija Access-a. Kolona Condition omogućava unos uslovnog izraza koji određuje u kojim situacijama će posmatrani makro biti izvršen. Akcije obuhvaćene makroom će biti izvršene u situacijama kada je ispunjen uslov zadat izrazom tj kada izraz ima vrednost true. Ova opcija se prikazuje izborom opcije Conditions iz podmenija View glavnog menija Access-a. Kolona Action omogućava izbor akcije koja će se izvršiti prilikom pokretanja makroa. Akcije se izvršavaju odozgo naniže. Kolona Comment daje prostor za opis makroa.

Page 85: Baze Podataka EKIS

Osnovne komponente Access aplikacija

85

Makroe je moguće pokrenuti na više načina:

1. Ručno

2. Iz nekog drugog makroa

3. Iz nekog drugog objekta poput forme

4. Automatski prilikom pokretanja baze podataka

Makro je moguće pokrenuti ručno na više načina. Ukoliko je otvoren osnovni prozor Access okruženja, potrebno je izabrati ime makroa i pokrenitu makro korišćenjem Run dugmeta. U slučaju kada se makro posmatra u modu kada je moguće promeniti osobone makroa (eng. design view), marko je moguće pokrenuti izborom pocije Run u podmeniju Run glavnog menija okruženja. Takođe moguće je pokrenuti makro iz glavnog menija okruženja izborom podmenija Tools, zatim izborom opcije Macro podmenija Tools i izborom opcije Run Macro podmenija Macro (Tools -> Macro -> Run Macro) pri čemu je potrebno uneti ime makroa koji se pokreće. Makro je moguće pokrenuti iz drugog makroa odabirom akcije RunMacro. Ova akcija pokreće makro čije ime je definisano u delu Macro Name. Pokretanje odgovarajućeg makroa moguće je vezati i za druge objekte u sistemu. Pokretanje makroa vezuje se za događaje odgovarajućeg objekta koji bi trebalo da dovedu do pokretanja makroa. Primer objekta bilo bi dugme za čiji bi se OnClick događaj (ovaj događaj se desi svaki put kada korisnik pritisne dugme) vezalo izvršenje makroa. Takođe, moguće je pokrenuti makro prilikom pokretanja okruženja. Potrebno je kreirati makro pod imenom AutoExec. Ovaj makro poseduje akciju RunMacro koja pokreće odabrani makro prilikom pokretanja okruženja.

Kolona Condition prikazana u okruženju za kreiranje makroa kontrolu toka podataka u makrou. Podrazumevani redosled izvršenja komandi u makrou je sekvencijalni tj akcije se izvršavaju jedna za drugom po redosledu navedenom u okruženju za kreiranje makroa u koloni Action(odozgo naniže). Nasuprot sekvencijalnom izvršenju, izvršenje akcije može zavisiti od nekog uslova. Ovakav vid izvršenja predstavlja uslovno izvršenje akcija. Uslov je logički izraz čija vrednost može biti True ili False (tačno ili netačno). Ukoliko je uslov ispunjen (ako je njegova vrednost True), akcija će se izvršiti. U protivnom, neće doći do izvršenja akcije. Isti uslov može biti primenjen na više od jedne akcije tj ukoliko je uslov dodeljen jednoj akciji on može biti primenjen na akcije koje slede i to upisom oznake (...). Kombinovanjem akcija makroa, argumenata prosleđenih makroima i ugrađenih funkcija za definisanje uslova, omogućavaju iskusnim projektantima kreiranje makroa koji poseduju kompleksnu logiku sličnu logici koja je ugrađena u aplikacije razvijene korišćenjem nekog od viših programskih jezika. Na ovaj način makroi bi trebali da simuliraju osnovne upravljačke strukture viših programskih jezika.

Kako bi što bolje simulirali izvršenje programskih struktura, makroe je moguće izvršavati korak po korak. Korak po korak izvršenje makroa je posebno korisno u situacijama kada se izvršenje makroa ne desi na očekivani način. Mod u kome se makro izvršava korak po korak naziva se “Single Step” mod. Ovaj mod dozvoljava da se izvršava jedna po jedna akcija makroa sa pauzama u izvršenju između akcija kako bi se posmatrali i analizirali rezultati izvršenja svake od akcija. Kako bi se pokrenuo ovaj mod neophodno je otvoriti prozor za izmenu karakteristika makroa (Design View) i odabrati Single Step opciju iz Run podmenija glavnog menija aplikacije. Zatim je neophodno pokrenuti izvršenje makroa izborom Run opcije. Primer izvršenja makroa koji otvara formu u ovom modu prikazan je na slici 6-14.

Page 86: Baze Podataka EKIS

Baze podataka

86

Slika 6-14 Korak po korak izvršenje makroa (Single Step)

Ukoliko se prilikom izvršenja desi greška, prikazaće se Action Failed dijalog. Prilikom definisanja makroa moguće je odrediti argumente potrebne za izvršenje akcija makroa. Kod pojedinih akcija koje makro može da izvršava argumenti su neophodni dok su kod drugih opcioni. Ukoliko bi se za akciju makroa odabrala Close akcija, koja vrši zatvaranje nekog od trenutno aktivnih objekata, neophodno je izabrati objekat čije se zatvaranje vrši. Ovaj objekat predstavlja argument izvršenja makroa. Argument makroa moguće je selektovati u Action Arguments delu prozora za izmenu i dodavanje akcija makroa. Izgled ovakvog prozora prikazan je na slici 6-15. Neophodno je izabrati tip objekta čije zatvaranje vrši Close akcija posmatranog makroa u Object Type delu prozora. Nakon izbora tipa objekta, neophodno je izabrati ime objekta. Access će u Object Name delu prozora izlistati imena svih objekata čiji tip odgovara tipu selektovanom u Object Type delu prozora. Takođe, neophodno je odrediti da li se objekat koji se zatvara akcijom Close snima. Eventualno snimanje objekta određuje se odabirom odgovarajuće opcije u Save delu prozora. Pri izvršenja ovakvog makroa, Close akcija će izvršiti zatvaranje selektovanog objekta.

Slika 6-15 Argumenti akcije makroa

Akcije makroa je moguće dodati na više načina. Svaki od redova prikazanih u delu za dizajniranje tj izmenu karakteristika makroa, može biti iskorišćen za dodavanje akcije. Takođe, korišćenjem opcije Insert Rows iz podmenija Insert glavnog menija okruženja, moguće je dodati akciju u makro. Akcije je moguće ukloniti iz makroa brisanjem imena akcije iz odgovarajućeg reda u prozoru za dizajniranje makroa ili korišćenjem opcije Delete Rows podmenija Edit glavnog menija okruženja.

Page 87: Baze Podataka EKIS

Osnovne komponente Access aplikacija

87

Kako bi se kontrolisao tok izvršenja pojedinih akcija ili filtrirali podaci koje je potrebno prikazati ili štampati, makroi se najčešće vezuju za forme i izveštaje. Tačnije, makroi se vezuju za kontrole koje poseduju forme i izveštaji. Svaka od kontrola (dugme, padajuća lista i sl.) poseduje predefinisani skup sistemskih događaja (klik na dugme, otvaranje i zatvaranje padajuće liste i sl.) za koje je moguće vezati izvršenje makroa. Kada sistem bude detektovao i pokrenuo odgovarajući događaj, pokrenuće se i izvršenje makroa koji je vezan za taj događaj.

Osim prostog prikaza,korišćenjem makroa moguće je filtrirati podatke smeštene u bazi podataka. Filtriranje podataka vezuje se za akcije unutar makroa. Svaka akcija koja poseduje opciju Where Condition ima mogućnost filtriranja podataka. Where Condition opcija predstavlja ekvivalent WHERE delu standardne SQL SELECT naredbe. Ova opcija sadrži izraz na osnovu koga se vrši filtriranje podataka. Za definisanje izraza za filtriranje moguće je koristiti Expression Builder formu. Korišćenjem ove forme vrši se odabir podataka koji se filtriraju. Osim podataka smeštenih u bazi podataka, filtriranje je moguće primeniti na sadržaj pojedinih kontrola ili podskupa padataka prikazanih u formi ili izveštaju. Access poseduje predefinisani skup funkcija koje je moguće koristiti za filtriranje podataka. Izgled korišćenja Expression Builder-a prikazan je na slici 6-16.

Slika 6-16 Expression Builder

6.5 Access aplikacije Access pruža i mogućnost kreiranja baze podataka i aplikacije koja je koristi

korišćenjem jedinstvenog radnog okruženja. Kreiranje aplikacija za procesiranje podataka korišćenjem Access-a bazira se na kreiranju određenog broja međusobno povezanih formi i izveštaja. Kako bi svojim korisnicima omogućio kontrolu toka izvršenja obrade podataka, Access svojim korisnicima nudi mogućnost generisanja objekata koji mogu upravljati tokom obrade podataka. Makroi pripadaju grupi ovih objekata i najčešće su korišćeni tip objekata za upravljanje tokom obrade podataka. Korišćenjem makroa moguće je kreirati aplikacije kod kojih postoje uslovna izvršenja obrade i prikaza podataka, ponavljanje akcija, grupisanje akcija obrade podataka i sl. Osnovna komponenta od koje polazi izvršenje svake desktop aplikacije kreirane korišćenjem Access-a je forma. Za svaku aplikaciju neophodno je definisati formu od koje polazi njeno izvršenje. Primer definisanja početne forme aplikacije prikazan je na slici 6-17.

Page 88: Baze Podataka EKIS

Baze podataka

88

Slika 6-17 Definisanje početne stranice aplikacije

Aplikacija može posedovati proizvoljan broj formi. Pored prostog prikaza filtriranih ili nefiltriranih podataka, forme mogu posedovati kontrole. Kontrole predstavljaju delove korisničkog interfejsa aplikacije i mogu pokrenuti izvršenje određenih akcija. Kao takve, kontrole predstavljaju gradivne elemente korisničkog interfejsa svih Access aplikacija. Access poseduje predefinisani skup kontrola koje je moguće dodati na forme. Svaka od kontrola poseduje predefinisani skup događaja (klik na dugme, otvaranje i zatvaranje padajuće liste, čekiranje kontrole i sl.) za koje je moguće vezati određene akcije. Vezivanjem događaja pojedinačnih kontrola za akcije i makroe, moguće je kreirati aplikacije koje poseduju sve karakteristike desktop aplikacija razvijenih korišćenjem bilo kog višeg programskog jezika.

Obrađene podatke je često neophodno prikazati u struktuiranom i formatiranom obliku. U ove svrhe Access poseduje zasebne komponente – izveštaje (eng. reports). Izveštaji predstavljaju osnovu za pripremu za štampu procesiranih podataka. Korišćenjem izveštaja projektanti Access aplikacija imaju potpunu kontrolu nad konačnim izgledom procesiranih podataka u smislu njihovog formatiranja i grupisanja.

Zadatak

1. Korišćenjem Form Wizard-a kreirati formu u Access-u koja za svakog radnika prikazuje sledeće podatke: matični broj, ime, srednje slovo, prezime, adresu i platu. Podaci o radnicima čuvaju se u tabeli RADNIK baze podataka PREDUZEĆE.

2. Kreirati Access aplikaciju koja se sastoji od dve forme: Radnik i ClanPorodice. Forma Radnik prikazuje podatke o svakom od radnika i to: ime, srednje slovo, prezime, datum rođenja i adresu. Podaci o radnicima čuvaju se u tabeli RADNIK baze podataka PREDUZEĆE. Na formi Radnik su u jednom trenutku prikazani podaci o jednom od radnika. Forma Radnik poseduje 3 dugmeta: Sledeci, PrikaziClanovePorodice i Zatvori. Dugme Sledeci prikazuje podatke o narednom radniku tj omogućava kretanje kroz podatke o radnicima prelaskom na sledećeg radnika. Dugme Zatvori zatvara formu Radnik. Dugme PrikaziClanovePorodice otvara formu ClanPorodice. Forma ClanPorodice prikazuje članove porodice radnika čiji su podaci trenutno prikazani u formi Radnik. Ova forma poseduje dugme Zatvori koje zatvara formu i dugme Prikazi izvestaj koje otvara izveštaj ClanPorodiceReport. Ovaj izveštaj prkazuje podatke o članovima porodice radnika čiji su podaci trenutno prikazani u formi Radnik. Podaci o članovima porodice radnika čuvaju se u tabeli CLAN_PORODICE baze podataka PREDUZECE. Prilikom pokretanja aplikacije, pokreće se forma Radnik.

Page 89: Baze Podataka EKIS

7 Literatura

1. S.Đorđević-Kajan, L.Stoimenov, Baze podataka, praktikum za vežbe na računaru, Elektronski fakultet u Nišu, Edicija pomožni udžbenici, 2004.

2. D.Kroenke, D.Auer, Database Concepts, Third Edition, Pearson Prentice Hall, 2008.

3. R. Elmastri & S. Navathe, Fundamentals of Database Systems, Pearson International Education, Addison Wesley, 5th edition, 2007.