Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Lekcija 1
Sadržaj
•
Baze podataka
o
o
o
Šta je sistem baza podataka?
Šta je baza podataka?
Šta je Sistem za upravljanje bazama podataka (DBMS)?
Funkcije DBMSa
Tipovi sistema baza podataka
o
o
Modeli podataka
Relacioni model podataka
NULL Vrednosti atributa
Pregled osnovnih koncepata relacionog modela podataka
Svojstva relacije
Zadatak 1
Zadatak 2
o
Ključevi relacije
Zadatak 3
o
Relacioni integritet
Referencijalni integritet i spoljni ključevi
o
o
o
o
Predstavljanje šema relacione baze podataka
Pitanja
Relaciona šema baze podataka PREDUZEĆE
Zadaci
1. Baze podataka
1.1. Ciljevi lekcije
1.
Upoznati se sa značenjem termina "baza podataka".
2.
Upoznati se sa pojmom "sistem za upravljanje bazama podataka" (DBMS), njegovim
tipičnim funkcijama.
3.
Upoznati namenu "modela podataka".
4.
Upoznati se sa osnovim konceptima relacionog modela podataka
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, emailing 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-
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
1.2. Neophodno predznanje
1. Rad u Windows okruženju
2. Osnovno znanje o korišćenju Excel i drugih Office alata
3. Poznavanje pojmova „podatak", „tabela", „informacioni sistem" i sl.
1.3. Sistem baza podataka
Sistem baza podataka sadrži 4 osnovne komponente (slika 1):
(1) korisnici,
(2) aplikacija nad bazom podataka,
(3) sistem za upravljanje bazama podataka (Database Management System - DBMS), i
(4) baza podataka.
Slika 1. Komponente sistema baza podataka
1.4. Š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
-2-
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
podataka je deo procesa modeliranja odnosno izgradnje modela podataka. Model podataka je
detaljno objašnjen u sekciji nakon sekcije o DBMS-u.
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.
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.5. Š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.5.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.
-3-
Baze podataka - Relacioni model
•
•
Elektronski fakultet u Nišu
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,...
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.2. 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.
Komponente personalnog sistema baza podataka su prikazane na slici 2.
-4-
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Slika 2. Personalni sistem baza podataka
Na slici 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. Nema č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 3. Enterprise sistem baza podataka
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.
Važno:
Izabrani entiteti će kasnije u bazi podataka biti predstavljeni tabelama. Zbog
toga pogledajte pažljivo navedene 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,
-5-
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.7. Relacioni model podataka
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.
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.
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
-6-
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.1. 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.2. 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.
Domen atributa:
-7-
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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 4.
Relacioni model
Relacija
Torka
Atribut
Domen atributa
Šema relacije
Baza podataka
Tabela
Vrsta
Kolona
Tip podatka kolone
Opis tabele
Slika 4. Ekvivalentni skup pojmova
1.7.3. 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
-8-
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Redosled torki u relaciji teoretski nema značaja, ali praktično redosled torki u relaciji može
uticati na efikasnost pristupa torkama!
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
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
Ivana
Milan
Ana
Pera
SSL
PREZIME
S
I
P
K
Gocić
Savić
Rodić
Kostić
MBR
123456
234567
666777
555333
DATRODJ
15-10-87
01-03-57
03-12-50
31-12-53
SEKTOR
-9-
POL
Ž
M
Ž
M
PLATA
17000
32000
27000
43000
ADRESA
Niška 4
Humska 2
Savska 34
Čairska 3
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Dodatni zadatak
Ovo je delimično rešenje zadatka. Prepoznati ostale potencjalne relacije i njihove atribute!!
Zadatak 2:
Domeni atributa
Identifikovati domene atributa relacije RADNIK iz prethodnog primera.
Rešenje
Domeni nekih atributa relacije RADNIK su prikazani u sledećoj tabeli:
Atribut
LIME
Domen
Imena Osoba
Značenje
PREZIME
MBR
Prezime Osoba
Maticni Broj
DATRODJ
POL
PLATA
Datum
Rodjenja
Pol
PlataRadnika
Skup mogućih prezimena osoba
Skup mogućnih matičnih brojeva
radnika
Moguće vrednosti za datume rođenja
zaposlenih u preduzeću
Pol radnika
Moguće vrednosti plata radnika
ADRESA
AdresaRadnika
Moguće adrese radnika preduzeća
Skup mogućih imena osoba
Dodatni zadatak
Identifikovati domene atributa relacije SEKTOR!!
- 10 -
Definicija domena
Niz karaktera, dužine do 15.
Niz karaktera, dužine do 15.
Celi brojevi, napr. opsega 111111999999*
Datum, opseg, od 01-JAN-44 nadalje
Karakter (1), vrednost M i Ž
Broj, opseg od minLD do 40000.00,
gde je minLD minimalni republički
lični dohodak
Niz karaktera (30)
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.
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 relacioni
ključevi ili ključevi relacije, koji na jedinstven način identifikuje svaku torku
relacije.
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.
- 11 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Rešenje
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.
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.
Ograničenja
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)
- 12 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.
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
Ivana
Milan
Ana
Pera
SSL
PREZIME
S
I
P
K
Gocić
Savić
Rodić
Kostić
MBR
123456
234567
666777
555333
DATRODJ
POL
PLATA
15-10-87
01-03-57
03-12-50
31-12-53
Ž
M
Ž
M
17000
32000
27000
43000
SEKTOR
- 13 -
ADRESA
Niška 4
Humska 2
Savska 34
Čairska 3
MBRS
BRSEK
66777
NULL
55333
NULL
40
60
40
40
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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
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.
- 14 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
1.10. Predstavljanje šema relacione baze podataka
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
PLATA
POL
ADRESA
...
MATBROJS
BRSEK
PROJEKAT
NAZIV
LOKPR
BROJPR
BRS
SBROJ
MATBRR
DATPOST
SEKTOR
NAZIV
CLAN_PORODICE
MATBRRAD
IME
POL
SRODSTVO
LOK_SEKTOR
BRS
LOKACIJA
DATRODJ
RADI_NA
MBR
BRPR
SATI
Pitanja:
Pokušajte da odgovorite na sledeća pitanja. Nakon toga pogledajte ponovo materijal u ovoj
lekciji. Za svaki tačan odgovor dodelite sebi 2 poena, za delimično tačan 1, a za netačan 0.
Pogledajte ponovo one delove lekcije za koje ste imali 0 poena.
1.
Zašto je korišćenje baza podataka važno?
2.
Koja je svrha baze podataka?
3.
Šta je sistem baza podataka i koje su 4 osnovne komponente?
4.
Šta je baza podataka?
5.
Kako su organizovani podaci u bazi podataka?
6.
Šta je Sistem za upravljanje bazama podataka (DBMS)?
7.
Koje su funkcije DBMSa?
8.
Navesti tipove sistema baza podataka.
9.
Šta obezbeđuju modeli podataka?
10. Na koji način relacioni model predstavlja entitete (objekte realnog sveta)?
11. Šta je relacija, a šta su atributi relacije?
12. Šta je domen atributa?
13. Koje značenje imaju NULL vrednosti atributa?
14. Navesti osnovne koncepte relacionog modela podataka?
- 15 -
Baze podataka - Relacioni model
15.
16.
17.
18.
19.
20.
21.
Elektronski fakultet u Nišu
Navesti svojstva relacije.
Koja je uloga primarnog ključa relacije?
Navesti vrste ključeva koji mogu da postoje?
Kada se uvodi ključ surogat ili kolona ID?
Koje je značenje stranog ključa?
Šta podrazumeva relacioni integritet?
Na koji način se predstavlja relacioni model podataka?
1.10.1. Relaciona šema baze podataka PREDUZEĆE
Baza podataka PREDUZECE
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: baza podataka PREDUZECE
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
- 16 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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 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.
CLAN_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
- 17 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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
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
- 18 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Zadaci:
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.
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.
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.
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?
- 19 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.
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.
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.
- 20 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Lekcija 2
Sadržaj
•
SQL naredbe za kreiranje podataka
•
o
o
Neophodno predznanje
Baza podataka PREDUZEĆE
o
Definicija tabela
Test podaci za bazu podataka PREDUZEĆE
SQL naredbe za kreiranje podataka
o
o
Tipovi podataka
SQL DDL naredbe za kreiranje tabela RADNIK i
SEKTOR
Ograničenje kolone
Ograničenja tabele
o
o
o
Ograničenje stranog ključa
DDL naredbe za kreiranje baze podataka PREDUZEĆE
MS Access specifičnosti
Praktičan rad : MS Access
Pitanja za samostalni rad
2. SQL naredbe za kreiranje podataka
2.1. Ciljevi lekcije
•
•
•
•
Upoznati se sa osnovama SQL programskog jezike
Upoznati se sa različitim standardima SQL-a
Naučiti osnovne SQL naredbe za kreiranje strukture relacione baze podataka
Proučiti primer SQL naredbi za kreiranje structure relacione baze podataka
PREDUZEĆE
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
- 21 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
usvojeni predstavljaju zajedničke standarde organizacija ANSI i ISO (Tabela 1). Većina
RDBMS-ova implementira jedan od navedenih standarda.
Ostali nazivi
Godina Naziv
1986 SQL-86 SQL-87
1989 SQL-89 FIPS 127-1
1992 SQL-92 SQL2, FIPS 127-2
1999 SQL:1999 SQL3
2003 SQL:2003
2006 SQL:2006
2008 SQL:2008
Tabela 1 Usvojeni SQL standardi
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 2).
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
Tabela 2 Proširena SQL jezika koja su postala deo standarda
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.
- 22 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
2.2. Neophodno predznanje
Baza podataka
Predstavlja kolekciju
predstavljene tabelama.
povezanih
podataka
organizovanih
u
logičke
celine
Sistem za upravljanje bazama podataka (DBMS)
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.
Relacioni model
Model podataka koji 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.
Relacija
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.
Torka relacije
Vrsta relacije.
Relaciona baza podataka
Kolekcija normalizovanih relacija.
2.3. 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 1.
- 23 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Slika 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
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.
.
- 24 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Definicija tabela
Kolona
MatBr
Ime
SSLovo
Prezime
DatumRodj
Adresa
Pol
Plata
Rukovodilac
Sektor
Tip
Number
Text(20)
Text(1)
Text(30)
Date/Time
Text(100)
Text(1)
Number
Number
Number
Ključ
Primarni ključ
Ne
Ne
Ne
Ne
Ne
Ne
Ne
Strani ključ
Strani ključ
Obavezna
Da
Da
Da
Da
Ne
Ne
Ne
Ne
Ne
Da
Napomena
Long Integer
Single
Long Integer
Byt
Definicija tabele RADNIK
Kolona
Broj
Naziv
Sef
DatPost
Tip
Number
Text(50)
Number
Date/Time
Ključ
Primarni ključ
Ne
Strani ključ
Ne
Obavezna
Da
Da
Da
Ne
Napomena
Byte
Long Integer
Definicija tabele SEKTOR
Kolona
Broj
Naziv
Lokacija
Sektor
Tip
Number
Text(100)
Text(50)
Number
Ključ
Primarni ključ
Ne
Ne
Strani ključ
Obavezna
Da
Da
Ne
Da
Napomena
Integer
Byte
Definicija tabele PROJEKAT
Kolona
Tip
Radnik
Number
Ime
Text(20)
Pol
Text(1)
Srodstvo Text(10)
DatRodj Date/Time
Ključ
Primarni ključ, Strani ključ
Primarni ključ
Ne
Ne
Ne
Obavezna Napomena
Da
Long Integer
Da
Ne
Da
Ne
Definicija tabele CLAN_PORODICE
Kolona
Tip
Sektor Number
Lokacija Text(50)
Ključ
Primarni ključ, Strani ključ
Primarni ključ
Definicija tabele LOK_SEK
- 25 -
Obavezna
Da
Da
Napomena
Byte
Baze podataka - Relacioni model
Kolona
Tip
Radnik Number
Projekat Number
Sati
number
Elektronski fakultet u Nišu
Ključ
Primarni ključ, Strani ključ
Primarni ključ, Strani ključ
Ne
Obavezna
Da
Da
Da
Definicija tabele RADI_NA
Test podaci za bazu podataka PREDUZEĆE
- 26 -
Napomena
Long Integer
Integer
Byte
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
2.4. 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.
Osnovni format CREATE TABLE dat je u nastavku:
CREATE TABLE <ime_tabele>
(<lista_deklaracija_kolona>
[,<lista_deklaracija_organičenja_tabele>]);
Za deklaraciju kolona se koristi format koji je dat u nastavku:
<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.
- 27 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
2.4.1. Tipovi podataka
U Tabeli 3 su dati generički tipovi podataka koje definiše SQL standard. Ne
podržavaju svi RDBMS-ovi tipove podataka definisane u SQL standardu.
Tip podataka
integer
smallint
numeric(p,s)
decimal(p,s)
real
double
precision
float(p)
char(x)
Opis
Celobrojna vrednost
Celobrojna vrednost
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.
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.
Broj u pokrenom zarezu jednostruke preciznosti
Broj u pokretnom zarezu dvostruke preciznosti
Argument p definiše preciznost broja.
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 time koji uključuje i informaciju o vremenskoj zoni.
zone
timestamp with timestamp koji uključuje i informaciju o vremenskoj zoni..
time zone
Interval
Vremenski interval.
Tabela 3 Generički SQL tipovi podataka
U Tabeli 4 su navedeni tipovi podataka koje implementira Microsoft SQL Server familija
proizvoda.
Tip
podataka
binary(n)
char(n)
Opis
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.
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
- 28 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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
Colobrojna 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 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.
Tabela 4 Tipovi podataka koje implementira MS SQL Server
2.4.2. SQL DDL naredbe za kreiranje tabela RADNIK i SEKTOR
Primer 1
CREATE TABLE RADNIK
(
MatBr
Ime
SSlovo
Prezime
DatRodj
Pol
Plata
Adresa
Rukovodilac
Sektor
);
Int,
VarChar(15),
Char(1),
VarChar(15),
Date,
Char(1),
Numeric(8, 2),
VarChar(30),
Int,
Int
- 29 -
Baze podataka - Relacioni model
CREATE TABLE SEKTOR
(
Broj
Naziv
Sef
DatPost
);
Elektronski fakultet u Nišu
Int,
VarChar(15),
Int,
Date
2.4.3. Ograničenje 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.
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 CREATE TABLE koji je prikazan u nastavku.
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. DBMS 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.
- 30 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
2.4.4. SQL DDL naredba za kreiranje tabele PROJEKAT.
CREATE TABLE PROJEKAT
(
Broj
Int
Naziv
VarChar(25)
Lokacija
VarChar(15)
Sektor
Integer
);
PRIMARY KEY,
NOT NULL,
DEFAULT("Niš"),
REFERENCES SEKTOR(Broj)
2.4.5. 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
CREATE TABLE naredbe prikazan u nastavku.
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 3
SQL DDL naredba za kreiranje tabele RADI_NA.
CREATE TABLE RADI_NA
(
Radnik
Projekat
Sati
CONSTRAINT
Projekat)
);
Int,
Int,
Int
RadiNaPK
NOT NULL,
PRIMARY KEY (Radnik,
- 31 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
2.4.6. Ograničenje stranog ključa
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>)
[ON DELETE { NO ACTION | CASCADE | SET DEFAULT |SET NULL}]
[ON UPDATE { NO ACTION | CASCADE | SET DEFAULT |SET NULL}]
CHECK (<uslovni_izraz>)
);
Primer 4
SQL DDL naredba za kreiranje tabele CLAN_PORODICE.
CREATE TABLE RADI_NA
(
Radnik
Int,
Projekat
Int,
Sati
Int
CONSTRAINT
RadiNaPK
Projekat),
CONSTRAINT
RadnikFK
REFERENCES RADNIK(MatBr),
CONSTRAINT
ProjekatFK
REFERENCES PROJEKAT(Broj)
);
NOT NULL,
PRIMARY KEY (Radnik,
FOREIGN KEY (Radnik)
FOREIGN KEY (Projekat)
- 32 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
2.4.7. DDL naredbe za kreiranje baze podataka PREDUZEĆE
Primer 5
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
CONSTRAINT
RadnikPK
CONSTRAINT
RukovodiFK
REFERENCES RADNIK(MatBr),
CONSTRAINT
SektorFK1
REFERENCES SEKTOR(Broj)
);
CREATE TABLE SEKTOR
(
Broj
Naziv
Sef
DatPost
CONSTRAINT
CONSTRAINT
RADNIK(MatBr)
);
Int,
VarChar(15)
Int
Date,
SektorPK
SefFK
CREATE TABLE PROJEKAT
(
Broj
Int,
Naziv
VarChar(25)
Lokacija
VarChar(15)
Sektor
Integer
CONSTRAINT
ProjekatPK
CONSTRAINT
NadlezanFK
REFERENCES SEKTOR(Broj)
);
CREATE TABLE CLAN_PORODICE
(
Radnik
Int,
Ime
VarChar(15),
Pol
Char(1)
DatRodj
Date,
- 33 -
NOT NULL,
NOT NULL,
NOT NULL,
DEFAULT "M",
CHECK (PLATA > 1000),
NOT NULL,
PRIMARY KEY (MatBr),
FOREIGN KEY (Rukovodilac)
FOREIGN KEY (Sektor)
NOT NULL,
NOT NULL,
PRIMARY KEY (Broj),
FOREIGN KEY (Sef) REFERENCES
NOT NULL,
DEFAULT "Niš",
NOT NULL,
PRIMARY KEY (Broj),
FOREIGN KEY (Sektor)
NOT NULL DEFAULT "M",
Baze podataka - Relacioni model
CONSTRAINT
Elektronski fakultet u Nišu
ClanPorodicePK
PRIMARY KEY (Radnik,
Ime),
CONSTRAINT
RoditeljFK
REFERENCES RADNIK(MatBr)
);
CREATE TABLE LOK_SEK
(
Sektor
Int,
Lokacija
VarChar(15),
CONSTRAINT
LokacijaPK
Lokacija),
CONSTRAINT
SektorFK2
REFERENCES SEKTOR(Broj)
);
CREATE TABLE RADI_NA
(
Radnik
Int,
Projekat
Int,
Sati
Int
CONSTRAINT
RadiNaPK
Projekat),
CONSTRAINT
RadnikFK
REFERENCES RADNIK(MatBr),
CONSTRAINT
ProjekatFK
REFERENCES PROJEKAT(Broj)
);
FOREIGN KEY (Radnik)
PRIMARY KEY (Sektor,
FOREIGN KEY (Sektor)
NOT NULL,
PRIMARY KEY (Radnik,
FOREIGN KEY (Radnik)
FOREIGN KEY (Projekat)
2.5. MS Access specifičnosti
Trenutno najrasporostranjeniji standard SQL-a koji se koristi je ANSI SQL-92. Ovaj
standard implementira najveći broj proizvođača DBMS-a. Sa druge strane MS Access koristi
nešto stariju verziju standarda ANSI SQL-89. Takođe, kao i većina drugih proizvođala DBMSa, Microsoft je u MS Access SQL implementirao specifičnosti koje nisu deo SQL standarda. Iz
ovih razloga, postoje elementi SQL standarda koji neće raditi u MS Access-u. U nastavku će
biti navedene neki od elemenata SQL standarda, a vezani su za CRATE TABLE naredbu, koje
MS Access ne podržava:
•
•
•
MS Access ne podržava UNIQUE, CHECK i DEFAULT ograničenja. Ekvivalentna
ograničenja se mogu definisati u tabeli korišćenjem Desig View-a za tabelu.
Char i VarChar tipovi podataka se konvertuju u Text tip podataka
MS Access ne podržava u potpunosti SQL standard za definisanje ograničenja stranog
ključa. Podržano je samo osnovno kreiranje stranog ključa bez mogućnosti definisanje
ON UPDATE i ON DELETE akcija. Ove akcije se mogu naknadno definisati
korišćenjem posebnih alata za kreiranje tabela i definisanje relacija.
- 34 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
2.7. Praktičan rad : MS 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
•
•
•
Startujte MS Access - Windows
, Programs, pronaći ikonicu za Access
Pojaviće se početna upozorenja koja se odnose na sigurnost i treba ih potvrditi
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:
- 35 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
2. Kreiranje tabela i izbor ključa - nakon otvaranja Database Window-a kao na slici:
•
Počnite sa kreiranjem tabela klikom na Table i Create Table in Design View:
- 36 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
•
Kreirajte sve tabele iz baze podataka koju ste projektovali tako što ćete da unesete
imena i tipove kolona:
•
•
snimite tabelu pod željenim imenom
domene atributa odredite tipovima podataka koje nudi Access
•
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.
- 37 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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:
5. Podešavanja za očuvanje referencijalnog integriteta
•
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:
- 38 -
Baze podataka - Relacioni model
•
Elektronski fakultet u Nišu
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:
Pitanja za samostalni rad
Proučiti detaljno funkcije MS Access-a kao alata za razvoj aplikacija i DBMSa, kreirati bazu
podataka PREDUZEĆE korišćenjem relacionog modela koji je dat u ovoj lekciji.
- 39 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Lekcija 3
Sadržaj
•
Naredba SELECT I
•
o
o
o
o
Neophodno predznanje
Naredba SELECT
Klauzule SELECT i FROM
Klauzula WHERE
o
o
o
o
o
o
Logički operatori
Operator IN
Operator BETWEEN
Operator LIKE
Operator IS NULL
Klauzula ORDER BY
Aritmetičke funkcije
Funkcije agregacije
Praktični rad: MS Access
Pitanja za samostalni rad
3. Naredba SELECT I
3.1. Ciljevi lekcije
•
•
•
•
•
Upoznati se podrškom koju SQL pruža za pretraživanje podataka
Upoznati osnovnu strukturu SQL naredbe SELECT
Naučiti osnove korišćenja naredbe SELECT za pretraživanje podataka u jednoj tabeli
Upoznati se sa podržanim logičkim operatorima
Upoznati se sa podržanim aritmetičkim operatorima i funkcijama za agregaciju
podataka
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.
- 40 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
3.2. Neophodno predznanje
Relacija
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.
Torka relacije
Vrsta relacije.
SQL
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.
3.3. 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.
ORDER BY - koristi se za sortiranje rezultujuće tabele. Korisnici specificiraju kolone
po kojima se vrši sortiranje kao i smer sortiranja.
Klauzule 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.
- 41 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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;
Rezultat bi bio ekvivalenta da smo napisali upit kod koga su umesto * navedena imena svih
kolona u tabeli.
SELECT MatBr, ime, Sslovo, Prezime,
Plata, Rukovodilac, Sektor FROM RADNIK;
DatRodj,
Adresa,
Pol,
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;
- 42 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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 3
U nastavku je dat SQL upit koji za svakog radnik određuje matični broj njegovog neposrednog
rukovodioca.
SELECT Rukovodilac FROM RADNIK;
- 43 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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;
3.3.1. 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 koje zadovoljavaju specificirani uslov. U
uslovu se mogu javiti:
1.
2.
3.
4.
5.
6.
Relacioni operatori
Logički operatori
Operator BETWEEN
Operator IN
Operator LIKE
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 od
6. >= Veće ili jednako od
Primer 4
U ovom primeru dat je SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrović.
SELECT * FROM RADNIK
WHERE Prezime = "Petrović";
- 44 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Treba primetiti da se tekstualni podaci zadaju korišćenjem znaka navoda: "Petrović".
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;
Logički operatori
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;
- 45 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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 8
Primer sadrži SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrović ili se
prezivaju Jovanović.
SELECT * FROM RADNIK
WHERE Prezime = "Petrović" OR Prezime = "Jovanović";
Operator IN
Operator 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ć");
- 46 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Naredni upit pribavlja podatke o svim radnicima osim onih koji se prezivaju Petrović ili
Jovanović.
SELECT * FROM RADNIK
WHERE Prezime NOT IN ("Petrović","Jovanović");
Operator BETWEEN
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;
- 47 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Operator LIKE
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*";
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
Operator IS NULL se koristi za poređenje sa NULL vrednostima. Treba voditi računa da se na
NULL vrednosti ne može primeniti ni jedan relacioni operator. Može se samo proveravati da li
kolona ima NULL vrednost ili nema.
Primer
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;
- 48 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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 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;
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;
- 49 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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;
3.3.2. Aritmetičke funkcije
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 AS PlataSaBonusom
FROM RADNIK;
- 50 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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;
3.3.3. Funkcije agregacije
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)
- 51 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Primer 16
Funkcija COUNT određuje broj vrsta u rezultujućoj tabeli.
SELECT COUNT(*) AS PlataSaBonusom
FROM RADNIK;
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 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).
- 52 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
3.4. Praktični rad: MS Access
Rad sa SQL programskim jezikom u okviru MS Access-a se bazira na korišćenju
Query objekata u SQL View režimu. 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 1).
Slika 1
4. Izaberite stavku Create Query in Design View. Nakon toga se pojavljuje prozor Query 1:
Select Query i dijalog Show Table (Slika 2).
5. Korišćenjem dugmeta Close zatvorite Show Table dijalog. Prikazaće se prozor Query 1:
Select Query kao na Slici 3. Ovaj prozor se koristi za kreiranje upita 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.
- 53 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Slika 2
Slika 3
6. Kliknite na SQL View dugme na Query Design toolbar-u. Prozor Query 1: Select Query
se prebacuje u SQL View režim rada (Slika 4). Obratite pažnju da je komanda SELECT već
započeta.
- 54 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
7. Unesite komandu SELECT * FROM Customer kao na Slici 5.
Slika 4
Slika 5
8. Kliknite na dugme Run na Query Design toolbar-u. Ukoliko je sve u redu prikazuje se
rezultat upita kao na Slici 6.
9. Da bi ste snimili upit izaberite dugme Save na Query Design toolbar-u. Pojaviće se Save As
dijalog kao na Slici 7.
- 55 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Slika 6
Slika 7
10. 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.
11. Zatvorite prozor Test : Select Query. Objekat Test se sada pojavljuje u listi Query
objekata (Slika 8).
- 56 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Slika 8
Pitanja za samostalni rad
SQL upiti
Pokušajte da rešite niz zadataka koji je dat u nastavku. Za rešavanje koristite bazu podataka
PREDUZEĆE koje je priložena uz ovaj materijal.
1. Napisati SQL upit koji prikazuje kompletan sadržaj tabele SEKTOR.
2. Napisati SQL upit koji prikazuje nazive svih projekata koji postoje u preduzeću,
lokacije na kojima se nalaze i brojeve sektora koji su zaduženi za njih.
3. Napisati SQL upit koji određuje spisak različitih srodstava koje imaju članovi porodice.
4. Modifikovati upit iz tačke 2 tako da se podaci sortiraju u opadajućem redosledu po
lokacijama na kojima se nalaze.
5. Napisati SQl upit koji prikazuje imena svih projekata koji su locirani u Nišu.
6. Napisati SQL upit koji prikazuje imena svih projekata čije ime počinje slovom P.
7. Napisati SQL upit koji prikazuje imena svih projekata koji su locirani u Pirotu i čije
ime počinje slovom P.
8. Napisati SQL upit koji za projekte locirane u Nišu ili Leskovcu prikazuje njihova imena
i brojeve sektora koji su zaduženi za njih.
9. Napisati SQL upit koji prikazuje imena i pol svih članova porodice koji imaju srodstvo
"sin".
10. Napisati SQL upit koji određuje imena i prezimena svih radnika čija bi plata nakon
povećanja od 10% bila veća od 40000.
11. Napisati SQL upit koji za tip srodstva “sin” određuje broj članova porodice koji imaju
taj tip srodstva.
12. Napisati SQL upit koji određuje prosečnu zaradu za radnike koji rade u sektoru broj 4.
- 57 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Lekcija 4
Sadržaj
Naredba SELECT II
•
o
Neophodno predznanje
o
Klauzule GROUP BY i HAVING
o
Primena
Spajanje tabela
o
o
Dekartov proizvod (cross-join)
Unutrašnji spoj (inner-join)
Levi spoljašnji spoj (left-outer join)
Desni spoljašnji spoj (right-outer join)
Potpuni spoljašnji spoj (full-outer join)
Primena
o
Kombinovanje rezultata više SQL upita
o
Pitanja za samostalni rad
4. Naredba SELECT II
4.1. Ciljevi lekcije
•
•
•
•
Upoznati se sa mogućnostima SELECT naredbe za generisanje sumarnih informacija.
Naučiti osnove korišćenja naredbe SELECT za pretraživanje podataka u većem broju
tabela.
Upoznati se sa različitim tipovima spoja koji mogu da postoje između tabela.
Upoznati se sa mogućnošću kombinovanja rezultata većeg broja upita.
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ćemo se 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.
- 58 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
4.2. Neophodno predznanje
Relacija
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.
Torka relacije
Vrsta relacije.
Spoljni ključ / Strani ključ
Atribut ili skup atributa jedne relacije koji se uparuje sa ključem kandidatom neke druge ili iste
relacije.
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.
SQL
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.
Naredba SELECT
SQL naredba koja se koristi za pribavljanje podatke iz jedne tabele ili više povezanih tabela koje se
nalaze u relacionoj bazi podataka.
4.3. 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
- 59 -
Baze podataka - Relacioni model
Elektronski fakultet u Niš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.
SELECT Sektor, COUNT(*) FROM RADNIK
GROUP BY Sektor;
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.
- 60 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
SELECT Sektor, COUNT(*) FROM RADNIK
GROUP BY Sektor
HAVING COUNT(*) > 1;
Primena
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(*) AS BrojRadnika
FROM RADNIK
WHERE Pol = 'Ž'
GROUP BY Sektor
HAVING COUNT(*) > 1;
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.
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).
- 61 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
SELECT Sektor, Pol, COUNT(*) AS ProsekPlata
FROM RADNIK
GROUP BY Sektor, Pol
ORDER BY AVG(Plata);
4.4. 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 2 Videti šta će biti
naslov lekcije 2). 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, su
date u nastavku. 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.
- 62 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Tabela 1 Modifikovana tabela RADNIK
Tabela 2 Modifikovana tabela SEKTOR
4.4.1. Dekartov proizvod (cross-join)
Dekartov proizvod dve tabele (A CROSS JOIN B) se dobija tako što se svaka 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;
- 63 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
4.4.2. 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
- 64 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
WHERE SEKTOR1.Broj = RADNIK1.Sektor;
SELECT *
FROM SEKTOR1 INNER JOIN RADNIK1 ON SEKTOR1.Broj =
RADNIK1.Sektor;
4.4.3. 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 SEKTOR1 LEFT OUTER JOIN RADNIK1 ON SEKTOR1.Broj =
RADNIK1.Sektor;
- 65 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
4.4.4. 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 SEKTOR1 RIGHT OUTER JOIN RADNIK1 ON SEKTOR1.Broj =
RADNIK1.Sektor;
4.4.5. 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 SEKTOR1 FULL OUTER JOIN RADNIK1 ON SEKTOR1.Broj =
RADNIK1.Sektor;
- 66 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Primena
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 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
- 67 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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 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;
- 68 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
4.5. 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).
Klauzula INTERSECT vraća samo vrste koje se javljaju u rezultujućim tabelama
svih SQL upita koji se kombinuju.
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 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
- 69 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
SELECT Naziv
FROM SEKTOR, RADNIK
WHERE Broj = Sektor AND Prezime = 'Petrović';
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 16
Ukoliko želimo da dobijemo podake o radnicima koji rade u sektoru Administracija a plata im
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.
- 70 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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;
Pitanja za samostalni rad
SQL upiti
Pokušajte da rešite niz zadataka koji je dat u nastavku. Za rešavanje koristite bazu podataka
PREDUZEĆE koje je priložena uz ovaj materijal.
1. Napisati SQL upit koji za svaki broj sektora određuje broj projekata koji su zaduženi za
taj sektor.
2. Napisati SQL upit koji za svaki broj sektora računa prosečnu i maksimalnu platu
radnika koji rade u tom sektoru.
3. Napisati SQL upit koji za svaki tip srodstva određuje broj članova porodice koji imaju
taj tip srodstva.
4. Napisati SQL upit koji određuje brojeve sektora koji su zaduženi za dva i više projekta.
5. Napisati SQL upit koji za svakog radnika prikazuje ime, prezime, pol i naziv sektora u
kome rade.
6. Napisati SQL upit koji za svaki projekat prikazuje njegov broj, naziv i broj
angažovanih radnika.
7. Modifikovati upit iz zadatka 7 tako da se prikazuju samo podaci o projektima koji
imaju više od jednog angažovanog radnika.
8. Napisati SQL upit koji prikazuje imena i prezimena radnika koji imaju više od jednog
člana porodice.
9. Napisati SQL upit koji određuje imena i prezimena radnika koji rade u sektoru broj 4 i
nemaju nijednog člana porodice.
10. Napisati SQL upit koji za svaki projekat određuje ime i prezime rukovodioca sektora
koji je zadužen za taj projekat.
- 71 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
11. Napisati SQL upit koji određuje imena i prezimena radnika koji rade u sektoru broj a
angažovani su na projektima koji su u nadležnosti sektora broj 5.
12. Napisati SQL upit koji određuje imena i prezimena radnika koji se ne nalaze na poziciji
šef sektora.
Zadatak: Relacione baze podataka i SQL
Kao osnovu projekta potrebno je iskoristiti postojeću bazu podataka PREDUZEĆE (ova baza
podataka je išla kao prateći materijal uz lekcije o SQL-u).
Zadaci:
- Preuzeti MS Access verziju baze podataka PREDUZEĆE
- Kreirati tabelu GODISNJI_ODMORI. U ovoj tabeli se za svakog radnika pamte informacije kako je
tokom godine koristio svoj godišnji odmor (matični broj radnika, godina u kojoj se godišnji odmor
koristi, datum početka godišnjeg odmora, datum završetka godišnjeg odmora, broj radnih dana).
Primarni ključ tabele su matični broj radnika i datum početka godišnjeg odomora.
- Kreiranu tabelu povezati sa tabelom RADNIK
- Kreiranu tabelu napuniti fiktivnim podacima
- Napisati SQL upit koji prikazuje kompletan sadržaj tabele SEKTOR.
- Modifikovati upit iz tačke 6 tako da se podaci sortiraju u opadajućem redosledu prema nazivu sektora.
- Napisati SQL upit koji određuje imena i prezimena svih radnika čija bi plata nakon povećanja od 10%
bila veća od 40000.
- Napisati SQL upit koji za svaki broj sektora računa prosečnu i maksimalnu platu radnika koji rade u
tom sektoru.
- Napisati SQL upit koji za svaki projekat prikazuje njegov broj, naziv i broj angažovanih radnika.
Dostupan od: Utorak, 9. Juni 2009., 11:35
Krajnji rok za predaju: Četvrtak, 18. Juni 2009., 22:35
- 72 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Lekcija 5
Sadržaj
SQL naredbe za manipulaciju podacima
•
o
o
Neophodno predznanje
Dodavanje novih podataka
o
Dodavanje novih podataka korišćenjem upita
Ažuriranje podataka
Brisanje podataka
Modifikacija šeme relacione baze podataka
o
o
o
o
o
Brisanje tabele
Modifikacija tabele
Pitanja za samostalni rad
5. SQL naredbe za manipulaciju podacima
5.1. Ciljevi lekcije
•
•
•
•
Upoznati se sa SQL naredbom za dodavanje novih podataka
Upoznati se sa SQL naredbom za ažuriranje podataka
Upoznati se sa SQL naredbom za brisanje podataka
Upoznati se sa SQL naredbama za izmenu strukture relacione baze podataka
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.
- 73 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
5.2. Neophodno predznanje
Relacija
Tabela sa vrstama i kolonama.
Šema relacije
Predstavlja 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.
SQL
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.
5.3. 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. Ova tabela je
kreirana korišćenjem sledeće CREATE TABLE naredbe:
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)
);
- 74 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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( 1, "ProizvodX", "Niš", 5);
Primer 2
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.
Naredba INSERT...INTO kod koje je specificirana lista kolona.
INSERT INTO PROJEKAT
(Naziv, Broj, Sektor, Lokacija)
VALUES("ProizvodX", 1, 5, "Niš");
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.
- 75 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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, Lokacija)
VALUES('ProizvodX', 1, 5, 'Niš');
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.
5.3.1. Dodavanje novih podataka korišćenjem upita
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.
Primer 4
INSERT...INTO naredba koja koristi SQL upit da bi u tabelu PROJEKAT dodala podatke iz
fiktivne tabele PROJEKAT1.
INSERT INTO PROJEKAT
(Naziv, Broj, Sektor, Lokacija)
SELECT Naziv, Broj, Sektor, Lokacija
FROM PROJEKAT1;
- 76 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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);
- 77 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
5.4. Ažuriranje podataka
Za ažuriranje podataka se koristi SQL naredba UPDATE...SET. Osnovni oblik ove
komande je dat unastavku.
UPDATE <ime_tabele>
SET <ime_kolone> = <izraz> [,<ime_kolone> = <izraz>...]
[WHERE <uslov>];
Ključna reč 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;
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.
- 78 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
UPDATE PROJEKAT
SET Lokacija = 'Niš', Sektor = 4
WHERE Naziv LIKE 'Proizvod*';
5.5. 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;
- 79 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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 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.6. 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.6.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.
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 da obrišemo.
- 80 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Primer 10
U ovom primeru je data naredba koja briše tabelu RADNIK zajedno sa svim podacima koji se
u tabeli nalaze.
DROP TABLE RADNIK;
5.6.2. Modifikacija tabele
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
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;
- 81 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Pitanja za samostalni rad
SQL naredbe
Pokušajte da rešite niz zadataka koji je dat u nastavku. Za rešavanje koristite bazu podataka
PREDUZEĆE koje je priložena uz ovaj materijal.
1. Napisati SQL naredbe kojom se u tabelu PROJEKAT dodaju podaci o dva nova
projekta. Sami definišite podatke za nove projekte.
2. Napraviti tabelu PROJEKAT1 koja je idntična kopija tabele PROJEKAT. Napisati SQL
naredbu koja sve podatke iz tabele PROJEKAT kopira u tabelu PROJEKAT1.
3. Napisati SQL naredbu kojom se svi projekti sa lokacije Pirot sele na lokaciju Leskovac.
4. Napišite SQL upit kojim se svim radnicima plata povećava za 10%.
5. Napisati SQL upit kojim se projekat broj 3 seli u Beograd i prelazi u nadležnost sektora
broj 4.
6. Napisati SQL naredbu kojom se svi projekti koji su bili u nadležnosti sektora 4
prebacuju u nadležnost sektora Uprava.
7. Napisati SQL upit koji iz tabele RADI_NA briše podatke o angažovanju radnika čiji je
matični broj 333445555.
8. Napisati SQL upit koji za tabele CLAN_PORODICE briše sve podatke o članovima
porodice radnika koji se zove Marko J. Petrović.
9. Napisati SQL naredbu kojom se tabeli projekat dodaje nova kolona VREDNOST.
10. Napisati SQL upit kojim se briše ograničenje primarnog ključa u tabeli RADI_NA.
- 82 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Lekcija 6
Sadržaj
Osnovne komponente Access aplikacija
•
o
o
o
Neophodno predznanje
Uvod
Izrada i korišćenje formi
o
Kreiranje formi korišćenjem Form Wizard-a
Modifikovanje strukture forme
Izrada i korišćenje izveštaja
o
o
Sličnosti i razlike formi i izveštaja
Osnovni tipovi izveštaja u Access-u
Kreiranje izveštaja korišćenjem Report Wizard-a
Početno grupisanje i sortiranje podataka
Izrada i korišćenje makroa
o
o
o
o
o
Pokretanje i izvršenje makroa
Dodavanje akcija makroa
Filtriranje podataka korišćenjem makroa
Kreiranje aplikacije u Access-u
Pitanja
Zadatak
6. Osnovne komponente Access aplikacija
6.1. Ciljevi lekcije
•
•
•
•
Da se upoznamo sa osnovama kreiranja formi korišćenjem MS Access-a.
Da se upoznamo sa osnovama kreiranja izveštaja korišćenjem MS Access-a
Da se upoznamo sa osnovama kreiranja makroa korišćenjem MS Access-a
Da se upoznamo sa osnovama kreiranja aplikacija korišćenjem MS Access-a
6.2. Neophodno predznanje
•
•
•
Rad u Windows okruženju
Relacione baze podataka
Poznavanje osnovnih funkcija MS Access-a kao DBMSa
- 83 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
6.3. 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. 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.
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 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.
- 84 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
6.4. Izrada i korišćenje formi
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.
6.4.1. Kreiranje formi korišćenjem Form Wizard-a
Najlakši način da izradite formu je korišćenje Form Wizard-a. Korišcenje Form
Wizard značajno štedi vreme kreiranja strukturu 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.
- 85 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Form wizard omogućava odabir kolona iz tabela koje je potrebno prikazati na formi.
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.
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.
- 86 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
6.4.2. Modifikovanje strukture forme
Modifikovanje strukture forme ostvaruje se odabirom Form Design moda rada.
Pokretanjem ovog moda pojavljuje se prozor Form Design, 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.
Forme se mogu podeliti u tri sekcije: Form Header (zaglavlje forme), Detail (sekcija
Detalja) i Form Footer (podnožje forme) prikazane na slici 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. Funkcije dugmadi i njihovih ekvivalentnih izbora sa menija su prikazani
u tabelama u sledećoj sekciji;
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 pojavljuje samo
jednom. Formi možete dodati sekcije Form Header i Form Footer, ili ih izbrisati, biranjem
View, Form Header/Footer.
- 87 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Visinu sekcije možete izmeniti povlačenjem mišem vertikalnih traka Form Header,
Detail, 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.
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.5. 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.
- 88 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
6.5.1. Sličnosti i razlike formi i izveštaja
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.
6.5.2. Osnovni tipovi izveštaja u Access-u
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. 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.
- 89 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.
6.5.3. Kreiranje izveštaja korišćenjem Report Wizard-a
Najlakši način kreiranja izveštaja je korišćenje Report Wizard-a. 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. 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.
Nakon odabira opcije za kreiranje izveštaja potrebno je odabrati Report Wizard način
kreiranja izveštaja.
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.
- 90 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Nakon prolaska kroz sve korake Report Wizard-a, Report Wizard pravi izveštaj i
prikazuje ga u režimu pogleda za štampanje.
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 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.
6.5.4. Početno grupisanje i sortiranje podataka
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 podataka. 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.
- 91 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Č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 12.
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.6. 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.
- 92 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.
6.6.1. Pokretanje i izvršenje makroa
Makroe je moguće pokrenuti na više načina:
1.
2.
3.
4.
Ručno
Iz nekog drugog makroa
Iz nekog drugog objekta poput forme
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
- 93 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.
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.
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 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.
6.6.3. Dodavanje akcija 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.
- 94 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
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.
6.6.4. Filtriranje podataka korišćenjem makroa
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.
- 95 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
6.7. Kreiranje aplikacije u Access-u
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.
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.
Pitanja
Pokušajte da odgovorite na sledeća pitanja. Nakon toga pogledajte ponovo materijal u ovoj
lekciji. Za svaki tačan odgovor dodelite sebi 2 poena, za delimično tačan 1, a za netačan 0.
Pogledajte ponovo one delove lekcije za koje ste imali 0 poena.
1.
2.
3.
4.
5.
Šta predstavljaju forme u Access-u?
Od kojih elemenata su sastavljene forme?
Koji je najlakši način za kreiranje forme u Access-u?
Koje su tri osnovne sekcije formi u Access-u?
Čemu služe izveštaji u Access-u?
- 96 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
6. Koje su dve osnovne razlike između formi i izveštaja?
7. Koji je najlakši način za kreiranje izveštaja u Access-u?
8. Navesti jedan od načina za početno grupisanje i sortiranje podataka u izveštajima.
9. Šta je makro?
10. Koji je podrazumevani redosled izvršenja komandi u makrou i na koji način je moguće
izmeniti ovaj redosled?
11. Na koji način je moguće primeniti isti uslov na više akcija jednog makroa?
12. Navesti primer objekta i događaja posmatranog objekta za koji je vazano izvršenje
makroa.
13. Koju formu je moguće koristiti za filtriranje podataka korišćenjem makroa?
14. Šta je neophodno definisati da bi bilo moguće pokretanje Access aplikacije?
Zadatak
Access aplikacija
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.
- 97 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Lekcija 7
Sadržaj
ADO.NET
•
o
o
o
o
Neophodno predznanje
Uvod
ADO.NET data provider-i
Direktan pristup podacima korišćenjem ADO.NET-a
o
o
o
o
Kreiranje konekcije ka bazi podataka
Kreiranje SQL komande
Korišćenje DataReader objekta
Korišćenje sloja sa raskinutom vezom ADO.NET-a za
pristup podacima
Pitanja
Zadatak
7. ADO.NET
7.1. Ciljevi lekcije
•
•
•
•
Upoznati se sa osnovama ADO.NET-a
Upoznati se sa ADO.NET Data Provider-ima
Upoznati se sa direktnim pristupom podacima korišćenjem ADO.NET-a (kreiranje
konekcije ka bazi, kreiranje SQL komande, korišćenje DataReader objekta,
parametrizacija upita)
Upoznati se sa korišćenjem beskonekcionog sloja ADO.NET-a (korišćenje
DataAdapter, DataSet, DataTable, DataColumn i DataRow klasa)
7.2. Neophodno predznanje
•
•
•
Rad u Windows okruženju
Relacione baze podataka
Osnove programskog jezika C#
- 98 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
7.3. Uvod
Većina trenutno prisutnih aplikacija vrši obradu podataka. Najčešći način skladištenja
i korišćenja uskladištenih podataka je upotreba baza podataka. U najprostijem slučaju,
aplikacije koje pristupaju bazi podataka omogućavaju svojim korisnicima da pretražuju
podatke i prikazuju ih u tabelarnom obliku. Za pristup podacima projektanti aplikacija mogu
koristiti različite tehnologije.
U prošlosti je razvijeno više standardnih interfejsa za pristup bazama podataka. Svaki
sistem za upravljanje bazama podataka (eng. Database Management System – DBMS)
poseduje sopstveni programski interfejs (eng. Application Program Interface-API) čijim
korišćenjem je moguće iz programskog koda odnosno iz aplikacije, vršiti manipulaciju
podacima u bazi podataka. Programski interfejs (API) predstavlja kolekciju objekata i metoda
koji omogućavaju pozivanje funkcija sistema za upravljanje bazama podataka (DBMS-a) iz
programskog koda. Svaki DBMS poseduje svoj programski interfejs pa je bilo neophodno
razviti standarde za pristup bazama podataka kako projektanti aplikacija ne bi morali da koriste
različite intefejse u zavisnosti od konkretnog DBMS-a koji koriste.
Open Database Connectivity (ODBC) standard je razvijen sa ciljem da obezbedi
načine za manipulaciju podacima u relacionim bazama podataka koji bi bili nezavisni od
konkretnog DBMS-a. Microsoft je razvio OLE DB, objektno-orijentisani interfejs koji
enkapsulira funkcionalnosti servera baza podataka. OLE DB je razvijen ne samo za relacione
baze podataka već ima i mogućnost korišćenje drugih tipova podataka. Ovaj interfejs nisu
mogli koristiti projektanti koji su svoje aplikacije razvijali korišćenjem Visual Basic-a i script
jezika pa je Microsoft razvio Active Data Object (ADO) interfejs. ADO koristi funkcionalnosti
OLE DB interfejsa i može biti korišćen iz bilo kog programskog jezika.
ADO.NET je naslednik ADO-a i deo je Microsoft-ove .NET platforme. ADO.NET
ima niz karakteristika koje ga razlikuju u odnosu na prethodne tehnologije za pristup podacima.
Funkcionalnosti ADO.NET-a baziraju se na korišćenju novog objekta pod nazivom DataSet.
DataSet predstavlja lokalnu kopiju podataka pribavljenih iz baze podataka i može sadržati više
od jedne tabele. Verovatno najbitnija karakteristika ovog objekta je činjenica da pruža
mogućnost manipulacije nad podacima bez potrebe da veza sa bazom podataka bude u svakom
trenutku otvorena. Prethodne tehnologije za pristup podacima su pretpostavljale da je veza sa
bazom podataka aktivna za vreme izvršenja koda koji vrši obradu podataka. Stalno aktivna
konekcija dozvoljavala je trenutne izmene podataka i nadgledanje promena za vreme izvršenja
koda. Problem je predstavljao ograničeni broj konekcija koje je server baze podataka mogao da
pruži korisnicima pa su nakon zauzeća svih dostupnih konekcija ostali korisnici morali da
čekaju da se neka od konekcija oslobodi. ADO.NET ima u potpunosti drugačiji pristup u
odnosu na prethodnike. Konekcija sa bazom podataka se i dalje kreira ali je moguće mnogo
ranije osloboditi konekciju i učiniti je dostupnom ostalim korisnicima. Razlog je mogućnost
pribavljanja kopije podataka iz baze i skladištenja ovih podataka u DataSet objektu. Nakon
pribavljanja podataka, moguće je zatvoriti konekciju pre početka obrade podataka. Naravno,
nakon završetka obrade podataka izmenjena je jedino lokalna kopija podataka pa je neophodno
ponovo otvoriti konekciju ka bazi podataka kako bi bilo moguće snimiti izmene.
Još jedna razlika ADO.NET-a u odnosu na ADO je podrška ADO.NET-a za
predstavljanje podataka korišćenjem XML-a (eng. eXtensible Markup Language). Podaci
pribavljeni iz izvora podataka (relacione baze podataka) se serijalizuju korišćenjem XML-a.
Ovakav način serijalizacije podataka ima za posledicu da ADO.NET nije ograničen firewallom jer se komunikacija vrši standardnim HTTP protokolom.
- 99 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
7.4. ADO.NET data provider-i
Za razliku od ADO-a, ADO.NET ne poseduje jedinstveni skup tipova objekata koji
komuniciraju sa različitim sistemima za upravljanje bazama podataka (DBMS). ADO.NET
poseduje više skupova tipova objekata koji komuniciraju sa DBMS-im. Ove skupove tipova
objekata nazivamo data provider-ima. Svaki od data provider-a optimizovan je za interakciju sa
konkretnim DBMS-om. Prednost ovakvog pristupa je mogućnost pojedinačnih data provider-a
da imaju mogućnost manipulacije objektima koji su specifični za posmatrani DBMS. Još jedna
od prednosti je način komunikacije između data provider-a i DBMS-a. Naime, s obzirom da je
svaki data provider optimizovan za rad sa konkretnim DBMS-om, on komunicira direktno sa
DBMS-om tj ne postoji međusloj koji bi prilagodio zahteve korisnika konkretnom DBMS-u.
Data provider je najlakše posmatrati kao skup tipova objekata definisanih u određenom
prostoru imena (eng. namespace) koji imaju mogućnost direktne komunikacija sa konkretnim
DBMS-om. Svaki od data provired-a poseduje skup klasa koje omogućavaju izvršenje
osnovnih funkcionalnosti. Sve klase konkretnih data provider-a imaju zajedničke roditeljske
klase tj izvedene su iz istog skupa klasa i interfejsa, koje se nalaze u System.Data.Common
prostoru imena odnosno u System.Data prostoru imena. Osnovni objekti ADO.NET Data
Provider tipa objekta prikazani su u tabeli 1.
Objekat
Connection
Roditeljska
klasa
DbConnection
Implementira
interfejs
IDbConnection
Command
DbCommand
IDbCommand
DataReader
DbDataReader
IDataReader,
IDataRecord
DataAdapter DbDataAdapter
IDataAdapter,
IDbDataAdapter
Parameter
DbParameter
Transaction
DbTransaction
IDataParameter,
IDbDataParameter
IDbTransaction
Značenje
Omogućava otvaranje i zatvaranje
konekcije ka bazi podataka
Predstavlja
SQL
upit
ili
uskladištenu
proceduru.
Omogućava pristup DataReader
objektu konkretnog data provider-a
Omogućava
čitanje
podataka
korišćenjem kursora na serverskoj
strani
Prenosi DataSet objekte između
klijenta i izvora podataka. Poseduje
konekciju i skup od četiri osnovne
operacije
za
selektovanje,
dodavanje, izmenu i brisanje
podataka u izvoru podataka
Predstavlja imenovani parametar u
parametrizovanom upitu
Enkapsulira
transakciju
baze
podatak
Tabela 1: Osnovni objekti ADO.NET Data Provider-a
Iako će se imena konkretnih objekata svakog od konkretnih Data Provider objekata
razlikovati (npr. SqlConnection, OracleConnection, OdbcConnection ili MySqlConnection),
svi su izvedeni iz iste klase i implementiraju iste interfejse pa je nakon savladavanja korišćenja
jednog od data provider-a relativno jednostavno koristiti sve ostale. Struktura data provider-a
.NET platforme prikazana je na slici.
- 100 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Microsoft .NET platforma poseduje niz ugrađenih data provider-a za različite DBMSove. Spisak ugrađenih data provider-a prikazan je u tabeli 2.
Data Provider
OLE DB
Microsoft SQL Server
Microsoft SQL Server
Mobile
ODBC
Oracle
Prostor imena (namespace)
System.Data.OleDb
System.Data.SqlClient
System.Data.SqlServerCe
Biblioteka
System.Data.dll
System.Data.dll
System.Data.SqlServerCe.dll
System.Data.Odbc
System.Data.OracleClient
System.Data.dll
System.Data.OracleClient.dll
Tabela 2: Microsoft ADO.NET Data Provider-i
Pored data provider-a koji su ugrađeni u .NET platformu, moguće je koristiti data
provider-e koje obezbeđuju pojedinačni proizvođači besplatnih ili komercijalnih DBMS-ova
poput SQLite, DB2, MySQL, PostgreSQL ili Sybase.
Pored predstavljenih prostora imena, .NET platforma poseduje skup dodatnih prostora
imena koji svojim funkcionalnostima pripadaju skupu ADO.NET prostora imena. Neki od ovih
prostora imena prikazani su u tabeli 3.
Prostor imena
(namespace)
System.Data
System.Data.Common
System.Data.Sql
System.Data.SqlTypes
Značenje
Definiše osnovne ADO.NET tipove koje koriste svi data provider-i
Sadrži tipove koje dele svi ADO.NET data provider-i
Sadrži tipove koji omogućavaju otkrivanje instanci MS SQL Servera u lokalnoj mreži
Sadrži tipove podataka koje koristi Microsoft SQL Server
Tabela 3: Dodatni ADO.NET prostori imena
Od svih ADO.NET prostora imena (namespace-a), System.Data je najopštiji. Svaka aplikacija
koja želi da pristupa podacima korišćenjem ADO.NET-a mora koristiti klase definisane ovim
prostorom imena. System.Data sadrži klase koje su zajedničke za sve data provider-e. U tabeli
4 prikazani su osnovni članovi System.Data prostora imena.
- 101 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Klasa
Constraint
DataColumn
DataRelation
DataRow
DataSet
Značenje
Predstavlja ograničenje primenjeno na DataColumn objekat
Predstavlja jednu kolonu DataTable objekta
Predstavlja roditelj/dete odnos između dva DataTable objekta
Predstavlja jedan red u DataTable objektu
Predstavlja lokalnu kopiju podataka u memoriji klijentskog računara koji
se sastoji od niza povezanih DataTable objekata
DataTable
Predstavlja lokalnu kopiju tabele baze podataka
DataTableReader Omogućava čitanje podataka iz DataTable objekta red po red
DataView
Predstavlja pogled na tabelu baze podataka i koirsti se za sortiranje,
filtriranje, pretraživanje i izmenu podataka
Tabela 4: Osnovni članovi System.Data prostora imena
7.5. Direktan pristup podacima korišćenjem ADO.NET-a
Najlakši način izvršenja svih operacija nad bazom podataka je direktno izvršenje svih
operacija pri čemu se ne vodi računa o lokalnim kopijama podataka. Ovakav model je najbliži
tradicionalnom ADO programiranju i otklanja probleme konkurentnog izvršenja operacija nad
bazom podataka koji se dešavaju kada više korisnika istovremeno izvršava operacije nad istim
podskupom podataka. Ovakav način izvršenja operacija nad bazom podataka je dobro rešenje
kada je potrebno pročitati podatke ili izmeniti podake u jednom redu neke od tabela relacione
baze podataka. Ovakav pristup nije efikasan ukoliko je potrebno modifikovati više različitih
redova iz jedne ili više tabela.
Uobičajeni redosled operacija prilikom pribavljanja podataka korišćenjem ovakvog
pristupa sastoji se iz sledećih koraka:
1.
2.
3.
4.
Kreirati Connection, Command i DataReader objekte
Otvoriti konekciju
Koristiti DataReader za čitanje podataka iz baze podataka
Zatvoriti konekciju
7.5.1. Kreiranje konekcije ka bazi podataka
Pre pribavljanja ili izmene podataka neophodno je kreirati konekciju ka izvoru
podataka. Broj raspoloživih konekcija je ograničen pa je potrebno držati konekciju otvorenom
što je kraće moguće. Konekcija ka izvoru podataka u ADO.NET-u enkapsulirana je klasom
Connection. Prilikom kreiranja instance klase Connection neophodno je definisati
ConnectionString atribut ove klase. ConnectionString atribut predstavlja formatirani niz
karaktera sastavljen od niza ime/vrednost parova odvojenih međusobno karakterom ‘;’. Ovaj
atribut najčešće sadrži informacije o imenu mašine kojoj pristupamo, načinu autentifikacije
korisnika, imenu baze kojoj pristupamo i sl. U nastavku ja dat primer kreiranja konekcije
korišćenjem OLE DB data provider-a.
- 102 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Kreiranje konekcije
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
Data Source ukazuje na ime servera na kome se nalazi baza podataka kojoj
pristupamo. Initial Catalog predstavlja ime baze podataka kojoj ćemo pristupati korišćenjem
kreirane konekcije. Integrated Security ukazuje na način autentifikacije korisnika. U
posmatranom slučaju pristupa se korišćenjem Windows korisničkog naloga. Alternativno,
moguće je proslediti username i password naloga koji želimo da koristimo za pristup bazi
podataka.
Pre korišćenja konekcije neophodno je eksplicitno otvoriti konekciju:
Otvaranje konekcije
conn.Open();
Nakon ekplicitnog poziva funkcije za otvaranje konekcije, otvorena je i aktivna
konekcija ka bazi podataka. Nakon završetka obrade podataka neophodno je zatvoriti
konekciju pozivom funkcije za zatvaranje konekcije:
Zatvaranje konekcije
conn.Close();
Objekti klase Connection poseduju skup atributa kojima je moguće upravljati tokom
izvršenja transakcija nad bazom podataka i pribaviti informacije vezane za izvor podataka
kome se pristupa.
7.5.2. Kreiranje SQL komande
Nakon kreiranja konekcija ka bazi podataka, neophodno je izvršiti SQL naredbe za
manipulaciju nad podacima. Ukoliko koristimo SQL Server data provider, SQL naredbe se
izvršavaju korišćenjem instanci klase OleDbCommand tj korišćenjem OleDbCommand
objekta. Objekti klase OleDbCommand predstavljaju objektno-orijentisanu reprezentaciju
SQL upita, imena tabela ili uskladištenih procedura. Dakle, komande mogu biti različitog tipa.
Tip komande specificiran je CommandType atributom objekta klase OleDbCommand i može
imati neku od vrednosti iz ComandType enumeracije.
- 103 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Enumeracija tipova komandi
public enum CommandType
{
StoredProcedure,
TableDirect,
Text
}
Prilikom kreiranja komande moguće je navesti SQL upit kao argument konstruktora
objekta ili korišćenjem CommandText atributa OleDbCommand objekta. Prilikom kreiranja
komande neophodno je navesti konekciju koja će se koristiti za izvršenje komande. Konekciju
je moguće navesti kao argument konstruktora objekta ili korišćenjem Connection atributa
OleDbCommand objekta.
Kreiranje komande
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
String strSQL = "Select * from RADNIK";
OleDbCommand newComm = new OleDbCommand();
newComm.Connection = conn;
newComm.CommandText = strSQL;
Prosto kreiranje OleDbCommand objekta, ili bilo koje druge komande ako se koristi
neki drugi data provider umesto OLE DB data provider-a, ne znači da je SQL upit sadržan u
komandi automatski prosleđen na izvršenje. Objekat koji predstavlja komandu je nakon
kreiranja samo pripremljen za dalju upotrebu. Najbitnije metode članice OleDbCommand
objekta prikazane su u tabeli.
Metoda
Cancel()
ExecuteReader()
Značenje
Poništava izvršenje komande
Povratna vrednost funkcije je DataReader objekat izabranog data
provider-a
ExecuteNonQuery() Izvršava komandu od koje se ne očekuje da kao povratne vrednosti daje
podatke
ExecuteScalar()
Varijanta ExecuteNonQuery() koja kao povratnu vrednost vraća jedan
podatak
- 104 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
7.5.3. Korišćenje DataReader objekta
Nakon uspostavljanja konekcije ka bazi podataka i kreiranja SQL upita, neophodno je
izvršiti kreirani upit kako bi se pribavili podaci. Ukoliko se koristi OLE DB data provider,
najlakši i najbrži način za pribavljanje podataka je korišćenje DataReader objekata.
DataReader objekti mogu samo da čitaju podatke i to red po red unapred. Imajući ovo u vidu,
jasno je da je upotreba DataReader objekata korisna samo u situacijama kada je kreirani upit
SELECT SQL naredba. DataReader objekti posebno su koristi kada je potrebno brzo iterirati
kroz veliku količinu podataka pri čemu nije potrebno posedovati lokalne kopije jednom
očitanih podataka. DataReader objekti kreiraju se pozivom ExecuteReader() metode kreirane
komande. Nakon kreiranje DataReader objekta, jedan red rezultujuće tabele podataka
pribavlja se korišćenjem Read() metode.
Ukoliko pretpostavimo da je kreirana konekcija ka bazi, da bi se očitali podaci iz baze
podataka neophodno je napisati SQL upit koji selektuje potrebne informacije, kreirati komandu
koja će izvršiti upit i kreirati DataReader objekat koji će pribaviti podatke. U nastavku će biti
prikazan deo programskog koda koji izvršava selektovanje svih redova iz tabele RADNIK u
bazi podataka PREDUZECE.
Selektovanje podataka
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
String strSQL = "Select * from RADNIK";
OleDbCommand comm = new OleDbCommand(strSQL, conn);
OleDbDataReader reader;
conn.Open();
reader = comm.ExecuteReader();
while (reader.Read())
{
//programski kod koji vrši obradu pribavljenih podataka
}
conn.Close();
Pored izvršenja SQL upita koji vrše selektovanje podataka, moguće je izvršiti SQL
upite koji vrše dodavanje, izmenu ili brisanje podataka iz baze podataka. U nastavku će biti
prikazan deo programskog koda koji vrši dodavanje novog radnika, izmenu podataka o radniku
i briše podatke o radniku u tabeli RADNIK baze podataka PREDUZECE.
- 105 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Dodavanje, izmena i brisanje podataka
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
try
{
conn.Open();
//dodavanje novog radnika
String strSQL1 = "Insert into RADNIK values (123456781,'Marko', 'J', 'Petrovic',
'2/9/1965', 'Obilićev Venac', 'M', '30000',333445555, 5)";
OleDbCommand comm1 = new OleDbCommand(strSQL1, conn);
comm1.ExecuteNonQuery();
//izmena podataka o radniku
String strSQL2 = "Update RADNIK set Plata=50000 where MatBr=123456781";
OleDbCommand comm2 = new OleDbCommand(strSQL2, conn);
comm2.ExecuteNonQuery();
//brisanje podataka o radniku
String strSQL3 = "Delete from RADNIK where MatBr=123456781";
OleDbCommand comm3 = new OleDbCommand(strSQL3, conn);
comm3.ExecuteNonQuery();
}
catch (Exception exc)
{
//obrada izuzetka
}
finally
{
conn.Close();
}
- 106 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Često je neophodno parametrizovati upite koji se prosleđuju bazi podataka na osnovu
podataka koje su korisnici uneli u aplikaciju. Kako bi prosleđivanje podataka koje su korisnici
uneli bilo što sigurnije, ADO.NET poseduje mogućnost kreiranja parametrizovanih komandi.
Svaka ADO.NET komanda poseduje kolekciju individualnih parametara. Svaki od parametara
predstavlja nezavisni objekat koji je moguće kreirati i dodati u kolekciju ADO.NET
Command objekta. Parametri zauzimaju određeno mesto u SQL upitu koji komanda izvršava.
Kako bi se ukazala pozicija u SQL upitu na kojoj će se naći određeni parametar, koristi se
prefix @ praćen imenom odgovarajućeg parametra. U nastavku će biti prikazan primer
kreiranja i izvršenja parametrizovane komande pri čemu se koristi OLE DB data provider. U
slučaju korišćenja OLE DB data provider-a, parametri su instance klase OleDbParameter.
Izvršenje parametrizovane komande
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
//kreiranje parametra
OleDbParameter param = new OleDbParameter();
param.ParameterName = "@parameter";
param.Value = "Marko";
param.OleDbType = OleDbType.LongVarChar;
//kreiranje parametrizovanog upita
String strSQL = "Select * from RADNIK where [email protected]";
OleDbCommand comm = new OleDbCommand(strSQL, conn);
//dodavanje parametra u kolekciju parametara komande
comm.Parameters.Add(param);
try
{
conn.Open();
OleDbDataReader dr = comm.ExecuteReader();
while (dr.Read())
{
//obrada podataka
}
- 107 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
}
catch (Exception exc)
{
}
finally
{
conn.Close();
}
7.6. Korišćenje sloja sa raskinutom vezom ADO.NET-a za pristup
podacima
Korišćenje Connection, Command i DataReader objekata podrazumeva da je veza
ka izvoru informacija (bazi podataka) otvorena za sve vreme trajanja obrade podataka.
Prednosti i mane ovakvog načina pristupanja podacima opisane su u prethodnim poglavljima.
ADO.NET pored ovakvog načina pristupa podacima poseduje i drugačiji mehanizam, tzv.
pristup podacima korišćenjem sloja sa raskinutom vezom.
Korišćenje sloja sa raskinutom vezom za pristup podacima zasnovano je na kreiranju
lokalne kopije podataka koji se čuvaju u operativnoj memoriji klijentskog računara.
Korišćenjem tipova objekata iz System.Data ADO.NET prostora imena moguće je kreirati
lokalni model podataka koji će pored sirovih podataka posedovati veze između tabela,
ograničenja primenjena na kolone, primarne ključeve, poglede i sve druge karakteristike
modela podataka korišćenog za kreiranje baze podataka. Lokalni model podataka dozvoljava
korisnicima kreiranje i izvršavanje upita nad lokalnim podacima, njihovo filtriranje, sortiranje i
snimanje u bazu podataka.
U većini slučajeva, čak i prilikom korišćenja sloja sa raskinutom vezom ADO.NET-a,
neophodno je kreirati objekte koji predstavljaju konekciju i komandu. Za pribavljanje i
ažuriranje podataka se u slučaju korišćenja sloja sa raskinutom vezom za pristup podacima
koristi tzv. data adapter objekat koji predstavlja instancu DataAdapter klase. Za razliku od
direktnog pristupa podacima, podaci pribavljeni korišćenjem data adapter objekta se ne
pribavljaju korišćenjem DataReader objekata. Data adapter objekti koriste DataSet objekte za
prenos podataka od i ka bazi podataka. Svaki DataSet objekat može biti sastavljen od većeg
broja DataTable (tabela podataka) objekata koji poseduju kolekcije DataRow (red tabele) i
DataColumn (kolona tabele) objekata.
Data adapter objekat koji se koristi upravlja konekcijom ka bazi podataka automatski.
Kako bi se poboljšala funkcionalnost, data adapter objekat će konekciju ka bazi držati
otvorenom minimalni period vremena. Kada se na klijentskoj strani kreira DataSet objekat,
data adapter će prekinuti konekciju sa bazom podataka ostavljajući potpuno samostalnu kopiju
podataka na klijentskom računaru. Klijentska aplikacija može nakon toga nesmetano vršiti
izmene nad pribavljenom kopijom podataka. Ovaj proces prikazan je na slici.
- 108 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Da bi kreirali lokalnu kopiju podataka korišćenjem data adapter-a i DataSet objekata,
neophodno je najpre kreirati konekciju ka bazi podataka i komandu na osnovu koje će biti
kreirana lokalna kopija podataka. U nastavku je prikazan primer programskog koda koji vrši
učitavanje svih radnika iz tabele radnik korišćenjem OLE DB data adapter-a.
Korišćenje DataAdapter objekta
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
String strSQL = "Select * from RADNIK";
OleDbCommand comm = new OleDbCommand(strSQL, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(comm);
DataSet ds = new DataSet();
try
{
conn.Open();
adapter.Fill(ds, "Radnici");
}
catch (Exception exc)
{
//obrada izuzetka
}
finally
{
conn.Close();
}
Nakon kreiranja lokalne kopije podataka tj DataSet objekta, moguće je ažurirati
pribavljene podatke. U nastavku je prikazan primer programskog koda koji vrši ažuriranje
podataka o sivm radnicima čije je ime Milos postavljajući im platu na vrednost 30000.
- 109 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Ažuriranje podataka
foreach (DataRow dr in ds.Tables["Radnici"].Rows)
{
if (dr["Ime"].ToString() == "Milos")
{
dr["Plata"] = 30000;
}
}
Moguće je takođe i obrisati neki od redova u lokalnoj kopiji podataka ili dodati novi red.
Brisanje i dodavanje podataka
foreach(DataRow dr in ds.Tables["Radnici"].Rows)
{
if(dr["Ime"].ToString() == "Milos")
{
dr["Prezime"] = "Bogdanović";
dr["SSlovo"] = "M";
dr["DatRodj"] = "1/1/2011";
dr["Adresa"] = "Bulevar Nemanjića 5/11";
dr["Plata"] = 20000;
DataRow row = ds.Tables["Radnici"].NewRow();
row["MatBr"] = 223456789;
row["Ime"] = "Milos";
row["Prezime"] = "Obilic";
row["SSlovo"] = "M";
row["DatRodj"] = "1/1/2011";
row["Adresa"] = "Bulevar Nemanjića 8/11";
row["Plata"] = 30000;
- 110 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
ds.Tables["Radnici"].Rows.Add(row);
}
}
Sve izmene učinjene na lokalnoj kopiji podataka mogu se snimiti u bazu podataka
korišćenjem Update() metode DataAdapter objekta.
Snimanje podataka
OleDbCommandBuilder myOleDbCommandBuilder = new
OleDbCommandBuilder(adapter);
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
int izmenjeniRedovi = adapter.Update(ds,"Radnici");
ADO.Net održava informacije o originalnim i trenutnim vrednostima svih podataka
koji se nalaze u DataSet objektu. Prilikom ažuriranja podataka, ADO.NET traži redove koji u
potpunosti odgovaraju originalnim vrednostima podataka u redovima DataSet objekta i po
pronalaženju ih zamenjuje novim redovima tj podacima iz redova lokalne kopije. U ovom
trenutku lako je uočiti da će problem nastati ukoliko neki drugi korisnik izmeni podatke pre
nego što naša aplikacija snimi izmenjene podatke. Naime, drugi korisnici mogu izmeniti
podatke u bazi pa prilikom upoređivanja originalnih vrednosti lokalnih kopija podataka i
podataka u bazi neće doći do poklapanja. U ovakvim situacijama desiće se izuzetak. Ovakve
situacije moguće je preduprediti korišćenjem DataAdapter.RowUpdated događaja. Ovaj
događaj dešava se prilikom izvršenja svake insert, update ili delete operacije ali pre nego štio
se desi izuzetak pa nam daje mogućnost da sprečimo dešavanje izuzetka.
DataAdapter.RowUpdated događaj dešava se u trenucima dok aplikacija radi sa DataSet
objektom i otvara novu konekciju ka bazi podataka pa je preporučljivo da programski kod koji
se izvršava u ovim situacijama bude što manji.
Pitanja
Pokušajte da odgovorite na sledeća pitanja. Nakon toga pogledajte ponovo materijal u ovoj
lekciji. Za svaki tačan odgovor dodelite sebi 2 poena, za delimično tačan 1, a za netačan 0.
Pogledajte ponovo one delove lekcije za koje ste imali 0 poena.
1.
2.
3.
4.
5.
Na kom novom objektu se bazira najveći deo funkcionalnosti ADO.NET-a?
Šta je data provider?
U kojim prostorima imena se nalaze roditeljske klase svih ADO.NET data provider-a?
Navesti osnovne članove System.Data prostora imena.
U kojim situacijama je dobro koristiti direktan pristup podacima korišćenjem
ADO.NET-a?
6. Koji je uobičajeni redosled operacija prilikom direktnog pristupa podacima korišćenjem
ADO.NET-a?
7. Koja klasa enkapsulira konekciju ka izvoru podataka u ADO.NET-u?
8. Šta predstavlja ConnectionString atribut klase Connection?
- 111 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
9. Ukoliko se koristi OLE DB data provider, koja klasa predstavlja objektno-orijentisanu
reprezentaciju SQL komande koju je neophodno izvršiti?
10. Čemu služe instance klase DataReader i na koji način je moguće instancirati objekte
ove klase?
11. Šta predstavljaju parametri SQL komande?
12. Ukoliko se koristi OLE DB data provider, na koji način je moguće ukazati na poziciju
koju parametar zauzima u SQL upitu?
13. Na čemu se bazira korišćenje beskonekcionog pristupa podacima korišćenjem
ADO.NET-a?
14. Koja se klasa koristi za instanciranje objekata koji omogućavaju pribavljanje i
ažuriranje objekata?
15. Koja klasa se koristi za instanciranje objekata koji vrše prenos podataka od i ka bazi
podataka kod beskonekcionog pristupa ADO.NET-a?
Zadatak
ADO.NET
1. Korišćenjem ADO.NET direktnog pritupa podacima pronaći radnika čiji je matični broj
123456789 i izmeniti njegovo ime na “Aleksandar”. Za pristup podacima koristiti OLE
DB data provider. Podaci o radnicima čuvaju se u tabeli RADNIK baze podataka
PREDUZECE.
2. Korišćenjem beskonekcionog sloja ADO.NET-a kreirati lokalnu kopiju podataka o
svim radnicima, povećati svim radnicima platu za 15% i snimiti izmenjene podatke. Za
pristup podacima koristiti OLE DB data provider. Podaci o radnicima čuvaju se u tabeli
RADNIK baze podataka PREDUZECE.
- 112 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Lekcija 8
Sadržaj
•
Povezivanje Windows Forms i ASP.NET kontrola i podataka
korišćenjem C# programskog jezika i ADO.NET-a
•
o
o
o
Neophodno predznanje
Uvod
Povezivanje podataka sa Windows Forms kontrolama
o
Jednostavno povezivanje Windows Forms kontrola sa
podacima
Složeno povezivanje Windows Forms kontrola sa
podacima
Povezivanje podataka sa ASP.NET kontrolama
o
o
o
o
Jednostavno povezivanje podataka sa ASP.NET
kontrolama
Složeno povezivanje podataka sa ASP.NET
kontrolama
Pitanja
Zadatak
8. Povezivanje Windows Forms i ASP.NET kontrola i
podataka korišćenjem C# programskog jezika i ADO.NET-a
8.1. Ciljevi lekcije
•
•
•
•
Upoznati se sa osnovama mehanizma jednostavnog povezivanja podataka sa Windows
Forms kontrolama
Upoznati se sa osnovama mehanizma složenog povezivanja podataka sa Windows
Forms kontrolama
Upoznati se sa osnovama mehanizma jednostavnog povezivanja podataka sa ASP.NET
kontrolama
Upoznati se sa osnovama mehanizma složenog povezivanja podataka sa ASP.NET
kontrolama
8.2. Neophodno predznanje
•
•
•
•
Rad u Windows okruženju
Relacione baze podataka
Osnove programskog jezika C#
Osnove ADO.NET-a
- 113 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
8.3. Uvod
Gotovo sve aplikacije koje se mogu nazvati značajnim koriste podatke u nekom
obliku. Prilikom kreiranja ovakvih aplikacija neophodno je posedovati efikasne mehanizme za
skladištenje, pribavljanje i manipulaciju nad podacima. Ukoliko se pribavljeni podaci prikazuju
korisnicima kroz kontrole korisničkog interfejsa aplikacije, neophodno je posedovati intuitivne
načine za prikazivanje podataka koji će omogućiti korisnicima da na lak i efikasan način
manipulišu podacima.
.NET platforma poseduje predefinisani skup kontrola koje je moguće koristiti za
prikazivanje i manipulaciju nad podacima. Ove kontrole ugrađene su u Windows Forms i
ASP.NET interfejse za razvoj desktop i Web aplikacija. Ugrađene kontrole omogućavaju
projektantima desktop i Web aplikacija relativno jednostavan način kreiranja korisničkog
interfesja koji ima mogućnost povezivanja sa bazom podataka.
Povezivanje korisničkog interfejsa tj kontrola od kojih je korisnički interfejs izgrađen,
je jedan od problema koji su projektanti aplikacija u prošlosti rešavali na različite načine. Bilo
je neophodno kreirati konekciju ka bazi podataka i očitati podatke, a zatim razviti programski
kod koji bi grafički prikazao pribavljene podatke ili popuniti kontrole koje se prikazuju
korisnicima. Programski kod razvijen na ovaj način morao je biti različit u zavisnosti od
posmatrane situacije i potreba korisnika. Takođe, ukoliko se korisnicima dozvoli mogućnost
izmene pribavljenih podataka, bilo je neophodno razviti programski kod koji bi pribavljao
izmenjene podatke iz delova korisničkog interfejsa, skladištio te podatke u memorijske
strukture na klijentskom računaru i vršio upis izmenjenih podataka u bazu podataka. Ovakav
pristup zahtevao je mnogo programskog koda koji se često ponavljao i bio podložan greškama.
Predefinisani skup kontrola ugrađen u .NET platformu enkapsulira prethodno opisani
proces i smanjuje količinu programskog koda koji je potrebno razviti. Deo koda smešten je u
kontrole sa kojima se povezuju podaci i koje prikazuju podatke, dok je ostatak koda smešten u
objekte koji korisnicima nisu vidljivi i koji olakšavaju povezivanje podataka i kontrola. .NET
platforma takođe uvodi obrasce po kojima se razvija programski kod kojim se vrši lako
povezivanje podataka sa kontrolama koje ih prikazuju korisnicima.
8.4. Povezivanje podataka sa Windows Forms kontrolama
Većinu kontrola ugrađenih u .NET platformu je moguće povezati sa podacima.
Ovakvo ponašanje posledica je činjenice da su sve Windows Forms kontrole izvedene iz klase
Control koja implementira IBindableComponent interfejs. Svaka kontrola koja implementira
IBindableComponent interfejs poseduje kolekciju objekata klase Binding i naziva se
DataBindings. Pojedine kontrole poseduju složenije mehanizme povezivanja sa podacima.
Dodatna funkcionalnost ogleda se kroz dodatne atribute članove klase poput DataSource,
DataMember, DisplayMember i ValueMember atribute.
Kako je ranije naglašeno, povezivanje sa podacima u .NET platformi predstavlja
mehanizam za automatsko povezivanje i sinhronizovanje podataka koji su uskladišteni u
operativnoj memoriji sa kontrolama korisničkog interfejsa koje prikazuju podatke.
Korišćenjem ovog mehanizma moguće je povezati kontrolu sa podacima i u potpunosti
prepustiti kontroli upravljanje nad prikazom podataka. Prilikom korišćenja ovog mehanizma
neophodno je sagledati pravce toka podataka i vremenske trenutke kada se zapravo prenose
podaci. Ukoliko je prenos podataka jednosmeran, podaci se prenose od izvora podataka ka
- 114 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
kontroli čiji se atributi popunjavaju pribavljenim podacima. Ukoliko je prenos podataka
dvosmeran, izmenjene vrednosti atributa kontrola ažuriraju vrednosti podataka u
odgovarajućem izvoru podataka. Većina mehanizama .NET platforme za povezivanje kontrola
sa podacima je dvosmerna. Dvosmerni mehanizmi povezivanja kontrola sa podacima
omogućava da se ažuriranje pribavljenih podataka vrši automatski tj bez potrebe za razvijanjem
dodatnog programskog koda koji bi vršio ažuriranje podataka.
Kako bi mehanizam koji povezuje podatke i kontrole bio pokrenut, neophodno je
postojanje programskog koda koji će pokrenuti funkcionisanje mehanizma. Pokretač
mehanizma može biti:
•
•
Izvršenje linije koda koja uvodi povezivanje kontrole i podataka
Izvršenje linije koda koja osvežava kontrolu, izvor podataka ili sam
mehanizam povezivanja
•
Izvršenje događaja koji je pokrenut zbog promena u izvoru podataka ili
u kontroli
Postoje dva primarna oblika povezivanja kontrola .NET platforme sa izvorima
podataka: jednostavno povezivanje (eng. simple data binding) i složeno povezivanje (eng.
complex data binding).
8.5. Jednostavno povezivanje Windows Forms kontrola sa podacima
Jednostavno povezivanje kontrole sa izvorom podataka vrši mapiranje atributa
kontrole na atribut izvora podataka. Primer ovakvog povezivanja biće prikazan u nastavku na
primeru povezivanja ComboBox kontrole sa tabelom RADNIK baze podataka PREDUZECE.
ComboBox objekat poseduje DisplayMember atribut koji određuje koji će atribut iz izvora
podataka kontrola koristiti za prikazivanje svake od stavki. Moguće je odrediti i
ValueMember atribut ComboBox objekta. Ovaj atribut sadrži dodatne informacije koje se
vezuju za svaku od stavki prikazanih u ComboBox objektu. Obično se za svaku prikazanu
stavku ComboBox objekta vezuje primarni ključ ili referenca na objekat kada bi se svaka od
stavki mogla jedinstveno identifikovati u izvoru podataka radi dalje manipulacije nad
podacima.
Jednostavno povezivanje kontrola sa podacima
ComboBox c = new ComboBox();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
String strSQL = "Select * from RADNIK";
OleDbCommand comm = new OleDbCommand(strSQL, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(comm);
- 115 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
DataSet ds = new DataSet();
try
{
conn.Open();
adapter.Fill(ds, "Radnik");
conn.Close();
c.DataSource = ds.Tables["Radnik"];
c.DisplayMember = "Ime";
c.ValueMember = "MatBr";
c.DropDownStyle = ComboBoxStyle.DropDownList;
}
catch(Exception exc)
{
//obrada izuzetka
}
U ovom primeru DataSource atribut ComboBox objekta je tabela Radnik koja se
nalazi u DataSet objektu ds. Atributu DisplayMember ComboBox objekta je dodeljeno ime
atributa (u ovom slučaju ime kolone tabele Radnik) čije će vrednosti biti pročitane iz svakog
reda tabele izvora podataka i prikazane u ComboBox kontroli kao tekst. Atribut
ValueMember ComboBox objekta ukazuje na atribut MatBr tabele Radnik, koji je primarni
ključ, kako bi odgovarajući red tabele Radnik mogao da bude selektovan kada korisnik izabere
neku od stavki ComboBox objekta.
8.6. Složeno povezivanje Windows Forms kontrola sa podacima
Složeno povezivanje kontrole sa izvorom podataka je mehanizam koji povezuje
kontrole sa kolekcijama podataka. Kontrole koje se povezuju sa podacima ovim mehanizmom
imaju mogućnost prikaza kolekcija podataka. Najčešće se koriste kontrole koje imaju
mogućnost tabelarnog prikaza podataka. DataGridView kontrola pripada ovoj grupi kontrola.
DataGridView kontrola pripada Windows Forms prostoru imena. Ova kontrola
prikazuje podatke koji su vezani za nju u tabelarnom obliku. Ova kontrola sastoji se od redova
i kolona pri čemu presek svakog reda i kolone predstavlja ćeliju. Ćelija je osnovna jedinica
predstavljanja podataka u kontroli. Izgled i ponašanje ćelije je moguće prilagoditi potrebama
aplikacije korišćenjem atributa i događaja koje kontrola poseduje. DataGridView poseduje
posebne ćelije u zaglavljima redova i kolona. Ćelije smeštene u zaglavljima su posebno
grafički naznačene i ukazuju na mod rada kontrole poput sortiranja, ažuriranja i selekcije
- 116 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
podataka ili dodavanja novog reda. Ćelije mogu biti različitih tipova čak i u istoj koloni
ukoliko podaci nisu vezani za kontrolu, što u našem primeru neće biti slučaj. U nastavku će biti
prikazan programski kod koji vrši vezivanje podataka iz tabele RADNIK baze podataka
PREDUZECE za DataGridView kontrolu.
Složeno povezivanje kontrola sa podacima
DataGridView dgv = new DataGridView();
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
String strSQL = "Select * from RADNIK";
OleDbCommand comm = new OleDbCommand(strSQL, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(comm);
DataSet ds = new DataSet();
try
{
conn.Open();
adapter.Fill(ds, "Radnik");
conn.Close();
dgv.DataSource = ds.Tables["Radnik"];
dgv.Width = this.Width;
this.Controls.Add(dgv);
}
catch (Exception exc)
{
//obrada izuzetka
}
- 117 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Prikazani primer najčešći je slučaj upotrebe DataGridView kontrole. Kako je ranije
rečeno, DataGridView kontrola kao izvor podataka koristi kolekcije podataka. Primer
ovakvog izvora podataka je DataSet objekat. Iako DataSet objekat može sadržati više tabela,
od kojih svaka predstavlja kolekciju podataka, DataGridView kontrola je projektovana tako da
u jednom trenutku može prikazivati samo jednu od kolekcija koje sadrže podatke. Na primer,
svaka od tabela u DataSet objektu predstavlja kolekciju podataka. Ukoliko DataSet poseduje
više tabela, DataGridView ima mogućnost jednovremenog prikaza samo jedne od tabela
posmatranog DataSet objekta.
DataGridView dozvoljava projektantima aplikacija određivanje nivoa interakcije
korisnika sa podacima tj projektanti aplikacija određuju da li će korisnici imati mogućnost
ažuriranja, brisanja i dodavanja podataka. Podrazumevane karakteristike DataGridView
kontrole dozvoljavaju korisnicima da ažuriraju podatke u pojedinačnim ćelijama, da selektuju
redove i brišu ih korišćenjem Delete tastera na tastaturi i da dodaju novi red korišćenjem
poslednjeg prikazanog praznog reda kontrole. Da bi se korisnicima zabranilo dodavanje novog
reda i brisanje selektovanog reda potrebno je podesiti atribute AllowUserToAddRows i
AllowUserToDeleteRows na vrednost false, respektivno. Takođe, moguće je zabraniti
dodavanje novog reda, brisanje selektovanog reda i ažuriranje podataka postavljanjem vrednost
ReadOnly atributa kontrole na vrednost true. DataGridView kontroli je moguće dinamički
dodavati kolone i redove. Da bi se dodala nova kolona u DataGridView kontrolu neophodno
je definisati templejt ćelija kolone. Templejt ćelija kolone određuje tip koji će biti korišćen za
ćeliju nove kolone svaki put kada se u kontrolu dodaje novi red. Svi tipovi ćelija izvedeni su iz
DataGridViewCell klase i mogu biti tekstualna polja, padajuće liste, linkovi, dugmići i slike.
Na osnovu tipova ćelija moguće je dinamički kreirati redove i dodavati ih u DataGridView
kontrolu. U nastavku će biti dat primer programskog koda koji vrši kreiranje DataGridView
kontrole i u kontrolu dodaje jednu kolonu a zatim dodaje jedan red.
Korišćenje DataGridView kontrole
DataGridView dgv = new DataGridView();
DataGridViewTextBoxColumn newCol = new DataGridViewTextBoxColumn();
newCol.HeaderText = "tekstualno polje";
dgv.Columns.Add(newCol);
DataGridViewRow newRow = new DataGridViewRow();
DataGridViewComboBoxCell comboCell = new DataGridViewComboBoxCell();
- 118 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
comboCell.Items.Add("Crna");
comboCell.Items.Add("Bela");
comboCell.Value = "Bela";
newRow.Cells.Add(comboCell);
dgv.Rows.Add(newRow);
Prilikom izmene sadržaja ćelija DataGridView kontrole od velikog je značaja da li je
kontrola povezana sa podacima. Ukoliko je povezivanje izvršeno, svi izmenjeni podaci će
automatski biti zapamćeni u izvoru podataka (u bazi podataka) iz kojeg su pribavljeni. Ukoliko
se u ćeliji nalazi link ili dugme, korisnici neće biti u mogućnosti da menjaju sadržaj ćelije jer
ove kontrole ne dozvoljavaju promene njihovog sadržaja korisnicima. Ukoliko se u ćeliji nalazi
padajuća lista, pod izmenom sadržaja smatra se selektovanje neke druge stavke u odnosu na
trenutno selektovanu ili prepisivanje trenutno prikazanog teksta u stavki padajuće liste (da bi
prepisivanje sadržaja trenutno selektovane stavke bilo moguće, DisplayStyle atribut padajuće
liste mora imati vrednost “ComboBox“).
8.7. Povezivanje podataka sa ASP.NET kontrolama
Osnovni principi povezivanja ASP.NET kontrola sa podacima su naizgled slični povezivanju
Windows Forms kontrola sa podacima: odrediti koji je izvor podataka i postaviti ga za izvor
podataka kontrole. Iako naizgled isti kao kod Windows Forms kontrola, mehanizam
povezivanja ASP.NET kontrola sa podacima se fundamentalno razlikuje. Kod Windows
Forms kontrola, ovaj mehanizam kreira direktnu vezu između kontrole i baze podataka.
Ukoliko korisnik izmeni podatke prikazane u kontroli, podaci u bazi podataka za koju je
kontrola vezana se automatski menjaju. Takođe, ukoliko se podaci u bazi podataka izmene dok
je kontrola prikazana korisniku, podaci koje kontrola prikazuje će se automatski izmeniti.
Ovakav način povezivanja kontrola i izvora podataka nije efikasan kod aplikacija koje koriste
Internet kao svoje radno okruženje jer je neefikasno održavati direktnu vezu sa bazom
podataka korišćenjem Interneta.
Povezivanje ASP.NET kontrola sa podacima ima malo sličnosti sa prethodno opisanim
mehanizmom. Mehanizam povezivanja ASP.NET kontrola sa podacima je jednosmeran –
podaci se prenose iz izvora podataka (baze podataka) ka kontroli. Nakon prenosa podataka,
- 119 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
objekti koji predstavljaju memorijsku reprezentaciju podataka se odbacuju i kreirana stranica
se šalje klijentu. Ukoliko korisnik izmeni podatke koje prikazuje kontrola, ASP.NET aplikacija
može snimiti izmenjene podatke ali se snimanje podataka neće desiti automatski.
ASP.NET poseduje dva mehanizma povezivanja kontrola sa podacima: jednostavno
povezivanje (povezivanje pojedinačnih vrednosti) i složeno povezivanje (povezivanje kolekcija
podataka). Prvi tip povezivanja je daleko jednostavniji ali složeno povezivanje predstavlja
osnovu za korišćenje naprednih ASP.NET kontrola.
8.8. Jednostavno povezivanje podataka sa ASP.NET kontrolama
Jednostavno povezivanje kontrola sa podacima koristi se za dodavanje informacija
bilo gde na ASP.NET stranici. Jednostavno povezivanje ne mora imati nikakve veze sa
ADO.NET-om. Ono omogućava da se vrednosti promenljivih, atributa ili izraza dinamički
dodaju bilo gde na stranici. Kod jednostavnog povezivanja, programski kod koji vrši
povezivanje se dodaje direktno u HTML tekst stranice.
Nakon specificiranja povezivanja neophodno je pokrenuti mehanizam povezivanja.
Mehanizam povezivanja kontrola sa podacima pokreće se pozivom funkcije DataBind(). Ova
funkcija predstavlja jednu od osnovnih funkcionalnosti svih kontrola i ugrađena je u klasu
Control iz koje su izvedene sve kontrole. Moguće je pozvati DataBind() funkciju istovremeno
za sve kontrole na stranici pozivom DataBind() funkcije Page objekta koji predstavlja trenutnu
stranu. Obično se svi pozivi DataBind() funkcije dešavaju u Page.Load() funkciji koja
prethodi prikazu stranice korisnicima. Ukoliko se poziv funkcije DataBind() izostavi,
ASP.NET će ignorisati sva povezivanja kontrola sa podacima.
Jednostavno povezivanje se može posmatrati i kao varijanta kreiranja dinamičkog
teksta. Da bi se koristilo neophodno je dodati specijalne izraze u HTML tekst stranice. Ovi
izrazi imaju sledeći format:
<%# ovde_stoji_izraz %>
Sintaksa liči na skript jezike, ali ovo nije skript jezik. U ovaj deo je moguće ubaciti
jedino validne izraze za jednostavno povezivanje. Bilo kakav programski kod bi na ovom
mestu doveo do greške prilikom izvršenja stranice. U nastavku će biti prikazan primer
korišćenja jednostavnog povezivanja.
Jednostavno povezivanje kontrola i podataka
public partial class _Default : System.Web.UI.Page
{
protected int promenljiva;
protected void Page_Load(object sender, EventArgs e)
{
- 120 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
promenljiva = 123;
this.DataBind();
}
}
Pored postavljanja statičkog teksta, jednostavno povezivanje je moguće iskoristiti
kako bi se na stranici prikazali atributi neke od klasa. U nastavku će biti prikazan primer koji
prikazuje atribut pod nazivom URL nove stranice pod nazivom URLPage.
Jednostavno povezivanje kontrola sa atributima klasa
public partial class URLPage : System.Web.UI.Page
{
public string URL;
protected void Page_Load(object sender, EventArgs e)
{
URL = Server.MapPath("Water lilies");
this.DataBind();
}
}
- 121 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
8.9. Složeno povezivanje podataka sa ASP.NET kontrolama
Složeno povezivanje predstavlja osnovu za korišćenje naprednih ASP.NET kontrola.
Složeno povezivanje omogućava da se na stranici prikažu podaci iz čitave tabele baze
podataka. Za razliku od jednostavnog povezivanja, složeno povezivanje zahteva upotrebu
specijalnih kontrola koje podržavaju ovakav vid povezivanja. Obično se koriste CheckBoxList
objekti ili ListBox objekti ali se mogu koristi i daleko sofisticiranije kontrole poput GridView
kontrole. Kontrolu koja podržava složeni način povezivanja sa podacima je moguće razlikovati
od ostalih po tome što poseduje DataSource atribut. Kao i kod jednostavnog povezivanja,
kontrole koje podržavaju složeni način povezivanja ne moraju podatke pribavljati iz baze
podataka niti moraju koristiti ADO.NET objekte. Ove kontrole je recimo moguće povezati sa
nizom podataka.
Nakon specificiranja povezivanja neophodno je pokrenuti mehanizam povezivanja.
Mehanizam povezivanja kontrola sa podacima pokreće se pozivom funkcije DataBind(). Ova
funkcija predstavlja jednu od osnovnih funkcionalnosti svih kontrola i ugrađena je u klasu
Control iz koje su izvedene sve kontrole. Moguće je pozvati DataBind() funkciju istovremeno
za sve kontrole na stranici pozivom DataBind() funkcije Page objekta koji predstavlja trenutnu
stranu. Obično se svi pozivi DataBind() funkcije dešavaju u Page.Load() funkciji koja
prethodi prikazu stranice korisnicima. Ukoliko se poziv funkcije DataBind() izostavi,
ASP.NET će ignorisati sva povezivanja kontrola sa podacima.
Složeno povezivanje kontrola sa podacima podrazumeva korišćenje podskupa
kontrola koje podržavaju ovakav način povezivanja. Ove kontrole spadaju u grupu tzv. list
kontrola. U ovu grupu kontrola spadaju ListBox, DropDownList, CheckBoxList,
RadioButtonList, HtmlSelect, GridView, DetailsView i FormView. ListBox,
DropDownList, CheckBoxList i RadioButtonList kontrole omogućavaju povezivanje sa
jednom kolonom podataka. HtmlSelect kontrola u osnovi funkcioniše na isti način kao i
ListBox kontrola ali je zadržana zbog lakšeg unapređivanja starih APS stranica. GridView,
- 122 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
DetailsView i FormView su kontrole koje mogu prikazivati više od jedne kolone podataka
jednovremeno. Pri korišćenju kontrola koje se povezuju sa jednom kolonom podataka,
povezivanje podataka se vrši postavljanjem vrednosti odgovarajućih atributa kontrola.
Vrednosti atributa je moguće postaviti statički u .aspx stranici ili dinamički tj korišćenjem
programskog koda koji pristupa atributima kontrole i postavlja njihove vrednosti. U nastavku
će biti prikazan programski kod koji vrši povezivanje ListBox kontrole sa ArrayList objektom
i izgled .aspx stranice nakon izvršenja koda. ArrayList klasa pripada System.Collections
prostoru imena. Objekti klase ArrayList predstavljaju kolekciju objekata. Ova kolekcija može
posedovati bilo koji objekat izveden iz klase object.
Složeno povezivanje kontrole sa ArrayList objektom
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ArrayList aList = new ArrayList();
aList.Add("Crna");
aList.Add("Bela");
aList.Add("Crvena");
aList.Add("Plava");
ListBox lBox = new ListBox();
lBox.DataSource = aList;
this.FindControl("form1").Controls.Add(lBox);
this.DataBind();
}
}
- 123 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Kontrole iz grupe list kontrola je moguće povezati sa podacima korišćenjem
ADO.NET-a. U ovim situacijama povezivanje se obično odigrava u tri koraka. Najpre se kreira
objekat koji će predstavljati izvor podataka. Ovo je obično objekat klase DataReader ili
DataSet. U primeru koji će biti prikazan u nastavku, objekat klase DataSet će biti kreiran i
popunjen dinamički tj korišćenjem programskog koda. Zatim je potrebno povezati kontrolu,
koja će u primeru biti ListBox, sa izvorom podataka. Na kraju, neophodno je aktivirati
povezivanje eksplicitnim pozivom funkcije DataBind().
Složeno povezivanje korišćenjem ADO.NET-a
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//lista
ListBox lBox = new ListBox();
//kreiranje izvora podataka
DataSet ds = new DataSet();
//dodavanje nove tabele u DataSet objekat
ds.Tables.Add("Boje");
- 124 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
//dodavanje kolone u tabelu
ds.Tables["Boje"].Columns.Add("Naziv");
//kreiranje i dodavanje redova
DataRow dr = ds.Tables["Boje"].NewRow();
dr["Naziv"] = "Bela";
ds.Tables["Boje"].Rows.Add(dr);
dr = ds.Tables["Boje"].NewRow();
dr["Naziv"] = "Crna";
ds.Tables["Boje"].Rows.Add(dr);
dr = ds.Tables["Boje"].NewRow();
dr["Naziv"] = "Zelena";
ds.Tables["Boje"].Rows.Add(dr);
dr = ds.Tables["Boje"].NewRow();
dr["Naziv"] = "Pink";
ds.Tables["Boje"].Rows.Add(dr);
//povezivanje kontrole i izvora podataka
lBox.DataSource = ds.Tables["Boje"];
lBox.DataTextField = "Naziv";
//dodavanje liste na stranicu
this.FindControl("form1").Controls.Add(lBox);
//povezivanje kontrola i podataka
this.DataBind();
}
}
- 125 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
GridView, DetailsView i FormsView spadaju u grupu složenijih ASP.NET kontrola.
Razvijene su specijalno za potrebe povezivanja sa podacima tj korišćenjem složenog
mehanizma povezivanja. Upotreba ovih kontrola i složenog mehanizma povezivanja biće
predstavljena na primeru GridView kontrole. GridView kontrolu je moguće dodati direktno u
HTML tekst .aspx stranice ili dinamički, korišćenjem programskog koda. Kako je ranije
naglašeno, GridView pripada grupi kontrola koje imaju mogućnost prikazivanja više kolona
istovremeno. Sve kontrole koje pripadaju ovoj grupi poseduju DataSource atribut koji se
koristi za povezivanje za izvorom podataka. U nastavku će biti prikazan primer korišćenja
GridView kontrole i njeno povezivanje sa podacima sadržanim u DataSet objektu. DataSet
objekat se u ovom primeru kreira dinamički tj korišćenjem programskog koda.
Složeno povezivanje korišćenjem GridView kontrole
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//kreiranje izvora podataka
DataSet ds = new DataSet();
//dodavanje nove tabele u DataSet objekat
ds.Tables.Add("Boje");
//dodavanje kolone u tabelu
- 126 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
ds.Tables["Boje"].Columns.Add("Naziv");
ds.Tables["Boje"].Columns.Add("RedniBroj");
//kreiranje i dodavenje redova
DataRow dr = ds.Tables["Boje"].NewRow();
dr["Naziv"] = "Bela";
dr["RedniBroj"] = "1";
ds.Tables["Boje"].Rows.Add(dr);
dr = ds.Tables["Boje"].NewRow();
dr["Naziv"] = "Crna";
dr["RedniBroj"] = "2";
ds.Tables["Boje"].Rows.Add(dr);
dr = ds.Tables["Boje"].NewRow();
dr["Naziv"] = "Zelena";
dr["RedniBroj"] = "3";
ds.Tables["Boje"].Rows.Add(dr);
dr = ds.Tables["Boje"].NewRow();
dr["Naziv"] = "Pink";
dr["RedniBroj"] = "4";
ds.Tables["Boje"].Rows.Add(dr);
//povezivanje kontrole i izvora podataka
grid.DataSource = ds;
//povezivanje kontrola i podataka
grid.DataBind();
}
}
- 127 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
ASP.NET stranica:
Izgled stranice:
DataSet objekat korišćen u prethodnom primeru je popunjen podacima korišćenjem
programskog koda tj ručno. Pored ovakvog vida popunjavanja izvora podataka, moguće je
koristiti i ADO.NET. Primer korišćenja ADO.NET objekata za korišćenje složenog mehanizma
povezivanja GridView kontrole sa podacima biće prikazan u nastavku.
- 128 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Popunjavanje DataSet objekta podacima iz baze podataka
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=c:\\PREDUZECE.mdb";
String strSQL = “Select * from RADNIK”;
OleDbCommand comm = new OleDbCommand(strSQL, conn);
OleDbDataAdapter adapter = new OleDbDataAdapter(comm);
DataSet ds = new DataSet();
try
{
conn.Open();
adapter.Fill(ds, “Radnik”);
conn.Close();
grid.DataSource = ds;
grid.DataBind();
}
catch(Exception exc)
{
//obrada izuzetka
}
}
}
- 129 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Pitanja
Pokušajte da odgovorite na sledeća pitanja. Nakon toga pogledajte ponovo materijal u ovoj
lekciji. Za svaki tačan odgovor dodelite sebi 2 poena, za delimično tačan 1, a za netačan 0.
Pogledajte ponovo one delove lekcije za koje ste imali 0 poena.
1. Šta je povezivanje kontrola sa podacima u .NET platformi?
2. Šta može biti pokretač mehanizma za povezivanje kontrola sa podacima?
3. Koji su primarni oblici povezivanja Windows Forms kontrola .NET platforme sa
podacima?
4. Na koji način funkcioniše jednostavno povezivanje Windows Forms kontrole sa
izvorom podataka?
5. Ukoliko se vrši povezivanje podataka sa ComboBox kontrolom, koji atribut ComboBox
kontrole određuje koji će atribut izvora podataka popuniti podacima stavke kontrole?
6. Šta omogućava složeno povezivanje Windows Forms kontrola sa podacima?
7. Na koji način DataGridView kontrola prikazuje podatke koji su vezani za nju?
8. Koja klase se najčešće koristi kako bi se instancirali objekti koji predstavljaju izvore
podataka korišćene pri složenom povezivanju?
9. Opisati razlike povezivanja Windows Forms kontrola sa izvorima podataka u odnosu na
povezivanje ASP.NET kontrola sa izvorima podataka.
10. Da li se snimanje izmenjenih podataka koje prikazuju ASP.NET kontrole dešava
automatski?
11. Navesti tipove mehanizama povezivanja ASP.NET kontrola sa podacima.
12. Čemu služi jednostavno povezivanje ASP.NET kontrola sa podacima?
13. Šta omogućava složeno povezivanje ASP.NET kontrola sa podacima?
14. Koja funkcija pokreće mehanizam složenog povezivanja ASP.NET kontrola sa
podacima?
15. Prikazati format specijalnih izraza koji se ugrađuju direktno u HTML kod stranice i koji
omogućavaju korišćenje jednostavnog povezivanja ASP.NET kontrola sa podacima?
16. Kako se naziva grupa kontrola koja omogućava korišćenje složenog mehanizma
povezivanja ASP.NET kontrola sa podacima i koje kontrole spadaju u ovu grupu?
17. Koja je razlika između GridView i ListBox kontrole u pogledu mogućnosti prikaza
podataka sa kojima su povezane?
Zadatak
ADO.NET
1. Korišćenjem ADO.NET-a izvršiti povezivanje Windows Forms ComboBox kontrole sa
podacima o radnicima. Svaka stavka ComboBox kontrole treba da prikazuje ime i
prezime radnika, dok je ValueMember atribut ComboBox kontrole povezan sa
matičnim brojevima radnika. Podaci o radnicima čuvaju se u tabeli RADNIK baze
podataka PREDUZECE.
2. Korišćenjem ADO.NET-a izvršiti povezivanje ASP.NET GridView kontrole sa
podacima o članovima porodica radnika. GridView kontrola treba da prikaže sve
podatke o članovima porodica radnika, kao i ime i prezime radnika. Podaci o radnicima
i članovima njihovih porodica čuvaju se u tabelama RADNIK i CLAN_PORODICE
baze podataka PREDUZECE, respektivno.
- 130 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
Sadržaj
Lekcija 1 ................................................................................................................................. - 1 1. Baze podataka.................................................................................................................. - 1 1.1. Ciljevi lekcije ........................................................................................................... - 1 1.2. Neophodno predznanje............................................................................................. - 2 1.3. Sistem baza podataka ............................................................................................... - 2 1.4. Šta je baza podataka?................................................................................................ - 2 1.5. Šta je Sistem za upravljanje bazama podataka (DBMS)? ........................................ - 3 1.5.1. Funkcije DBMSa ............................................................................................... - 3 1.5.2. Tipovi sistema baza podataka............................................................................ - 4 1.6. Modeli podataka ....................................................................................................... - 5 1.7. Relacioni model podataka ........................................................................................ - 6 1.7.1. NULL Vrednosti atributa .................................................................................. - 7 1.7.2. Pregled osnovnih koncepata relacionog modela podataka................................ - 7 1.7.3. Svojstva relacije ................................................................................................ - 8 1.8. Ključevi relacije ..................................................................................................... - 11 1.9. Relacioni integritet ................................................................................................. - 12 1.9.1. Referencijalni integritet i spoljni ključevi ....................................................... - 13 1.10. Predstavljanje šema relacione baze podataka....................................................... - 15 1.10.1. Relaciona šema baze podataka PREDUZEĆE .............................................. - 16 Lekcija 2 ............................................................................................................................... - 21 2. SQL naredbe za kreiranje podataka............................................................................... - 21 2.1. Ciljevi lekcije ......................................................................................................... - 21 2.2. Neophodno predznanje........................................................................................... - 23 2.3. Baza podataka PREDUZEĆE................................................................................. - 23 2.4. SQL naredbe za kreiranje podataka........................................................................ - 27 2.4.1. Tipovi podataka ............................................................................................... - 28 2.4.2. SQL DDL naredbe za kreiranje tabela RADNIK i SEKTOR ......................... - 29 2.4.3. Ograničenje kolone.......................................................................................... - 30 2.4.4. SQL DDL naredba za kreiranje tabele PROJEKAT. .................................... - 31 2.4.5. Ograničenja tabele ........................................................................................... - 31 2.4.6. Ograničenje stranog ključa .............................................................................. - 32 2.4.7. DDL naredbe za kreiranje baze podataka PREDUZEĆE ............................... - 33 2.5. MS Access specifičnosti......................................................................................... - 34 2.7. Praktičan rad : MS Access...................................................................................... - 35 Lekcija 3 ............................................................................................................................... - 40 3. Naredba SELECT I ....................................................................................................... - 40 3.1. Ciljevi lekcije ......................................................................................................... - 40 3.2. Neophodno predznanje........................................................................................... - 41 3.3. Naredba SELECT................................................................................................... - 41 3.3.1. Klauzula WHERE ........................................................................................... - 44 3.3.2. Aritmetičke funkcije........................................................................................ - 50 3.3.3. Funkcije agregacije.......................................................................................... - 51 3.4. Praktični rad: MS Access ....................................................................................... - 53 Lekcija 4 ............................................................................................................................... - 58 4. Naredba SELECT II ...................................................................................................... - 58 4.1. Ciljevi lekcije ......................................................................................................... - 58 4.2. Neophodno predznanje........................................................................................... - 59 4.3. Klauzule GROUP BY i HAVING ........................................................................ - 59 4.4. Spajanje tabela........................................................................................................ - 62 - 131 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
4.4.1. Dekartov proizvod (cross-join) ........................................................................- 63 4.4.2. Unutrašnji spoj (inner-join)..............................................................................- 64 4.4.3. Levi spoljašnji spoj (left-outer join).................................................................- 65 4.4.4. Desni spoljašnji spoj (right-outer join) ............................................................- 66 4.4.5. Potpuni spoljašnji spoj (full-outer join) ...........................................................- 66 4.5. Kombinovanje rezultata više SQL upita .................................................................- 69 Lekcija 5................................................................................................................................- 73 5. SQL naredbe za manipulaciju podacima .......................................................................- 73 5.1. Ciljevi lekcije ..........................................................................................................- 73 5.2. Neophodno predznanje ...........................................................................................- 74 5.3. Dodavanje novih podataka......................................................................................- 74 5.3.1. Dodavanje novih podataka korišćenjem upita .................................................- 76 5.4. Ažuriranje podataka ................................................................................................- 78 5.5. Brisanje podataka........................................................................................................- 79 5.6. Modifikacija šeme relacione baze podataka ...........................................................- 80 5.6.1. Brisanje tabele..................................................................................................- 80 5.6.2. Modifikacija tabele ..........................................................................................- 81 Lekcija 6................................................................................................................................- 83 6. Osnovne komponente Access aplikacija........................................................................- 83 6.1. Ciljevi lekcije ..........................................................................................................- 83 6.2. Neophodno predznanje ...........................................................................................- 83 6.3. Uvod........................................................................................................................- 84 6.4. Izrada i korišćenje formi .........................................................................................- 85 6.4.1. Kreiranje formi korišćenjem Form Wizard-a..................................................- 85 6.4.2. Modifikovanje strukture forme ........................................................................- 87 6.5. Izrada i korišćenje izveštaja ....................................................................................- 88 6.5.1. Sličnosti i razlike formi i izveštaja...................................................................- 89 6.5.2. Osnovni tipovi izveštaja u Access-u ................................................................- 89 6.5.3. Kreiranje izveštaja korišćenjem Report Wizard-a ...........................................- 90 6.5.4. Početno grupisanje i sortiranje podataka .........................................................- 91 6.6. Izrada i korišćenje makroa ......................................................................................- 92 6.6.1. Pokretanje i izvršenje makroa ..........................................................................- 93 6.6.3. Dodavanje akcija makroa.................................................................................- 94 6.6.4. Filtriranje podataka korišćenjem makroa.........................................................- 95 6.7. Kreiranje aplikacije u Access-u ..............................................................................- 96 Lekcija 7................................................................................................................................- 98 7. ADO.NET ......................................................................................................................- 98 7.1. Ciljevi lekcije ..........................................................................................................- 98 7.2. Neophodno predznanje ...........................................................................................- 98 7.3. Uvod........................................................................................................................- 99 7.4. ADO.NET data provider-i.....................................................................................- 100 7.5. Direktan pristup podacima korišćenjem ADO.NET-a..........................................- 102 7.5.1. Kreiranje konekcije ka bazi podataka ............................................................- 102 7.5.2. Kreiranje SQL komande ................................................................................- 103 7.5.3. Korišćenje DataReader objekta......................................................................- 105 7.6. Korišćenje sloja sa raskinutom vezom ADO.NET-a za pristup podacima ...........- 108 Lekcija 8..............................................................................................................................- 113 8. Povezivanje Windows Forms i ASP.NET kontrola i podataka korišćenjem C#
programskog jezika i ADO.NET-a ..................................................................................- 113 8.1. Ciljevi lekcije ........................................................................................................- 113 8.2. Neophodno predznanje .........................................................................................- 113 8.3. Uvod......................................................................................................................- 114 - 132 -
Baze podataka - Relacioni model
Elektronski fakultet u Nišu
8.4. Povezivanje podataka sa Windows Forms kontrolama ........................................ - 114 8.5. Jednostavno povezivanje Windows Forms kontrola sa podacima ....................... - 115 8.6. Složeno povezivanje Windows Forms kontrola sa podacima .............................. - 116 8.7. Povezivanje podataka sa ASP.NET kontrolama .................................................. - 119 8.8. Jednostavno povezivanje podataka sa ASP.NET kontrolama.............................. - 120 8.9. Složeno povezivanje podataka sa ASP.NET kontrolama..................................... - 122 -
- 133 -
Download

BAZE PODATAKA - WordPress.com