msc Velimir Milanovic Unošenje prvih zapisa Kreiranje elektronskih obrazaca - formi Prva forma - Čitaoci U P I T I

Similar documents
Biznis scenario: sekcije pk * id_sekcije * naziv. projekti pk * id_projekta * naziv ꓳ profesor fk * id_sekcije

SIMPLE PAST TENSE (prosto prošlo vreme) Građenje prostog prošlog vremena zavisi od toga da li je glagol koji ga gradi pravilan ili nepravilan.

GUI Layout Manager-i. Bojan Tomić Branislav Vidojević

Podešavanje za eduroam ios

Eduroam O Eduroam servisu edu roam Uputstvo za podešavanje Eduroam konekcije NAPOMENA: Microsoft Windows XP Change advanced settings

Ulazne promenljive se nazivaju argumenti ili fiktivni parametri. Potprogram se poziva u okviru programa, kada se pri pozivu navode stvarni parametri.

Otpremanje video snimka na YouTube

Uvod u relacione baze podataka

IZDAVANJE SERTIFIKATA NA WINDOWS 10 PLATFORMI

MRS MRSLab09 Metodologija Razvoja Softvera Vežba 09

KAPACITET USB GB. Laserska gravura. po jednoj strani. Digitalna štampa, pun kolor, po jednoj strani USB GB 8 GB 16 GB.

Port Community System

AMRES eduroam update, CAT alat za kreiranje instalera za korisničke uređaje. Marko Eremija Sastanak administratora, Beograd,

SAS On Demand. Video: Upute za registraciju:

Tutorijal za Štefice za upload slika na forum.

NIS PETROL. Uputstvo za deaktiviranje/aktiviranje stranice Veleprodajnog cenovnika na sajtu NIS Petrol-a

1. Instalacija programske podrške

Struktura indeksa: B-stablo. ls/swd/btree/btree.html

STRUČNA PRAKSA B-PRO TEMA 13

INSTALIRANJE SOFTVERSKOG SISTEMA SURVEY

CJENIK APLIKACIJE CERAMIC PRO PROIZVODA STAKLO PLASTIKA AUTO LAK KOŽA I TEKSTIL ALU FELGE SVJETLA

Struktura i organizacija baza podataka

Klasterizacija. NIKOLA MILIKIĆ URL:

TRAJANJE AKCIJE ILI PRETHODNOG ISTEKA ZALIHA ZELENI ALAT

KONFIGURACIJA MODEMA. ZyXEL Prestige 660RU

CJENOVNIK KABLOVSKA TV DIGITALNA TV INTERNET USLUGE

Pravljenje Screenshota. 1. Korak

Kako instalirati Apache/PHP/MySQL na lokalnom kompjuteru pod Windowsima

Upute za korištenje makronaredbi gml2dwg i gml2dgn

Idejno rješenje: Dubrovnik Vizualni identitet kandidature Dubrovnika za Europsku prijestolnicu kulture 2020.

Ciljevi. Poslije kompletiranja ove lekcije trebalo bi se moći:

Bušilice nove generacije. ImpactDrill

Tema 2: Uvod u sisteme za podršku odlučivanju (VEŽBE)

BENCHMARKING HOSTELA

Trening: Obzor financijsko izvještavanje i osnovne ugovorne obveze

FAKULTET ZA POSLOVNU INFORMATIKU

Univerzitet u Novom Sadu. Fakultet tehničkih nauka. Odsek za računarsku tehniku i računarske komunikacije. Uvod u GIT

Modeli podataka. Model podataka - osnovne komponente

UPUTSTVO. za ruter TP-LINK TD-854W/ TD-W8951NB

Windows Easy Transfer

MRS MRSLab08 Metodologija Razvoja Softvera Vežba 08

2. Kreiranje nove baze podataka

za STB GO4TV in alliance with GSS media

PROJEKTNI PRORAČUN 1

Nejednakosti s faktorijelima

JEDINSTVENI PORTAL POREZNE UPRAVE. Priručnik za instalaciju Google Chrome dodatka. (Opera preglednik)

Primer izrade dinamičkog sajta

TRENING I RAZVOJ VEŽBE 4 JELENA ANĐELKOVIĆ LABROVIĆ

3.2. Prikazati podatke o svim proizvodima, koji se proizvode u Zrenjaninu.

pripremila: prof. dr Sonja Pravilović

Ali kako znati koja maksimalna plata pripada kojem sektoru? GROUP BY in SELECT Obično se uključuje GROUP BY kolona u SELECT listi.

Priprema podataka. NIKOLA MILIKIĆ URL:

11 Analiza i dizajn informacionih sistema

DEFINISANJE TURISTIČKE TRAŽNJE

Beograd, Srbija, Vojvode Bogdana 34 Secamcctv Corporation DOO. program za evidenciju radnog vremena I prisustva na radu 2011g

STABLA ODLUČIVANJA. Jelena Jovanovic. Web:

Advertising on the Web

Slobodni softver za digitalne arhive: EPrints u Knjižnici Filozofskog fakulteta u Zagrebu

Mogudnosti za prilagođavanje

Rešavanje problema pomoću računara

OBJEKTNO ORIJENTISANO PROGRAMIRANJE

- Vežba 1 (dodatan materijal) - Kreiranje Web šablona (template) pomoću softvera Adobe Photoshop CS

ENR 1.4 OPIS I KLASIFIKACIJA VAZDUŠNOG PROSTORA U KOME SE PRUŽAJU ATS USLUGE ENR 1.4 ATS AIRSPACE CLASSIFICATION AND DESCRIPTION

Programiranje. Nastava: prof.dr.sc. Dražena Gašpar. Datum:

UPUTSTVO ZA INSTALACIJU I PODESAVANJE PROGRAMA ZA MONITORING RADA SOLARNE ELEKTRANE KOSTAL PIKO MASTER CONTROL (PMC) v.2

MRS. MRSLab03 Metodologija Razvoja Softvera Vežba 03 LAB Dijagram aktivnosti

POSEBNA POGLAVLJA INDUSTRIJSKOG TRANSPORTA I SKLADIŠNIH SISTEMA

3D GRAFIKA I ANIMACIJA

1. MODEL (Ulaz / Zadržavanje / Stanje)

1.7 Predstavljanje negativnih brojeva u binarnom sistemu

POSTUPAK IZRADE DIPLOMSKOG RADA NA OSNOVNIM AKADEMSKIM STUDIJAMA FAKULTETA ZA MENADŽMENT U ZAJEČARU

DOSTAVUANJE PONUDA ZA WIMAX MONTENEGRO DOO PODGORICA

IZRADA TEHNIČKE DOKUMENTACIJE

Da bi se napravio izvještaj u Accessu potrebno je na izborniku Create odabrati karticu naredbi Reports.

1. OSNOVNI POJMOVI O BAZAMA PODATAKA 2 2. UVOD U RAD S MS ACCESSOM TABLICE RELACIJE U BAZI UPITI OBRASCI (FORMS) 39

MENADŽMENT INFORMACIONI SISTEMI

UNIVERZITET U BEOGRADU RUDARSKO GEOLOŠKI FAKULTET DEPARTMAN ZA HIDROGEOLOGIJU ZBORNIK RADOVA. ZLATIBOR maj godine

Direktan link ka kursu:

UNIVERZITET UNION RAČUNARSKI FAKULTET Knez Mih a ilova 6/V I DIPLOMSKI RAD

UPUTE ZA INSTALACIJU PROGRAMA FINBOLT 2007 tvrtke BOLTANO d.o.o.

Babylon - instalacija,aktivacija i rad sa njim

KatzeView Uputstvo. verzija Novi Sad Josifa Marinkovića 44. Tel: +381 (0) Fax: +381 (0) Mob: +381 (0)

POSLOVNA INTELIGENCIJA

Katedra za menadžment i IT. Razvoj poslovnih informacionih sistema

Dr Smiljan Vukanović, dis

Office 365, upute za korištenje elektroničke pošte

FAKULTET TEHNIČKIH NAUKA

Mindomo online aplikacija za izradu umnih mapa

EUnet dial-up konfigurator

KREIRANJE DINAMIČKIH INTERFEJSA ZASNOVANIH NA META-ŠEMAMA CREATION OF DYNAMIC INTERFACES BASED ON META-SCHEMES

VBA moduli. mr Milovan Milivojević dipl. ing. Visa Poslovno Tehnička Škola - Užice

Uputstvo za upotrebu kvalifikovanog elektronskog sertifikata (KES)

1.UVOD. Ključne reči: upotrebljivost, praćenje, korisnički interfejs, aplikacija

Primena OLAP tehnika u analizi otplate duga klijenata Banke Poštanske štedionice a. d.

SKINUTO SA SAJTA Besplatan download radova

Dr.Miroljub Banković, prof. Kragujevac, 2008.

SQL standard podrzava sledece vrste ogranicenja: Ogranicenja domena Ogranicenja tabela i kolona Opsta ogranicenja

MENADŽMENT I INFORMACIONE TEHNOLOGIJE Katedra za menadžment i IT. Menadžment i informacione tehnologije

IMPLEMENTACIJA PODLOGE ZA SARADNJU KROKI ALATA SA ALATIMA ZA UML MODELOVANJE OPŠTE NAMENE

Osnovni koncepti Data Warehouse sistema

Transcription:

msc Velimir Milanovic SADRŽAJ: 1. Pojam informacionih sistema... 4 1. 1. Vrste informacionih sistema... 5 1.1.1. Informacioni sistemi za obradu podataka (dp data processing)... 5 1. 1. 2. Upravljački informacioni sistem (mis management information systems)... 6 1. 1. 3. Informacioni sistemi za podršku odlučivanju (dss decision support systems)... 6 1. 1. 4. Ekspertni sistemi (expert systems)... 6 1. 2. Projektovanje informacionih sistema... 7 2. B A Z E P O D A T A K A... 8 2. 1. Modeli baza podataka... 10 2. 2. Elementi relacione baze podataka... 11 2.2.1. Šta se podrazumeva pod dobrim dizajnom baze podataka?... 12 2. 2. 2. Proces dizajniranja... 12 2. 2. 3. Određivanje namene baze podataka... 13 2. 2. 4. Pronalaženje i organizovanje potrebnih informacija... 13 2. 2. 5. Raspoređivanje informacija u tabele... 15 2. 2. 6. Pretvaranje stavki informacija u kolone... 16 2. 2. 7. Preciziranje primarnih ključeva... 17 2. 3. Kreiranje relacija između tabela... 19 2. 3. 1. Kreiranje relacije jedan-prema-više... 20 2. 3. 2. Kreiranje relacije više-prema-više... 21 2. 3. 3. Kreiranje relacije jedan-prema-jedan... 23 2. 4. Pročišćavanje dizajna... 24 2. 4. 1. Pročišćavanje tabele Proizvodi... 24 2. 5. Primenjivanje pravila normalizacije... 25 2. 5. 1. Prva normalna forma... 26 2. 5. 2. Druga normalna forma... 26 2. 5. 3. Treća normalna forma... 26 3. M I C R O S O F T A C C E S S 2 0 0 7... 27 3. 1. Objekti baze... 27 Tabele... 27 Upiti... 28 Forme... 28 Izveštaji... 29 3. 2. Opis primera na kojem je priručnik baziran... 29 3. 3. Pokretanje programa, pripremne radnje, kreiranje prve tabele... 30 3. 4. Planiranje tabela... 32 3. 5. Kreiranje prve tabele... 33 3. 6. Povezivanje tabela... 38 2

msc Velimir Milanovic 3. 7. Unošenje prvih zapisa... 44 4. Kreiranje elektronskih obrazaca - formi... 48 4. 1. Prva forma - Čitaoci... 49 5. U P I T I... 68 6. Uvod u struktuirani upitni jezik SQL... 84 Osnove naredbe SELECT... 84 Uslovna selekcija podataka... 85 Složeni uslovi... 86 Operatori IN i BETWEEN... 87 Operator LIKE... 87 Spajanje tabela... 87 Ključevi... 89 Obavljanje spajanja... 89 Klauzula DISTINCT i eliminacija duplikata... 91 Pseudonimi i IN podupiti i podupiti... 92 Aritmetički operatori... 94 Agregatne funkcije... 95 Klauzule GROUP BY i HAVING... 96 Formiranje novih tabela... 98 Menjanje tabela... 98 Dodavanje podataka... 99 Brisanje podataka... 100 Ažuriranje podataka... 100 7. Izveštaji... 101 8. Makroi i switchboard... 111 9. Front-end i back-end baza podataka... 128 10. Enkripcija baze podataka... 132 3

1. Pojam informacionih sistema Pod pojmom sistem podrazumevćemo skup elemenata koji su međusobno povezani i ponašaju se po određenim zakonitostima. U starogrčkom jeziku reč sistem koristila se prvobitno kao naziv za udruženje, zajednicu ili društvo, da bi kasnije bila u upotrebi i kada se označavao neki skup, celina, čak i sama država. Da bi bilo jasno šta čini jedan sistem, sistem se mora posmatrati u odnosu na njegovo okruženje. Granica sistema razdvaja sistem od spoljnih sistema. Interakcija sistema sa okruženjem se sastoji iz skupa ulaznih i izlaznih dejstava. Dejstvo okoline na sistem naziva se ulaz. Dejstvo sistema na okolinu je izlaz sistema. Slika 1 Značajnu ulogu imaju informacioni sistemi. U literaturi se nalazi mnogo različitih definicija. Informacioni sistem najčešće se definiše kao skup ljudi i opreme koji po određenoj organizaciji i metodama obavljaju prikupljanje, prenos, obradu, čuvanje i dostavljanje podataka i informacija na korišćenje. Osnovni cilj informacionog sistema je da omogući prikupljanje podataka i prikazivanje dobijenih informacija na najbolji način. Kao elementi informacionog sistema danas se uglavnom navode: a) tehnička oprema (hardware) 4

b) programska oprema (software) c) organizaciona podrška (orgware) d) kadrovska podrška (lifeware). Svi materijalni delovi računara koji su međusobno povezani ili funkciono usklađeni, naziva se mašinska oprema ili hardver (hardware). Sve što je u vezi sa programima nazivasmo programska oprema ili softver (software). Organizacionu podršku (orgware) čine metode i postupci za usklađivanje svih delova informacionog sistema u organizovanu celinu. Kadrovsku podršku (lifeware) čine kadrovi koji neposredno rade na poslovima i krajnji korisnici informacionog sistema. 1. 1. Vrste informacionih sistema Slika 2 Danas je uglavnom prihvaćena sledeća podela:: 1. informacioni sistemi za obradu podataka (DP Data processing) 2. upravljački informacioni sistem (MIS Management Information Systems), 3. informacioni sistemi za podršku odlučivanju (DSS Decision Support Systems) 4. ekspertni sistem (ES Expert System) 1.1.1. Informacioni sistemi za obradu podataka (dp data processing) Osnovna uloga takvih informacionih sistema bila je prihvatanje i obrada poslovnih transakcija, tako da se njihova najčešća primena sastojala u zameni ručne obrade mašinskom, u smislu mehanografske obrade. U središtu pažnje informacionih sistema za 5

obradu podataka su podaci. Programska rešenja zasnivaju se na klasičnim programskim jezicima (C ++, Delphi, C, Java, Visual Basic, Visual C ++, C#). Osnovni izlazi iz sistema su štampani izveštaji. Osnove osobine informacionih sistema za obradu podataka jesu: pasivan način korišćenja, korisnici su zaposleni isključivo u posebnom organizacionom delu za elektronsku obradu podataka (elektronski računarski centar), mehanička efikasnost u obavljanju posla, zasnovanost na analizi prošlih događaja 1. 1. 2. Upravljački informacioni sistem (mis management information systems) Upravljački informacioni sistem je mreža zasnovana na računarima, koja pruža odgovarajuće podatke rukovodstvu preduzeća u svrhu donošenja odluka. Ti sistemi javljaju se kao druga faza razvoja informacionih sistema, kao posledica potrebe poslovnih sistema da prikupljene i obrađene informacije iskoriste u svrhu upravljanja, a takođe i kao posledica razvoja hardvera i usavršavanja softvera. Podaci se unose tamo gde nastaju, terminalskom mrežom, a proces izveštavanja je poboljšan jer se osim pisanog izveštaja unosi i ekranski tip izveštaja koji korisnik dobija na ekranu svog terminala. Upravljački informacioni sistemi orijentisani su ka informacijama. 1. 1. 3. Informacioni sistemi za podršku odlučivanju (dss decision support systems) Informacioni sistemi za podršku odlučivanju (DSS Decision Support Systems) počinju da se razvijaju nastankom programskih jezika četvrte generacije i takozvanih generatora aplikacija. To su sistemi koji pomažu rukovodstvu preduzeća da rešava probleme koji su specifični. Korisnik donosi poslovne odluke u interakciji sa izlaznim informacijama iz informacionog sistema i da pružaju mnoge važne prednosti u odnosu na predhodne vrste informacionih sistema, u vidu: raznovrsnijeg izveštavanja korišćenja grafičkih i drugih izlaznih mogućnosti, eliminacije većeg dela papirne dokumentacije na ulazu, uvođenja elemenata veštačke inteligencije. 1. 1. 4. Ekspertni sistemi (expert systems) Ekspertni sistemi su najnovija rešenja u razvoju informacione tehnologije. Oni su povezani sa nastankom veštačke inteligencije i razvijaju se kao jedan njen deo. Veštačka inteligencija je termin koji je dodeljen mnogim oblastima istraživanja koje se bave rastućom sposobnošću računara da izvršavaju zadatke kako to čovek radi. U izradi ekspertnog sistema učestvuje veći broj eksperata za oblast rešavanja problema i za softver. Za razliku od informacionih sistema za podršku u odlučivanju, gde je korisnik bio u situaciji da dobije pomoć od sistema, ali samo ako je imao ideju za tip izveštaja ili korišćenje nekog modela, ekspertni sistem mu nudi alternativu, odgovor kako bi drugi eksperti rešili sličan problem. 6

Ekspertni sistemi su samoučeći, tako da pamte rešenja korisnika koja mogu da budu od interesa za obogaćivanje baze znanja sistema. Oni koriste prirodan jezik uglavnom engleski i na taj način je još manje formalizovano njihovo korišćenje. Ekspertni sistemi ne zasnivaju se na bazi podataka, već na bazi znanja. Veoma se lako menja a kao svoj obavezni deo sadrži objašnjenje odluke. Oni sadrže bazu znanja organizovanu za korišćenje kao skup pravila. Ekspertni sistemi uključuju osnovne ideje inteligentnog rešavanja problema. Oni su prirodna faza u evolucuji računara. Sledeća faza predstavlja dalju evoluciju ekspertnih sistema u formu koja se naziva kreativna inteligencija (CREATIVE INTELLIGENCE), u kojoj nove ideje treba da stvara sam računar. 1. 2. Projektovanje informacionih sistema Razvoj informacionog sistema je složen zadatak. Uglavnom se taj proces odvija u sledećim fazama: projektovanje izgradnja uvođenje funkcionisanje. Projektovanje informacionog sistema mora biti zasnovano na zahtevima korisnika i prethodnoj analizi postojećeg stanje, na osnovu čega se definiše struktura informacionog sistema kao i potrebna tehnička oprema, softver, organizaciona i kadrovska podrška. Izgradnja informacionog sistema se obavlja nabavkom hardvera i sistemskog softvera, izradom ili nabavkom aplikativnog softvera i obukom kadrova. Za tu fazu neophodno je napraviti dinamički plan. Uvođenje informacionog sistema je faza razvoja koja se realizuje kada su obezbeđene sve komponente informacionog sistema. Funkcionisanje informacionog sistema započinje posle uspešno obavljenih testova i probnog rada svih komponenti i dovoljne osposobljenosti kadrova. Za normalno funkcionisanje informacionog sistema treba obezbediti neprekidno održavanje i potrebne uslove za dalji razvoj. 7

2. B A Z E P O D A T A K A Da bi shvatili šta su to baze podataka prvo morate znati da razlikujete podatke od informacija. Reči podatak i informacija se često koriste kao sinonimi. Ipak, one imaju različito značenje. Podatak <> informacija Podatak može biti Sirov materijal, iz kojeg mogu da se izvuku zaključci, da se nešto sazna Podaci su činjenice, iz kojih mogu da se dobiju nove činjenice Informacija predstavlja: Znanje Značenje Funkcija podatka Rezultat kombinovanja, upoređivanja i izvođenja zaključaka nad podacima Sistem baza podataka sadrži 4 osnovne komponente: korisnici, aplikacija nad bazom podataka, sistem za upravljanje bazama podataka (Database Management System - DBMS), i baza podataka. Slika 3 Baza podataka je skup podataka koji su povezani određenim relacijama. Izraz je nastao u kompjuterskoj industriji, njegovo značenje prošireno od strane običnih korisnika tako da danas označava praktično svaku kolekciju podataka, elektronsku i neelektronsku, koju je moguće proširivati, menjati i brisati (uništavati). Osnovne f-je BP su: Baza podataka obezbeđjuje mogućnosti pretraživanja, dodavanja, modifikovanja i brisanja podataka kada je to potrebno. Baza podataka takođe obezbeđejuje mogućnost transformiranja dobijenih podataka u korisne informacije. Bazom podataka obično rukuje administrator baze podataka (DBA) Omogućeno je smeštanje različitih podataka: dokumenti, slike, video, zvuk... 8

Baza podataka predstavlja organizovan skup logički povezanih podataka koji su smešteni u jednoj ili više datoteka, tako da se mogu : pretraživati, sortirati, ažurirati, grupisati, transformisati i štampati. U većini modernih baza podataka, može se smestiti i iz njih dobiti veliki broj različitih podataka i dokumenata. Unutar baze podataka, podaci su smešteni u sirovoj formi. Kada se ti sirovi podaci pretražuju ili dobijaju upitom, oni se transformišu u mnogo korisniju izlaznu informaciju. Iz definicije" baze podataka vidi se da je ona kolekcija međusobno povezanih podataka organizovanih u tabele. 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. Prava snaga baze podataka ne leži u mogućnosti skladištenja informacija, već u sposobnosti pronalaženja i preuzimanja tačno onih informacija koje želimo. Šta baza podataka ima sa svakodnevnim životom? Više nego što možete zamisliti... Mnogo veb sajtova koje posećujete je podržano bazom podataka Mnoga radna mesta na šalterima, u kancelarijama, u proizvodnji koriste baze podataka Mnoge usluge koje dobijate svakodnevno u banci, pošti, na autobuskoj stanici ili u domu zdravlja su podržane bazama podataka... Baza podataka može biti organizovana kao kolekcija zapisa u kompjuteru kako bi kompjuterski program mogao da nađe u BP informacije koje bi potom iskoristio. Taj tip programa se zove Sistem za upravljanje bazom podataka (DBMS). 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. 9

Razne korisničke funkcije, kao što su import, eksport podataka, statističke analize, funkcije za nadgledanje,... Izbor DBMS-a Postoji veliki broj proizvođača DBMS-a različitih performansi, namenjeni različitim segmentima tržišta. Tipovi sistema baza podataka: Knjigovodstvene aplikacije (sistemi za upravljanje dokumentima, sistemi za banke, i sl) Modere Web aplikacie koje obezbeđuju složenu funkcionalnost u distribuiranom okruženju (on-line kupovine, raze socijalne mreže i sl.) personalni sistemi baza podataka (npr. aplikacija za evidenciju kucnih troskova gde BP koristi samo jedan korisnik Slika 4 enterprise sistemi baza podataka (npr. velika kompanija, ima sistem baza podataka sa velikim količinama informacija. 2. 1. Modeli baza podataka Slika 5 Ravni model se sastoji od jednog dvodimenzionalnog niza podataka, gde se smatra da svi članovi iste kolone imaju slične vrednosti, a za sve članove istog reda se predpostavlja da su povezani međusobom. Ovaj model je osnova Microsoft Excel spreadsheet-a. 10

Mrežni model organizuje informacije koristeći dve osnove, zvane podatak i set. Podaci sadrže polja. Setovi definišu jedan prema više odnose između podataka: jedan vlasnik, više članova. Podatak može biti vlasnik u bilo kojem setu i član bilo kojeg broja setova. Slika 6 Relacioni model je matematički model definisan u obliku predikatske logike i teorije nizova. Slika 7 Relaciona BP sadrži više tabela, sličnih onima iz ravnog modela BP. Relacije između tabela nisu eksplicitno definisane, umesto toga se koriste ključevi kojima se omogućava poklapanje redova podataka u različitim tabelama. Ključ je skup jedne ili više kolona u jednoj tabeli čije vrednosti se moraju poklapati u odgovarajućim kolonama druge tabele. Bilo koja kolona (ili grupisane kolone) može biti ključ. Nije neophodno definisati sve ključeve unapred, kolona se može koristiti kao ključ iako nije predhodno bila predviđena za to. Ključ kojim se jedinstveno definiše red u tabeli se naziva jedinstveni ključ ( primarni ključ). Ključ čije se vrednosti mogu ponavljati naziva se sekundarni ključ. 2. 2. Elementi relacione baze podataka Access organizuje informacije u tabele: liste redova i kolona koje podsećaju na notes računovođe ili unakrsnu tabelu. U jednostavnoj bazi podataka možete imati samo jednu tabelu. Za većinu baza podataka biće vam potrebno više od jedne tabele. Na primer, možda ćete imati jednu tabelu za skladištenje informacija o proizvodima, drugu tabelu za skladištenje informacija o porudžbinama i još jednu sa informacijama o kupcima. 11

Slika 8 Svaki red se pravilnije zove zapis, a svaka kolona polje. Zapis predstavlja kombinovanje informacija o nečemu na smislen i dosledan način. Polje je pojedinačna stavka informacije tip stavke koji se pojavljuje u svakom zapisu. U tabeli Proizvodi, na primer, svaki red ili zapis sadrži informacije o jednom proizvodu. Svaka kolona ili polje ima isti tip informacija o tom proizvodu, na primer njegovo ime ili cenu. 2.2.1. Šta se podrazumeva pod dobrim dizajnom baze podataka? Procesom dizajniranja baze podataka upravljaju određeni principi. Prvi princip je da su duplirane informacije (koje se nazivaju i redundantni podaci) loša pojava, jer nepotrebno zauzimaju prostor i povećavaju verovatnoću pojave grešaka i nedoslednosti. Drugi princip ističe važnost ispravnosti i potpunosti informacija. Ako baza podataka sadrži neispravne informacije, izveštaji koji izvlače informacije iz baze podataka će takođe sadržati neispravne informacije. Kao posledica toga, donete odluke koje su zasnovane na tim izveštajima će u osnovi sadržati pogrešne informacije. 2. 2. 2. Proces dizajniranja Proces dizajniranja se sastoji iz sledećih koraka: Određivanje namene baze podataka Ovaj korak doprinosi pripremi za preostale korake. Pronalaženje i organizovanje potrebnih informacija Sakupite sve tipove informacija koje ćete možda želeli da zapišete u bazu podataka, poput imena proizvoda i broja porudžbine. Raspoređivanje informacija u tabele 12

Rasporedite stavke informacija po glavnim entitetima ili temama, kao što su Proizvodi ili Porudžbine. Na taj način svaka tema će postati tabela. Pretvaranje stavki informacija u kolone Odlučite koje informacije želite da uskladištite u svaku tabelu. Svaka stavka će postati polje i prikazaće se kao kolona u tabeli. Na primer, tabela Zaposleni bi mogla da sadrži polja poput Prezime i Datum zapošljavanja. Određivanje primarnih ključeva Odaberite primarni ključ za svaku tabelu. Primarni ključ predstavlja kolonu koja se koristi da jedinstveno identifikuje svaki red, na primer ID proizvoda ili ID porudžbine. Podešavanje relacija između tabela Razmotrite svaku tabelu i odlučite na koji način će podaci iz jedne tabele biti povezani sa podacima u drugoj tabeli. Dodajte polja u tabele ili kreirajte nove tabele kako biste, po potrebi, objasnili relacije. Pročišćavanje dizajna Analizirajte dizajn radi pronalaženja grešaka. Kreirajte tabele i dodajte nekoliko zapisa sa probnim podacima. Proverite da li iz tabela možete da dobijete željene rezultate. Po potrebi podesite dizajn. Primenjivanje pravila normalizacije Primenite pravila normalizacije podataka kako biste videli da li su tabele ispravno strukturirane. Po potrebi podesite tabele. 2. 2. 3. Određivanje namene baze podataka Preporučuje se da zapišete namenu baze podataka na papir samu namenu, način na koji planirate da je koristite, kao i ko će je koristiti. Na primer, za malu bazu podataka za posao koji radite kod kuće mogli biste da zapišete nešto jednostavno poput Baza podataka kupaca sadrži listu informacija o kupcima sa namenom kreiranja pošiljki i izveštaja. Ako je baza podataka složenija ili je koristi veći broj ljudi, što se često dešava u poslovnom okruženju, opis namene bi mogao da zauzme jedan ili više pasusa, a trebalo bi takođe da sadrži vreme kada će i način na koji će svaka osoba koristiti tu bazu podataka. Potrebno je da postoji precizno definisan cilj zadatka koji ćete moći da uzmete u obzir tokom čitavog procesa dizajniranja. Postojanje tako definisanog cilja vam pomaže da se pri donošenju odluka usredsredite na ciljeve. 2. 2. 4. Pronalaženje i organizovanje potrebnih informacija Da biste pronašli i organizovali potrebne informacije, počnite od postojećih informacija. Na primer, možda izlazne porudžbine zapisujete u registrator ili informacije o kupcima čuvate na papirnim obrascima u arhivi. Sakupite te dokumente i navedite sve prikazane tipove informacija (na primer, svako polje koje popunjavate u obrascu). Ako nemate postojeće obrasce, zamislite da morate da dizajnirate obrazac kako biste zapisali informacije o kupcima. Koje informacije biste uneli u obrazac? Koja polja za popunjavanje biste kreirali? Identifikujte i navedite sve te stavke. Na primer, pretpostavite da trenutno listu kupaca 13

čuvate na karticama za indeksiranje. Pregledanje ovih kartica bi moglo da pokaže da svaka kartica sadrži ime, adresu, grad, državu, poštanski broj i broj telefona kupca. Svaka od ovih stavki predstavlja potencijalnu kolonu u tabeli. Dok pripremate listu, nemojte se truditi da ona odmah bude savršena, već navedite svaku stavku koje se setite. Ako će još neke osobe koristiti bazu podataka, i njih upitajte za ideje. Kasnije možete da preciznije podesite listu. Nakon toga razmotrite tipove izveštaja i pošiljki koje ćete možda želeti da kreirate na osnovu baze podataka. Na primer, možda biste želeli da kreirate izveštaj o prodaji proizvoda koji će prodaju prikazivati po regionu ili izveštaj sa rezimeom zaliha koji prikazuje nivoe zaliha proizvoda. Možda biste želeli da generišete i tipska pisma koja ćete slati kupcima najavljujući prodajni događaj ili nudeći premiju. Dizajnirajte izveštaj u glavi i zamislite kako će izgledati. Koje informacije biste obuhvatili izveštajem? Navedite svaku stavku. To isto učinite za tipsko pismo, kao i za svaki drugi izveštaj čije kreiranje planirate. Slika 9 Razmišljanje o izveštajima i pošiljkama koje biste želeli da kreirate pomaže vam da identifikujete stavke koje će vam biti potrebne u bazi podataka. Na primer, pretpostavimo da ste kupcima omogućili da daju (ili odbiju) saglasnost za periodične ispravke koje se šalju putem e-pošte i da želite da odštampate listu onih koji su dali saglasnost. U tabelu sa kupcima dodajte kolonu Slanje e-pošte da biste zapisali te informacije. Polje za svakog kupca možete da postavite na vrednost Da ili Ne. Potreba da se kupcima šalju e-poruke podrazumeva još jednu stavku koju je potrebno zapisati. Kada saznate da kupac želi da prima e-poruke, moraćete da znate i e-adresu na koju ćete ih poslati. Stoga je potrebno da zapišete e-adresu svakog kupca. Ključna stvar koju bi trebalo da imate u vidu je da svaku informaciju treba da raščlanite na najmanje korisne delove. Kad su u pitanju imena, puno ime podelite na dva dela ime i prezime, kako bi prezime bilo odmah dostupno. Odvojeno skladištenje prezimena kupaca može da bude korisno ako, na primer, izveštaj želite da sortirate po prezimenu. Uopšte uzev, ako želite da sortirate, pretražujete, izračunavate ili izveštavate na osnovu neke stavke sa informacijama, trebalo bi da tu stavku smestite u posebno polje. Razmislite o pitanjima na koja možda želite da baza podataka pruži odgovor. Na primer, koliko ste prodaja preporučenog proizvoda zaključili prošlog meseca? Gde žive vaši najvažniji 14

kupci? Ko je dobavljač vašeg najprodavanijeg proizvoda? Ukoliko predvidite ove odgovore, bićete u mogućnosti da se usredsredite na dodatne stavke koje treba da zapišete. Posle sakupljanja ovih informacija spremni ste za sledeći korak. 2. 2. 5. Raspoređivanje informacija u tabele Odaberite glavne entitete ili teme kako biste informacije rasporedili u tabele. Na primer, pošto pronađete i organizujete informacije za bazu podataka prodaje proizvoda, preliminarna lista bi mogla da izgleda ovako: Slika 10 Glavni entiteti koje su ovde prikazani su proizvodi, dobavljači, kupci i porudžbine. Stoga, kreiranje ima smisla početi sa ove četiri tabele: jedna je za činjenice o proizvodima, druga za činjenice o dobavljačima, treća za činjenice o kupcima, a četvrta za činjenice o porudžbinama. Iako ovim lista nije dovršena, to je dobar početak. Možete da nastavite s pročišćavanjem ove liste sve dok ne dobijete dizajn koji dobro funkcioniše. Kada prvi put budete redigovali preliminarnu listu stavki, možda ćete poželeti da ih smestite u jednu tabelu, umesto u četiri koje su prikazane na prethodnoj slici. Sada ćete saznati zašto bi to bilo loše. Nakratko razmotrite tabelu koja je ovde prikazana: Slika 11 U ovom slučaju, svaki red sadrži informacije i o proizvodima i o dobavljačima. Pošto možete imati veliki broj proizvoda od istog dobavljača, informacije o imenu dobavljača i njegovoj 15

adresi moraju se ponoviti više puta. Na taj način se zauzima nepotreban prostor na disku. Mnogo je bolja opcija da samo jednom zapišete informacije o dobavljaču u odvojenu tabelu Dobavljači, a zatim je povežete sa tabelom Proizvodi. Drugi problem sa dizajnom u ovom slučaju javlja se kada je potrebno da izmenite informacije o dobavljaču. Na primer, pretpostavimo da treba da promenite adresu dobavljača. Pošto se ona pojavljuje na mnogo mesta, može da se desi da slučajno promenite adresu na jednom mestu, a da zaboravite da je promenite na ostalim mestima. Zapisivanje adrese dobavljača na samo jednom mestu rešava taj problem. Kada dizajnirate bazu podataka, uvek pokušajte da svaku činjenicu zapišete samo jednom. Ako je potrebno da istu informaciju, poput adrese određenog dobavljača, ponavljate na više mesta, smestite tu informaciju u odvojenu tabelu. Na kraju, pretpostavimo da postoji samo jedan proizvod vinarije Coho Winery, a vi želite da ga izbrišete bez gubljenja informacija o imenu i adresi dobavljača. Kako ćete izbrisati zapis o proizvodu, a da pri tome ne izgubite i informacije o dobavljaču? To nije moguće. Pošto svaki zapis sadrži činjenice o proizvodu, kao i činjenice o dobavljaču, ne možete da izbrišete jedno, a da ne izbrišete i drugo. Da biste ove činjenice čuvali odvojeno, tabelu morate podeliti na dva dela: jedna tabela služi za informacije o proizvodu, a druga za informacije o dobavljačima. Brisanje zapisa o proizvodu bi trebalo da izbriše činjenice o proizvodu, a ne i činjenice o dobavljaču. Kada odaberete temu za tabelu, kolone u toj tabeli bi trebalo da skladište samo činjenice o temi. Na primer, tabela proizvoda bi trebalo da skladišti samo činjenice o proizvodima. Pošto je adresa dobavljača činjenica o dobavljaču, a ne činjenica o proizvodu, ona pripada tabeli o dobavljačima. 2. 2. 6. Pretvaranje stavki informacija u kolone Odlučite koje informacije treba da pratite u vezi sa temom zapisanom u tabeli kako biste odredili kolone u tabeli. Na primer, kolone Ime, Adresa, Grad-država-poštanski broj, Slanje e-pošte, Oslovljavanje i E-adresa predstavljaju dobru početnu listu kolona za tabelu Kupci. Svaki zapis u tabeli sadrži isti skup kolona tako da za svaki zapis možete da uskladištite informacije o imenu, adresi, gradu-državi-poštanskom broju, slanju e-pošte, oslovljavanju i e-adresi. Na primer, kolona sa adresama sadrži adrese kupaca. Svaki zapis obuhvata podatke o jednom kupcu, a polje za adresu sadrži adresu tog kupca. Nakon što odredite početni skup kolona za svaku tabelu, kolone možete dodatno da pročistite. Na primer, dobro je uskladištiti puno ime kupca u dve odvojene kolone ime i prezime, kako biste mogli da sortirate, pretražujete i indeksirate samo prema ovim kolonama. Slično tome, adresa se u stvari sastoji od pet odvojenih komponenti adrese, grada, države, poštanskog broja i zemlje/regiona, koje je korisno uskladištiti u odvojene kolone. Na primer, ako želite da izvršite operaciju pretraživanja, filtriranja ili sortiranja po državi, potrebna vam je informacija o državi koja je uskladištena u odvojenoj koloni. Trebalo bi da razmotrite da li će baza podataka sadržati informacije samo domaćeg porekla ili i međunarodnog. Na primer, ako planirate da skladištite međunarodne adrese, bolje je umesto kolone Država imati kolonu Region jer takva kolona može da prihvati i domaće države, kao i regione drugih zemalja/regiona. Slično tome, kolona Poštanski broj ima više smisla nego kolona Poštanski broj Srbija ako ćete skladištiti međunarodne adrese. 16

Sledeća lista sadrži nekoliko saveta za određivanje kolona. Ne uključujte izračunate podatke U većini slučajeva, rezultat računskih operacija ne bi trebalo da skladištite u tabele. Umesto toga, Access može da izvršava računske operacije kada vi želite da vidite odgovarajući rezultat. Na primer, pretpostavimo da postoji izveštaj Proizvodi u porudžbini koji prikazuje podzbir jedinica u porudžbini za svaku kategoriju proizvoda u bazi podataka. Međutim, kolona podzbira Jedinice u porudžbini ne postoji ni u jednoj tabeli. Umesto toga, tabela Proizvodi sadrži kolonu Jedinice u porudžbini koja za svaki proizvod skladišti jedinice u porudžbini. Koristeći te podatke, Access izračunava podzbir svaki put kada odštampate izveštaj. Sam podzbir ne bi trebalo skladištiti u tabeli. Informacije uskladištite u najmanje logičke jedinice Možda ćete poželeti da imate jedno polje za puna lična imena ili imena proizvoda sa opisima proizvoda. Ako kombinujete više vrsta informacija u jednom polju, kasnije će biti teško preuzeti pojedinačne činjenice. Potrudite se da informacije raščlanite na logičke jedinice; na primer, kreirajte odvojena polja za ime i prezime ili ime, kategoriju i opis proizvoda. Slika 12 Kada pročistite kolone sa podacima u svim tabelama, moći ćete da odaberete primarni ključ za svaku tabelu. 2. 2. 7. Preciziranje primarnih ključeva Svaka tabela bi trebalo da sadrži kolonu ili skup kolona koji jedinstveno identifikuje svaki red uskladišten u tabeli. To je često jedinstveni identifikacioni broj, poput ID broja zaposlenog ili serijskog broja. U terminologiji baze podataka ova informacije se naziva primarni ključ tabele. Access polja primarnog ključa koristi za brzo povezivanje podataka iz više tabela, kao i sakupljanje podataka za vaše potrebe. Ako već imate jedinstveni identifikator tabele, kao što je broj proizvoda koji jedinstveno identifikuje svaki proizvod u katalogu, taj identifikator možete da koristite kao primarni ključ 17

tabele ali samo ako će vrednosti za svaki zapis u ovoj koloni uvek biti različite. U primarnom ključu ne možete imati duplirane vrednosti. Na primer, imena osoba nemojte koristiti kao primarni ključ jer ona nisu jedinstvena. Lako bi moglo da se desi da dve osobe u jednoj tabeli imaju isto ime. Primarni ključ uvek mora da ima vrednost. Ako postoji mogućnost da vrednost kolone u nekom trenutku postane nedodeljena ili nepoznata (vrednost koja nedostaje), ona ne može da se koristi kao komponenta u primarnom ključu. Uvek bi trebalo da odaberete primarni ključ čija se vrednost neće menjati. U bazi podataka sa više tabela primarni ključ jedne tabele se može koristiti kao referenca u drugim tabelama. Ako se primarni ključ promeni, promena se mora primeniti i na sva mesta na kojima se referencira na ključ. Korišćenje primarnog ključa koji se neće menjati smanjuje verovatnoću da primarni ključ postane nesinhronizovan sa drugim tabelama koje na njega referenciraju. Kao primarni ključ se često koristi proizvoljni jedinstven broj. Na primer, svakoj porudžbini možete da dodelite jedinstveni broj porudžbine. Jedina namena broja porudžbine je identifikacija porudžbine. On se nakon dodeljivanja nikada ne menja. Ako nemate u vidu kolonu ili skup kolona koje bi mogle da budu dobar primarni ključ, razmotrite upotrebu kolone koja sadrži tip podataka Automatsko numerisanje. Kada koristite tip podataka Automatsko numerisanje, Access će automatski dodeliti vrednost umesto vas. Takav identifikator nije zasnovan na činjenicama; oni ne sadrže činjenične informacije koje opisuju red koji predstavljaju. Ti identifikatori su idealni za korišćenje u vidu primarnih ključeva jer se ne menjaju. Verovatnije je da se primarni ključ koji sadrži činjenice o redu npr. broj telefona ili ime kupca promeni jer se same činjenične informacije mogu promeniti. Slika 13 Kolona čiji je tip podataka postavljen na Automatsko numerisanje je često dobar primarni ključ. Nijedan ID proizvoda se ne ponavlja. U nekim slučajevima, možda ćete želeti da za primarni ključ tabele koristite dva ili više polja. Na primer, tabela Detalji porudžbine u kojoj su uskladištene stavke za porudžbinu bi za primarni ključ koristila dve kolone: ID porudžbine i ID proizvoda. Kada se primarni ključ sastoji iz više kolona, naziva se i složeni ključ. U bazama podataka prodaje proizvoda možete da kreirate kolonu Automatsko numerisanje koja će u svakoj tabeli služiti kao primarni ključ: ID proizvoda za tabelu Proizvodi, ID porudžbine za tabelu Porudžbine, ID kupca za kolonu Kupci i ID dobavljača za tabelu Dobavljači. 18

Slika 14 2. 3. Kreiranje relacija između tabela Nakon raspoređivanja informacija u tabele, potreban vam je metod da ih ponovo povežete na smislen način. Na primer, sledeći obrazac sadrži informacije iz nekoliko tabela. Slika 15 Informacije u ovom obrascu potiču iz tabele Klijenti tabele Zaposleni tabele Porudžbine 19

tabele Proizvodi i tabele Detalji porudžbine. Access je sistem za upravljanje relacionim bazama podataka. U relacionoj bazi podataka informacije se na osnovu teme dele u zasebne tabele. Nakon toga se koriste relacije između tabela kako bi se informacije po potrebi povezale. 2. 3. 1. Kreiranje relacije jedan-prema-više Razmotrite ovaj primer: tabele Dobavljači i Proizvodi u bazi podataka porudžbina proizvoda. Dobavljač može da dostavlja neograničen broj proizvoda. To znači da za svakog dobavljača koji je predstavljen u tabeli Dobavljači može da postoji više proizvoda predstavljanih u tabeli Proizvodi. Dakle, relacija između tabele Dobavljači i tabele Proizvodi je relacija jedan-prema-više. Slika 16 Da biste predstavili relaciju jedan-prema-više u dizajnu baze podataka, primarni ključ sa strane relacije jedan dodajte u vidu jedne ili više dodatnih kolona u tabelu na strani relacije više. U ovom slučaju, npr. kolonu ID dobavljača dodajete u tabelu Proizvodi. Access će nakon toga moći da koristi ID broj dobavljača u tabeli Proizvodi za pronalaženje odgovarajućeg dobavljača za svaki proizvod. Kolona ID dobavljača u tabeli Proizvodi naziva se sporedni ključ. Sporedni ključ je primarni ključ druge tabele. Kolona ID Dobavljača je sporedni ključ u tabeli Proizvodi, pošto je primarni ključ u tabeli Dobavljači. 20

Slika 17 Vi obezbeđujete osnovu za spajanje srodnih tabela uparivanjem primarnih i sporednih ključeva. Ako niste sigurni koje tabele bi trebalo da dele zajedničku kolonu, identifikacija relacije jedan-prema-više obezbeđuje situaciju u kojoj će dve povezane tabele zaista zahtevati deljenu kolonu. 2. 3. 2. Kreiranje relacije više-prema-više Razmotrite relaciju između tabele Proizvodi i tabele Porudžbine. Jedna porudžbina može da sadrži više proizvoda, a jedan proizvod može da se pojavi u više porudžbina. Stoga, za svaki zapis u tabeli Porudžbine može da postoji više zapisa u tabeli Proizvodi, dok za svaki zapis u tabeli Proizvodi može da postoji više zapisa u tabeli Porudžbine. Ovaj tip relacije naziva se relacija više-prema-više jer za svaki proizvod može da postoji više porudžbina, a za svaku porudžbinu može da postoji više proizvoda. Imajte u vidu da je za otkrivanje relacije više-prema-više između tabela važno da uzmete u obzir obe strane relacije. Teme dveju tabela tabele porudžbina i proizvoda imaju relaciju više-prema-više. To predstavlja problem. Kako biste shvatili problem, zamislite šta bi se dogodilo ako biste pokušali da kreirate relaciju između ove dve tabele dodavanjem polja ID proizvoda u tabelu Porudžbine. Potrebno je da u tabeli Porudžbine postoji više od jednog zapisa po porudžbini da biste imali više proizvoda po porudžbini. Ponavljaćete informacije o porudžbini za svaki red koji je povezan sa pojedinačnom porudžbinom što za posledicu ima neefikasan dizajn koji bi mogao da dovede do netačnih podataka. Srešćete se sa istim problemom ako polje ID porudžbine smestite u tabelu Proizvodi za svaki proizvod ćete imati više od jednog zapisa u tabeli Proizvodi. Kako rešiti ovakav problem? 21

Odgovor leži u kreiranju treće tabele koja se često naziva vezna tabela, a koja relaciju višeprema-više raščlanjuje na dve relacije jedan-prema-više. Primarni ključ iz obe tabele umeće se u treću tabelu. Kao posledica toga, treća tabela će zapisati svako pojavljivanje ili instancu relacije. Slika 18 Svaki zapis u tabeli Detalji porudžbine predstavlja jednu stavku u porudžbini. Primarni ključ tabele Detalji porudžbine sastoji se iz dva polja sporednih ključeva iz tabele Porudžbine i tabele Proizvodi. Kao primarni ključ ove tabele ne možete koristiti samo polje ID porudžbine, jer jedna porudžbina može da ima više stavki. Polje ID porudžbine se ponavlja za svaku stavku u porudžbini, tako da ono ne sadrži jedinstvene vrednosti. Ne možete koristiti ni samo polje ID proizvoda, jer jedan proizvod može da se pojavi u više porudžbina. Ali ova dva polja zajedno uvek kreiraju jedinstvenu vrednost za svaki zapis. U bazi podataka prodaje proizvoda, tabela Porudžbine i tabela Proizvodi nisu direktno povezane. One su, u stvari, povezane indirektno preko tabele Detalji porudžbine. Relacija više-prema-više između porudžbina i proizvoda predstavljena je u bazi podataka pomoću dve relacije jedan-prema-više : Između tabela Porudžbine i Detalji porudžbine postoji relacija jedan-premaviše. Svaka porudžbina može da ima više stavki, dok je svaka stavka povezana sa samo jednom porudžbinom. Između tabela Proizvodi i Detalji porudžbine postoji relacija jedan-prema-više. Svaki proizvod može da ima više pridruženih stavki, ali svaka stavka upućuje samo na jedan proizvod. Iz tabele Detalji porudžbine možete da odredite sve proizvode u određenoj porudžbini. Možete da odredite i sve porudžbine za određeni proizvod. Posle unosa tabele Detalji porudžbine, lista tabela i polja bi mogla da izgleda poput ove: 22

Slika 19 2. 3. 3. Kreiranje relacije jedan-prema-jedan Drugi tip relacije jeste relacija jedan-prema-jedan. Na primer, pretpostavimo da treba da zapišete neke specijalne dopunske informacije o proizvodu koje će vam retko biti potrebne ili koje su primenljive na samo nekoliko proizvoda. Pošto vam te informacije nisu često potrebne i pošto bi njihovo skladištenje u tabelu Proizvodi dovelo do pojave praznog prostora za svaki proizvod za koji one ne važe, smestite ih u odvojenu tabelu. Koristite ID proizvoda kao primarni ključ, kao u tabeli Proizvodi. Relacija između ove dopunske tabele i tabele Proizvod je relacija jedan-prema-jedan. Za svaki zapis u tabeli Proizvod postoji jedan podudarni zapis u dopunskoj tabeli. Kada identifikujete takvu relaciju, obe tabele moraju da dele zajedničko polje. Kada otkrijete potrebu za relacijom jedan-prema-jedan, razmotrite da li informacije iz dve tabele možete da smestite u jednu tabelu. Ako to iz nekog razloga ne želite da uradite, možda zbog toga što bi to proizvelo mnogo praznog prostora, sledeća lista sadrži opis načina na koji biste tu relaciju predstavili u dizajnu: Ako dve tabele imaju istu temu, verovatno možete da podesite relaciju pomoću istog primarnog ključa u obe tabele. Ako dve tabele imaju različite teme sa različitim primarnim ključevima, odaberite jednu od tabela (bilo koju) i umetnite njen primarni ključ u drugu tabelu kao sporedni ključ. 23

Određivanje relacija između tabela vam pomaže da se uverite da imate odgovarajuće tabele ili kolone. Kada postoji relacija jedan-prema-jedan ili jedan-prema-više, biće potrebno da tabele unutar relacije dele zajedničku kolonu ili kolone. Kada postoji relacija više-premaviše, za predstavljanje relacije će biti potrebna treća tabela. 2. 4. Pročišćavanje dizajna Ako imate potrebne tabele, polja i relacije, trebalo bi da kreirate tabele i popunite ih probnim podacima, kao i da isprobate rad sa informacijama: kreiranje upita, dodavanje novih zapisa itd. Na taj način ćete doprineti otkrivanju potencijalnih problema na primer, možda će biti potrebno da dodate kolonu koju ste zaboravili da umetnete tokom faze dizajniranja ili možda bi neku tabelu trebalo da podelite na dve tabele kako biste uklonili dupliranje. Proverite da li bazu podataka možete da koristite kako biste dobili željene odgovore. Kreirajte prve radne verzije obrazaca i izveštaja i vidite da li one prikazuju očekivane rezultate. Potražite nepotrebne duplikate podataka i izmenite dizajn kako biste ih eliminisali nakon što ih pronađete. Dok budete isprobavali početnu bazu podataka, verovatno ćete otkriti da ima mesta za poboljšanja. Evo nekoliko stvari koje bi trebalo da proverite: Da li ste zaboravili neke kolone? Ako je to slučaj, da li te informacije pripadaju postojećim tabelama? Ukoliko se radi o informacijama o nečem drugom, možda će biti potrebno da kreirate još jednu tabelu. Kreirajte kolonu za svaku stavku informacija koju treba da pratite. Ako se ta informacija ne može izračunati na osnovu drugih kolona, postoji verovatnoća da će vam za nju biti potrebna nova kolona. Da li su neke kolone nepotrebne jer se mogu izračunati na osnovu postojećih polja? Ako neka stavka informacija može da se izračuna na osnovu drugih postojećih kolona npr. cena sa popustom izračunata na osnovu maloprodajne cene često je bolje uraditi samo to i izbeći kreiranje nove kolone. Da li iznova unosite duplirane informacije u neku tabelu? Ako je to slučaj, verovatno je potrebno da tabelu podelite na dve tabele između kojih će postojati relacija jedan-prema-više. Da li ste svaku informaciju raščlanili na najmanje korisnih delova? Ako je potrebno da izveštavate, sortirate, pretražujete ili izračunavate prema nekoj stavci informacije, stavite je u zasebnu kolonu. Da li svaka kolona sadrži činjenicu o temi tabele? Ako kolona ne sadrži informaciju o temi tabele, ona pripada drugoj tabeli. 2. 4. 1. Pročišćavanje tabele Proizvodi Pretpostavimo da svaki proizvod u bazi podataka prodaje proizvoda spada u opštu kategoriju, poput alkoholnih i bezalkoholnih pića, začina ili morskih plodova. Tabela Proizvodi bi mogla da sadrži polje koje prikazuje kategoriju svakog proizvoda. Pretpostavimo da posle ispitivanja i pročišćavanja dizajna baze podataka odlučite da uskladištite opis kategorije sa njenim imenom. Ako dodate polje Opis kategorije u tabelu 24

Proizvodi, moraćete da ponavljate opis kategorije za svaki proizvod koji spada u određenu kategoriju ovo nije dobro rešenje. Bolje rešenje je da tabela Kategorije postane nova tema koja će se pratiti u bazi podataka, sa sopstvenom tabelom i sopstvenim primarnim ključem. Nakon toga primarni ključ iz tabele Kategorije možete dodati u tabelu Proizvodi kao sporedni ključ. Tabele Kategorije i Proizvodi imaju relaciju jedan-prema-više : kategorija može da sadrži više proizvoda, ali proizvod može da pripada samo jednoj kategoriji. Kada redigujete strukture tabela, obratite pažnju na grupe koje se ponavljaju. Na primer, razmotrite tabelu koja sadrži sledeće kolone: ID proizvoda Ime ID1 proizvoda Ime1 ID2 proizvoda Ime2 ID3 proizvoda Ime3 Ovde svaki proizvod predstavlja grupu kolona koja se ponavlja i razlikuje od drugih samo po broju koji se dodaje na kraj imena kolone. Kada vidite ovako numerisane kolone, trebalo bi da ponovo razmotrite dizajn. Takav dizajn ima nekoliko nedostataka. Za početak, primorava vas da postavite gornju granicu broja proizvoda. Čim prekoračite tu granicu, moraćete da dodate novu grupu kolona u strukturu tabele što predstavlja osnovni administrativni zadatak. Problem je i u tome što će ti dobavljači koji imaju manji broj proizvoda od maksimalnog nepotrebno zauzeti prostor, pošto će dodatne kolone biti prazne. Najozbiljniji nedostatak takvog dizajna je u tome što otežava izvršavanje mnogih zadataka, kao što je sortiranje ili indeksiranje tabele prema ID-u proizvoda ili imenu. Svaki put kada vidite grupe koje se ponavljaju, pažljivo redigujte dizajn obrativši pažnju na deljenje jedne tabele na dve. U prethodnom primeru je bolje koristiti dve tabele, jednu za dobavljače, a drugu za proizvode, pri čemu bi one bile međusobno povezane ID-om dobavljača. 2. 5. Primenjivanje pravila normalizacije Pravila normalizacije podataka (ponekad se nazivaju samo pravila normalizacije) možete da primenite kao sledeći korak u dizajnu. Koristite ova pravila da biste proverili da li su tabele ispravno strukturirane. Proces primenjivanja pravila na dizajn baze podataka naziva se normalizacija baze podataka ili samo normalizacija. Normalizacija je najkorisnije pošto predstavite sve stavke informacija i dođete do preliminarnog dizajna. Cilj je da se uverite da ste informacije podelili u odgovarajuće tabele. Putem normalizacije ne možete da proverite da li imate sve ispravne stavke podataka potrebne za početak rada. 25

Pravila primenjujete redom, pri čemu se tokom svakog koraka morate uveriti da je vaš dizajn postigao takozvanu normalnu formu. Opšteprihvaćeno je pet takvih formi od prve do pete normalne forme. Ovaj članak sadrži objašnjenja o prve tri, jer su one dovoljne za većinu slučajeva dizajna baze podataka. 2. 5. 1. Prva normalna forma Prva normalna forma podrazumeva da u svakom preseku reda i kolone u tabeli postoji jedna vrednost, a nikada lista vrednosti. Na primer, ne možete imati polje pod nazivom Cena u koje ćete smestiti više cena. Ako svaki presek redova i kolona zamislite kao ćeliju, svaka ćelija može da sadrži jednu vrednost. 2. 5. 2. Druga normalna forma Druga normalna forma zahteva da svaka kolona bez ključa potpuno zavisi od celog primarnog ključa, a ne samo nekog njegovog dela. Ovo pravilo se primenjuje kada imate primarni ključ koji se sastoji od više kolona. Na primer, pretpostavimo da imate tabelu koja sadrži sledeće kolone, pri čemu polja ID porudžbine i ID proizvoda formiraju primarni ključ: ID porudžbine (primarni ključ) ID proizvoda (primarni ključ) Ime proizvoda Ovakav dizajn krši pravilo druge normalne forme, jer kolona Ime proizvoda zavisi od polja ID proizvoda, a ne od polja ID porudžbine, tako da ne zavisi od celog primarnog ključa. Potrebno je da iz tabele uklonite kolonu Ime proizvoda. Ona pripada dugoj tabeli (tabeli Proizvodi ). 2. 5. 3. Treća normalna forma Treća normalna forma ne zahteva samo da svaka kolona bez ključa bude zavisna od celog primarnog ključa, već i da kolone bez ključa zavise jedna od druge. Drugim rečima, svaka tabela bez ključa mora da zavisi od primarnog ključa i ni od čega drugog. Na primer, pretpostavimo da imate tabelu koja sadrži sledeće kolone: ID proizvoda (primarni ključ) Ime PMC Popust Pretpostavimo da kolona Popust zavisi od preporučene maloprodajne cene (PMC). Ova tabela narušava treću normalnu formu jer kolona bez ključa Popust zavisi od kolone bez ključa PMC. Nezavisnost kolone znači da bi trebalo da budete u mogućnosti da promenite svaku kolonu koja ne sadrži ključ ne utičući na druge kolone. Ako promenite vrednost u polju PMC, kolona Popust će se promeniti u skladu sa tim i na taj način prekršiti to pravilo. U ovom slučaju, kolonu Popust bi trebalo premestiti u drugu tabelu sa ključem u polju PMC. 26

3. M I C R O S O F T A C C E S S 2 0 0 7 Access je sistem za upravljanje bazama podataka (data base management system DBMS), koristi se za skladištenje i učitavanje podatke, prikazivanje, a takodje i za automatizaciju poslova koji se često ponavljaju. Predstavlja odličnu kombinaciju produktivnosti programa za upravljanje bazom podataka i lakoće korišcenja Windows-a. Kao zaokružena aplikacija, Access obezbedjuje potpuno upravljanje relacionom bazom podataka i integritet na nivou same mašine na kojoj se nalazi baza (što sprečava ne potpuno ažuriranje i brisanje). Tabelama je moguće pridružiti pravila koja proveravaju ispravnost i validnost podataka i sprečavaju unos neispravnih, a svako polje tabele može imati svoj format i podrazumevanu vrednost što znatno povećava produktivnost. Omogucen je uvoz i izvoz podataka iz mnogih aplikacija: dbase, FoxPro, Excel, SQL Server, Oracle, Btrieve, tekstualni ASCII formati (polja sa fiksnom širinom i granicnicima), kao i podataka u HTML formatu. Access 2007 omogućava korišćenje svojih aplikacija za rad na Internetu. Izborom odredjene opcije omogućava se prebacivanje tabela, upita, izveštaja i prikaza u tabelarnom obliku u HTML format. Pomocu Data Acess Pages (stranice za pristup podacima) mogu da se prave složeni obrazci na Internetu koji su povezani sa podacima u konkretnoj mreži. 3. 1. Objekti baze Razvijena baza podataka u Accessu se sastoji od sledećih elemenata, tj. objekata: tabele, upiti, izveštaji; a može sadržati: Data Access strane, makroe i/ili VBA module. Tabele Slika 20 Tabele su nosioci podataka. Podaci se mogu nalaziti isključivo u tabelama. Svaka tabela se sastoji od kolona i redova, dok se presek kolone i reda naziva polje. 27

Upiti Upiti su posebni pregledi kojima se postavlja neki upit nad tabelom i koji izdvajaju podatke za pregled na ekranu ili štampanje putem izveštaja. Forme Slika 21 Slika 22 Forma je samo "pogled" na tabelu u čoveku prihvatljivijem izgledu. Nad formiranom tabelom koja sadrži podatke o nekom čitaocu formiramo masku za unos koja ima izgled papirnog obrasca - kartice, te manipulant ne mora da poznaje rad sa Accessom, nego samo koristi 28

elektronske obrasce (maske) i unosi podatke putem tastature, baš kao što je to ranije činio olovkom. Izveštaji Izveštaji su elektronski oblik klasičnih papirnih obrazaca koje možemo gledati na ekranu ili štampati na papir. Podaci prikazani u izveštaju mogu biti izvedeni iz tabela ili iz upita (filtrirani podaci). Dizajniranje izveštaja je veoma slično dizajniranju formi. Slika 23 3. 2. Opis primera na kojem je priručnik baziran Izgradnje baze počinje od osmišljavanja tabela i njihovog povezivanja. Za kreiranje programa Biblioteka za početak ćemo osmotriti celine - podatke koje treba grupisati u zasebnim tabelama. Svaka biblioteka ima svoje čitaoce. Prva tabela će se stoga zvati Čitaoci. Sama biblioteka ima svoje podatke kao što su adresa, telefon, ime direktora i slično. Druga tabela će se zvati Biblioteka. Sama biblioteka ne bi bila to što jeste da nema knjiga. Za knjige je karakterističan inventarni broj, naslov knjige, autor itd. Treća tabela će se shodno tome zvati Knjige. Interakcija između biblioteke i čitalaca se ogleda u izdavanju i vraćanju knjiga i plaćanju članarine. Četvrtu tabelu ćemo kreirati iz aktivnosti interakcije biblioteke i čitalaca (četvrta tabela - Poslovanje), a zapis o članarini ćemo ipak čuvati u tabeli Čitaoci. Zašto zasebne tabele? Jednostavno - zbog izbegavanja dupliranja podataka. Podaci kao što su telefon, adresa, ime i prezime, datum uplate članarine za čitaoca su jedinstveni i ne postoji niti jedan razlog da se oni ponavljaju. Ako bi pak kreirali samo jednu tabelu, u nju bi 29

morali da unosimo ime i prezime čitaoca (njegovu adresu, broj telefona, datum plaćanja članarine...) i naslov knjige za svako izdavanje i vraćanje (sa njegovim autorom, godinom izdanja, izdavačem...), te bi ovim nepotrebno duplirali podatke. Još gore: veoma su moguće greške u kucanju - nikad ne bismo bili načisto koliko je knjiga koji čitalac pročitao, odnosno koliko knjiga uopšte postoji u biblioteci. Tabeli Čitaoci ćemo na kraju pridružiti i univerzalni identifikacioni broj, broj koji će se upisivati u tabelu Poslovanje. Sem toga, tabeli knjige ćemo pridružiti takođe nezavisan univerzalni identifikacioni broj, nalik ono što smo ranijih godina viđali po bibliotekama - inventarni broj. Operatoru u biblioteci je mnogo lakše da na vašu karticu upiše broj knjige koju ste uzeli, umesto da piše pun naslov knjige. 3. 3. Pokretanje programa, pripremne radnje, kreiranje prve tabele Kada se pokrene Access 2007 otvora se prozor prikazan na sledećoj slici: Slika 24 Klikom na Office dugme (Office Button) u gornjem levom uglu, otvara se meni gde je potrebno izabrati New, koja je prikazana na sledećoj slici: 30

Slika 25 Sa leve strane pojaviće se forma za unos imena baze podataka, što je prikazano na slededoj slici. Slika 26 Nakon klika na dugme Create, otvara se novokreirana baza podataka, odnosno prostor u kome se kreiraju tabele za bazu podataka. Svaka baza podataka kreirana u Access 2007 dobija ekstenziju.accdb što je skraćeno od Access DataBase, za razliku od prethodnih verzija Access-a gde je ekstenzija bila.mdb (Microsoft DataBase). 31

3. 4. Planiranje tabela Pošto smo stvorili sliku o potrebnom broju tabela i njihovoj nameni, možemo preći na sledeći korak - definisanje tabela. Broj tabela smo već utvrdili i on iznosi četiri (Čitaoci, Biblioteka, Knjige i Poslovanje). Za svaku tabelu valja definisati polja i adekvatne tipove podataka koji se mogu u njih unositi: Tabela 'Čitaoci' Naziv polja Tip polja Podvrsta / veličina polja Komentar ID_Citalac Number Integer (*) Prezime_Ime Text 35 u isto polje upisujemo i ime i prezime Adresa Text 30 broj karaktera je restriktivno postavljen, ovo se kasnije može povećati po potrebi; uključuje naziv ulice i broj kuće Mesto Text 30 uključuje poštanski broj i naziv mesta Telefon Text 15 tip je tekst zbog interpunkcije formata xxx / AAA-BBBB Dat_rodj Date Short Date (**) potrebno za statističku obradu starosne strukture čitalaca Dat_upisa Date Short Date takođe potrebno za statističku obradu Dat_clan Date Short Date datum plaćanja članarine; potreban za uvid u finansijsko poslovanje i obaveštavanje čitalaca o isteku članarine Napomena Memo (***) (*) Integer je tip polja Number koji omogućava upis brojeva od -32.767 do 32.767 a kako identifikacioni broj ne može ići u minus smatramo tip polja 0 do 32.767; ako će biti više čitalaca od tog broja, stavljamo tip Long Integer za brojeve od 0 do 2.147.483.648 (**) Short Date predstavlja prikaz datuma u obliku dd/mm/yy (***) Memo je tip polja koji ne uzima fiksnu memoriju već zavisi od broja ukucanih karaktera Tabela 'Knjige' Naziv polja Tip polja Podvrsta / veličina polja Komentar ID_Knjiga Number Long Integer Biće mnogo knjiga, treba nam više od 32.767 Autor Text 30 Naslov Text 40 Izdavac Text 30 God_Izd Text 5 format polja godine sa četiri cifre Zanr Text 1 usvojićemo oznake kao:f - fantastka, p - poezija i sl. Status Text 1 konvencija: r - raspoloziva, n - nije vraćena, z - nije za izdavanje... 32

Tabela 'Biblioteka' Naziv polja Tip polja Podvrsta / veličina polja Komentar Naziv Text 50 Adresa Text 40 Mesto Text 35 Telefon Text 15 Direktor Text 30 Tabela 'Poslovanje' Naziv polja Tip polja Podvrsta / veličina polja Komentar ID_Zapis Autonumber ID_Citalac Number Integer ID_Knjiga Number Long Integer Dat_izd Date Short Date datum izdavanja Dat_vr Date Short Date datum vraćanja 3. 5. Kreiranje prve tabele Tabele u Access-u se mogu formirati na nekoliko načina: Datasheet View omogućava direktno unošenje podataka u tabelu, pri čemu program sam određuje tip polja. Ime polja se daje opcijom Rename Column iz menija koji se dobija desnim klikom na naslov kolone. Ovaj način se retko koristi, jedino ako nije poznata struktura tabele ili ako je potrebno ubaciti kopirane podatke iz nekog drugog programa (npr.ms Excel). Design View omogućava kreiranje tabele detaljnim izborom svojstava polja podataka, kao što su imena polja, tip podataka i veličina polja, određivanje primarnog ključa, i slično. To je najčešće korišćen pristup. Table Wizard poziva čarobnjaka koji koristi biblioteku već formiranih tabela. Ova mogućnost je korisna kada se kreiraju standardni objekti kao što su adresari, računi u fazi učenja, ali se u praksi ne koristi mnogo. Import Table omogućava uvoz tabele iz nekog drugog izvora podataka, druge Access baze, MS Excel dokumenta, kao i fajlova tekstualnog formata. Link Table obezbeđuje povezivanje sa tabelama iz druge MS Access baze (može i neki drugi format baze), pri čemu tabela ostaje u matičnoj bazi, a linkom se omogućuje veza na nju u cilju pregleda i eventualno ažuriranja podataka. U ovoj situaciji, pristup dizajnu tabele nije moguć iz baze koja ima link na datu tabelu, već samo iz matične (izvorne) baze. Dizajnu tabele se ne može pristupiti dok se svi aktivni linkovi na odnosnu tabelu ne isključe, što znači da pri dizajnu tabele niko (kroz mrežu) ne može da je ažurira. Design View mod Prostor u kome se kreiraju tabele prikazan je na sledećoj slici. 33

Slika 27 Desnim klikom miša na Table1 prikazuje se meni iz kojeg se tabela otvara u Design View modu, kao što se vidi na slici. Design View mod se otvara onda kada je potrebno uraditi podešavanja vezana za dizajn i funkcionalnost otvorenog prozora, bez obzira da li je u pitanju tabela, upit, forma, izveštaj, ili makro. Slika 28 Prvo je potrebno upisati naziv tabele. Naziv tabele je CITAOCI. Dodeljivanje imena tabeli vrši se u prozoru prikazanom na sledećoj slici. Slika 29 34

Zatim se otvara prozor za dizajniranje tabele. Slika 30 Na slici, kolona obeležena brojem 1 predstavlja naziv kolone, broj 2 je tip kolone, a broj 3 je komentar koji se pojavljuje u statusnoj liniji Accessovog prozora. U Field Name preseka prve kolone i reda upisaćemo tekst ID_Citalac. U drugoj koloni istog reda ukucaćemo Number. U koloni broj 3 istog reda stavićemo komentar Jedinstveni broj čitaoca. MS Access podržava sledeće tipove podataka (Data Type): Slika 31 Text - tekst (slova, brojevi i svi specijalni znaci) sa kojim se ne vrše računske operacije, a dužine do 255 karaktera. Memo - dugačak tekst (slova, brojevi i svi specijalni znaci) duţine do 65535 karaktera. Ovakav tip tekstualnog podatka ne može ući u neko sortiranje, pretraživanje ili grupisanje. Number brojevi koji se upotrebljavaju u aritmetčkim izrazima, a veličina polja zavisi od "podtipa" koji može biti: Byte, Integer, Long Integer, Single, Double, Replication ID, Date/Time, Currency, Auto Number (koji moţe biti Long Integer ili Replication ID opsega) ili Yes/No. OLE Object Objekat kaoms Word dokument, MS Excel tabela, zvuk, grafikon, slika, a može biti povezan (Linked) ili ugrađen (embedded) u MS Access tabelu. Lookup Wizard-om se kreiraju polja koja omogućavaju izbor vrednosti iz druge tabele ili iz (ograničene) liste vrednosti upotrebom ComboBox ili ListBox kontrole. Izborom ove stavke startuje se Lookup Wizard, kojim se definiše vrsta izvora, način popunjavanja i broj polja. 35

Primetimo da se na delu ekrana iznad kojeg piše Field Properties pojavila tabela sa različitim stavkama. Ako ste ispravno radili, na ekranu ćete imati prikaz sličan kao na ovoj slici: Slika 32 Još jednom da objasnimo šta smo učinili. Započeli smo kreiranje tabele i nazivu prve kolone smo dodelili tekst ID_Citalac. Tip polja, kako smo ranije isplanirali, je Number. To znači da će u polje moći da se ukucavaju isključivo numeričke vrednosti, a sam tip polja ćemo postaviti na Integer. Na slici, ispod teksta Field Properties, na kartici General prva opcija je "veličina" (odnosno pod-tip) polja. Ovu vrednost ćemo promeniti na Integer. Postavimo i ostale osobine kao na slici: Slika 33 Primetimo da je na slici aktivno polje sa datumom. Ovde smo iskoristili osobinu Input Mask ("maska" za unos u polje), koju smo postavili na 00.00.00. To nalaže operateru/bibliotekaru 36

da datum ukucava isključivo kao 6 cifara - dve za dan, dve za mesec i dve za godinu (2000. godina se ukucava kao 00). Osobine koje se mogu postaviti za polje Number su odozgo na dole sledeće: Field Size - veličina, odnosno tip polja Format - način na koji će ukucani brojevi biti prikazani Decimal Place - broj decimala u cifri. Vrednost postavljamo na nula, pošto identifikacioni broj nema smisla sa decimalama Input Mask - "maska" za unos brojeva. Ako u ovo polje postavimo vrednost 00000, korisnik će morati da unese tačno pet cifara za identifikacioni broj čitaoca (npr. 00023) Caption - tekst koji se pojavljuje kao naziv kolone u pogledu za unos podataka (mi smo trenutno u dizajn-pogledu) Validation Rule - pravilo koje se mora ispoštovati pri unosu. Vrednost smo postavili na >0 kako se ne bi mogli uneti negativni brojevi. Validation Text - tekst koji se pojavljuje kao upozorenje kada korisnik pogreši pri unosu Required - određuje da li je unos neophodan ili ne. Vrednost postavljamo na Yes. Indexed - da li je polje indeksirano ili ne. U indeksiranom polju pretraga je brža. No Duplicates u zagradi znači da se ne smeju pojaviti (ukucati) dve iste šifre za dva različita čitaoca. Sledeći i poslednji važan korak je postavljanje primarnog ključa. Primarni ključ je jedno ili više polja preko kojih će tabela biti povezana sa drugim tabelama, preko koje će se podaci indeksirati i izbeći mogućnost dupliranih unosa. U tabeli Čitaoci primarni ključ ćemo postaviti na polje ID_Citalac. Pozicionirajmo kurzor na red u kome nalazi tekst ID_Citalac. Kliknimo na ikonu ključa na toolbaru. Izgled reda tabele ID_Citalac će biti sada ovakav: Slika 34 Ovim je prva tabela kreirana i snimljena. Na sličan način ćemo kreirati i ostale tabele. 37

3. 6. Povezivanje tabela Iskoristićemo postojeće, ranije kreirane tabele i povezaćemo ih međusobno u relacije. Punu snagu Access ostvaruje iz relacionih tabela (otuda naziv relacione baze podataka). Iz relacionih tabela podatke je lako filtrirati i na njih primeniti razne kriterijume bez obzira iz koliko tabela podaci potiču. Ako analiziramo spisak polja i strukturu tabela videćemo da međusobnog povezivanje tabela nema mnogo. Praktično, ima ih dva i oba se nalaze u tabeli Poslovanje. Polje ID_Knjiga bi valjalo povezati sa istoimenim poljem iz tabele Knjige i polje ID_Citalac sa istoimenim poljem iz tabele Citaoci. Vraćamo se u Access i prozor baze. Selektujemo tabelu Poslovanje i kliknemo na taster Design. Sada se otvara već poznati dizajn-pogled tabele. Kliknimo u polje Number reda ID_Knjiga. Primetićemo da je polje "drop-down" tipa, odnosno da sadrži listu za izbor koja se može videti klikom na strelicu na dole ili pritiskom na taster F4. Slika 35 Ono što ćemo sada učiniti je da polja ID_Knjiga i ID_Citalac ograničimo na sadržaj tabela Knjige i Citaoci. Tip polja Number reda ID_Knjiga promenimo na Lookup Wizard... Pokreće se procedura koja će na osnovu naših odgovora na postavljena pitanja formirati relaciju umesto nas: 38

Slika 36 Na prvo pitanje odgovaramo sa prvom opcijom jer želimo da se u tabeli Poslovanje na mesto broja knjige pojavljuju samo vrednosti iz tabele knjiga, odnosno samo smisleni inventarni brojevi (biranjem druge opcije u koloni ID_Knjiga mogli bismo da kucamo bilo koji inventarni broj, pa i onaj nepostojeći). Klikom na Next (ili sa tastature ALT+N) sledi drugi korak: Slika 37 U ovom koraku biramo tabelu iz koje će se uzimati podaci, odnosno određujemo "izvorišnu" tabelu. Dalje, u trećem koraku određujemo kolonu (polja) koja će biti "izvor" podataka: 39

Slika 38 Preostala dva koraka nisu neophodna i već sada možemo kliknuti na taster Finish. Četvrti korak je "kozmetički" i ovde određujemo širinu kolone koje će se prikazivati na ekranu: Slika 39 U poslednjem koraku možemo uticati na naziv kolone, a kako nam naziv ID_Knjiga već odgovara, kliknućemo na taster Finish: 40

Slika 40 Ovim je kreirana prva tzv. relacija tabela Poslovanje i Knjige. Tabelu Poslovanje treba istom procedurom povezati sa tabelom Citaoci, što ćete prateći prethodni postupak sami uraditi. Polja koja se povezuju nose isto ime u obe tabele: ID_Citalac. Još jednu, veoma bitnu, stvar moramo napraviti da bi ova veza funkcionisala kako valja: operateru se mora onemogućiti da u polja ID_Knjiga i ID_Citalac upisuje proizvoljne vrednosti, odnosno one vrednosti za koje ne postoji odgovarajuća šifra u tabelama Knjige i Citaoci. Otvorimo ponovo tabelu Poslovanje u dizajn-pogledu. Selektujmo red ID_Knjiga klikom miša. Ispod teksta Field Properties postoje dva tzv. taba - General i Lookup. Klikom na tab Lookup otvara se lista osobina za polja čiji sadržaj se gleda iz druge tabele. Na ovoj listi za polja ID_Knjiga i ID_Citalac tabele Poslovanje osobinu Limit To List postavimo na vrednost Yes. Slika 41 41

Snimimo i zatvorimo tabelu. Ovim smo ograničili sadržaj polja ID_Citalac i ID_Knjiga na sadržaj druge dve relevantne tabele - Knjige i Citaoci. Pored ovih Lookup relacija napravićemo još i prave relacije između tabela. Sa kartice DatabaseTools biramo opciju Relationships... U prazan prozor koji se pojavi, dodaćemo tabele koje ćemo povezati. Spisak postojećih tabela dobija se klikom na taster Show Table. Slika 42 Dodajmo redom tabele: Citaoci, Poslovanje i Knjige. Iz tabele Citaoci prevucimo polje ID_Citalac u tabelu Poslovanje na polje ID_Citalac. U prozoru koji se pojavi, podešavamo osobine ove relacije. Slika 43 Na slici, obeleženo brojem 1 su tabele koje će biti povezane. Polja koja su međusobno povezana su obeležena brojem 2. Pod brojem 3 su opcije koje će definisati ponašenje ciljne tabele u zavisnosti od promene podataka u izvorišnoj tabeli. Ove opcije ćemo sve uključiti jer će one omogućiti da se, ukoliko se npr. promeni inventarni broj knjige u tabeli Knjige, ova promena reflektuje na tabelu Poslovanje. 42

Primer: Ako je čitalac sa šifrom 15 zadužio i razdužio knjigu sa inventarnim brojem 26, ove promene će ostati zapisana u tabeli Poslovanje i taj podatak može poslužiti u vođenju statistike o čitanosti knjige i broju pročitanih knjiga za čitaoca. Takođe, ukoliko se knjiga ošteti, može se na osnovu istorije izdavanja knjige utvrditi ko je od čitalaca iznajmljivao tu knjigu i tako eventualno pronaći krivca za oštećenje. U momentu kada se knjizi iz raznih razloga promeni njen inventarni broj, ili se knjiga rashoduje, ova promena se neće odraziti na tabelu Poslovanje, ukoliko pomenute opcije sa slike obeležene brojem 3 nisu uključene. U našem slučaju bismo rashodovali knjigu 26 i na mesto njenog broja postavili drugu knjigu, pa bismo dobili sasvim pogrešne podatke o izdavanju knjige i čitaocima koji su knjigu iznajmljivali. Uključenjem opcija pod Enforce Referential Integrity će se promene podataka u tabelama Citaoci i Knjige automatski reflektovati na tabelu Poslovanje. Na slici pod brojem 4 označen je tip relacija. U našem slučaju One-to-many znači da knjiga može imati jedinstven broj, da se ta knjiga može više puta izdati, te da jedan čitalac u isto vreme može uzeti više knjiga. Sem ove relacije postoji još dva tipa relacije. Druga je One-to-one što bi značilo da jedan čitalac može uzeti samo jednu knjigu. Ova relacija bi bila primenljiva u, recimo, "Sega" klubovima, gde biste jednom članu dozvolili da iznajmi jednu konzolu za igranje. Treća vrsta relacija je Many-to-many. Ova relacija se upotrebljava u slučajevima kada postoji osobina zajedničke pripadnosti. Za primer, recimo da dva radnika zaduže dva kompleta alata bez posebne zajedničke pripadnosti. Obojica su tada vlasnici i jednog i drugog kompleta alata. Pod brojem 5 na slici je označen taster Join Type... Klikom na taster ili prečicom ALT+J otvara se dijalog sa tri opcije: Slika 44 Prva opcija će dozvoliti pojavljivanje knjiga u tabeli Poslovanje samo za one inventarne brojeve koji već postoje u tabeli Poslovanje. Biranjem druge opcije u tabeli Poslovanje će moći da se "pojave" svi inventarni brojevi knjiga. 43

Trećom opcijom bismo dozvolili (slično prvoj) pojavljivanje inventarnih brojeva knjiga samo onih koji već postoje u tabeli Poslovanje. Praktično prva i treća opcija nemaju nekog smisla u našem slučaju. Stoga odabiramo drugu opciju i potvrđujem izbor klikom na taster OK. Takođe potvrdimo i promene osobina relacija još jednim klikom na taster OK. Prateći postupak u kome smo kreirali relaciju između tabela Citaoci i Poslovanje gde smo povezali polja ID_Citalac, povežimo i tabele Knjige i Poslovanje. Nakon obavljene operacije imaćemo izgled relacija kao na sledećoj slici. Slika 45 Konačno zatvorimo prozor relacija i odgovorimo potvrdno na postavljeno pitanje kojim snimamo naše promene na relacijama tabela. 3. 7. Unošenje prvih zapisa Pre nego što pređemo na kreiranje formulara za rad sa podacima, iskoristićemo priliku da unesemo podatke direktno u tabele. Način na koji Access smešta podatke u tabele je naizgled veoma jednostavan, a njegovo razumevanje je veoma važno za kasnije dizajniranje formulara i izveštaja. Otvorimo Access i bazu podataka na kojoj radimo. Pređimo na tab Table. Od četiri tabele koje smo kreirali (Biblioteka, Knjige, Citaoci, Poslovanje) otvorimo za unos tabelu Citaoci. Tabela se "otvara" za unos jednim klikom na naziv tabele i zatim klikom na taster "Open" ili jednostavno - dvoklikom na naziv tabele. Dvoklik na naziv tabele uz pritisnut taster CTRL otvara tabelu u dizajn-pogledu. Popunimo prvi slog tabele sledećim podacima: Prezime_ime Petrović Petar Adresa Nemanjina 15 Mesto 21000 Novi Sad Telefon 021/123-456 Dat_rodj 27.03.72 Dat_upisa 01.01.00 (00 ovde skraćeno označava 2000. godinu!) Dat_clan 01.01.00 44

Slika 46 Otvorimo zatim tabelu Knjige i unesimo, takođe, jedan slog: ID_Knjiga 1 Autor Grupa autora Naslov Korak po korak - Microsoft Office 2000 Izdavac Microsoft Press God_izd 1999 Zanr n (Naučna literatura) Status u (U upotrebi) Pošto postoji barem jedan slog u obe tabele možemo otvoriti i treću tabelu - Poslovanje, kako bismo čitaocu "iznajmili" knjigu. U polje ID_Zapis ne upisujemo ništa, uostalom Access to neće dozvoliti, jer smo to polje definisali kao AutoNumber. To polje Access sam popunjava inkrementirajućim brojem. Primetimo da kada započnemo unos u polje ID_Citalac, u polju ID_Zapis će pisati 1. Dakle, popunimo prvi slog tabele Poslovanje sledećim vrednostima: ID_Citalac 1 (čitalac sa šifrom broj 1) ID_Knjiga 1 (knjiga pod inventarnim brojem 1) Dat_izd 01.11.00 Dat_vr 05.11.00 Sve što operater - bibliotekar treba da radi je da unese šifru knjige i čitaoca, kao i datum izmene. Možemo na ovom mestu ići i korak dalje - recimo da se u polju Dat_izd kao unapred ponuđena vrednost nađe tekući datum. Time bismo dodatno rasteretili operatera unosa datuma. Zatvorimo tabelu Poslovanje. Uz pritisnut taster CTRL dvokliknimo mišem ponovo na tabelu Poslovanje (za izmenu dizajna tabele). Kliknimo na red u kome piše Dat_izd i upišimo u vrednost osobine Default Value (osnovna vrednost) funkciju: =Date(). Snimimo i zatvorimo tabelu. 45

Slika 47 U trenutku kada smo započeli unos u tabele Knjige i Citaoci, verovatno ste primetili znak + na levoj strani sloga. Klikom na taj znak Access prikazuje kaskadnu tabelu za koju je direktno vezana tabela sa kojom operišemo, odnosno prikazuje slog ili grupu slogova koji su u relaciji sa slogom otvorene tabele. Za tabelu Citaoci klikom na znak + dobija se tabela Poslovanje gde su slogovi u međusobnoj direktnoj relaciji: Slika 48 46

Sa slike možemo videti da je čitalac sa šifrom 1 iznajmio knjigu sa inventarnim brojem 1. Ovo je zgodan način za testiranje ispravnosti relacija i tabela pre nego što se pređe na dizajniranje ostalih elemenata baze, naročito kada operišemo sa više tabela. Postavlja se pitanje kako ćemo razdužiti čitaocu knjigu kada je bude vratio? To možemo izvesti na dva načina: ili ćemo obrisati slog u tabeli Poslovanje za čitaoca i knjigu koji više nisu u vezi (i pri tome iskopirati taj slog u pomoćnu tabelu za statističku obradu) ili ćemo ostaviti taj slog u tabeli, a knjige koje se pojavljuju u padajućoj listi tabele Poslovanje, ID_Knjiga nekako ograničiti samo na raspoložive knjige. Na sledećem času ćemo iskoristiti polje Status tabele Knjiga i u njega upisivati status knjige, a taj parametar ćemo iskoristiti za ograničenje liste raspoloživih knjiga. Takođe ćemo kreirati i ostale formulare (neki ih zovu i obrascima, šablonima, formama). 47

4. Kreiranje elektronskih obrazaca - formi Forme, maske, elektronski obrasci ili formulari su neki od naziva koji su odomaćeni za englesku reč Forms. Elektronski obrasci predstavljaju ekvivalent papirnim obrascima, a koriste se za unos podataka u elektronske, računaru razumljive, baze podataka. Prednost elektronskih obrazaca nad papirnim je višestruka: unos podataka može biti delimično kontrolisan, u određenim poljima se mogu unapred ponuditi vrednosti (recimo tekućim datumom) dok se pojedina polja mogu popuniti automatski proračunom jedne ili više unetih vrednosti u druga polja. Pre osmišljavanja izgleda elektronskih obrazaca (u daljem tekstu: formi) valja uzeti na uvid papirne obrasce sa kojima su operatori do sada radili. U principu, nama je svejedno kako ćemo ih dizajnirati dok god poštujemo određena pravila, ali na taj način bismo olakšali operaterima prilagođavanja na nov način rada. Osnovna pravila kojih se treba držati su da se ne koriste blještave boje i ukrasni fontovi. Naše kreativne sposobnosti za ukrašavanje ćemo ostaviti za neko drugo mesto. Operateru koji često provodi i više godina na istom radnom mestu će biti vrlo zamorno da gleda u šaren ekran i da čita kitnjasta slova po ceo dan. Raspored polja koji se popunjava mora biti logičan i ravnomerno uravnat. Takođe valja predvideti da se kompletan unos može obaviti sa tastature, dakle, BEZ korišćenja miša. Kada se jednom usvoji ova navika unos može predstavljati pravo zadovoljstvo uz veliku uštedu u vremenu. U Access-u postoji šest osnovnih vrsta obrazaca: 1. Obrazac sa poljima rasporedenim u kolone 2. Tabelarni obrazac 3. Tabelarni prikaz 4. Glavni/Podobrazac 5. Obrazac za izvedene tabele 6. Dijagram Najlakši način za pravljenje jednostavnih obrazaca je da se klikne na tabelu za koju želimo napraviti obrazac, a zatim kliknuti na stavku gornjeg menija Create i izabrati Form i obrazac će se sam izgenerisati. Nešto složeniji način za pravljenje obrazaca je korišćenjem čarobnjaka za obrasce (Form Wizards). On se pokreće izborom stavke gornjeg menija Create, a zatim More Forms, pa Form Wizard. On postavlja niz pitanja u vezi sa željenim obrascem, a zatim ga sam automatski pravi. Ovi obrasci se retko koriste u finalnoj verziji, ali predstavljaju dobru polaznu osnovu za pravljenje složenijih formi. U ovom delu moguće je izabrati izgled obrasca. U stavci menija Create, moguće je izabrati i druge opcije za kreiranje obrazaca. Izborom opcije Blank Form prikazuje se potpuno prazan obrazac od kojeg se kreće u prozoru za oblikovanje obrazaca. Pravi obrazac sa jednim od četiri unapred zadata izgleda (s poljima rasporedenim u kolonu, tabelarni obrazac, tabelarni ili poravnati prikaz) najefikasnije se kreira pomoću opcije Form Wizard. Za pravljenje obrasca sa poslovnim dijagramom služi opcija PivotChart, dok će se za formiranje Excel-ove izvedene tabele kliknuti na More Forms, a zatim PivotTable. 48

Na obrazac se primenjuju iste tehnike za manipulisanje zapisima koje se koriste u tabelarnom prikazu. Jedina razlika je što je kod obrazaca, umesto pomeranja na određeni zapis, potrebno prikazivati jedan po jedan zapis. Iako su za štampanje prvenstveno namenjeni izveštaji, mogu se odštampati i jedan ili više zapisa koje obrazac prikazuje, tačno onako kako oni izgledaju na ekranu. 4. 1. Prva forma - Čitaoci Pod pretpostavkom da je tabela Citaoci dobro organizovana, možemo preći na kreiranje prve forme. Iz tab-a Create izabrati More Forms, pa Form Wizard, kao što je prikazano na sledećoj slici. Slika 49 Izabrati tabelu Citaoci i sva polja prebaciti u desno prazno polje klikom na dvostruku strelicu (>>) i kliknuti na Next, kao što je prikazano na slededoj slici. Slika 50 49

Sada je moguće izabrati na koji način će se prikazivati polja na formi, da li svako polje odvojeno jedno od drugog ili tabelarno. Sa leve strane prikazuje se izgled svake opcije. Izabrati, npr. Columnar, što znači da se polja ređaju jedno za drugim u koloni i kliknuti Next. Ovo je prikazano na slededoj slici. Slika 51 Dalje, moguće je izabrati stil forme. Ovo izabrati po želji, a ukoliko se izabere None, izgled forme biće najjednostavniji, odnosno forme neće biti dizajnirane. Ovaj korak prikazan je na slededoj slici. Kliknuti na Next. Slika 52 50

Na kraju, unosi se ime forme, a po default-u je ponuđeno ime tabele za koju se forma kreira. Neka ostane ime Citaoci1, kao što je prikazano na sledećoj slici. Kliknuti na Finish. Design View forme Slika 53 Nakon klika na dugme Finish, otvara se upravo kreirana forma. Desnim klikom na tab ove forme otvara se meni iz kog je moguće izabrati opciju Design View, tj. mod koji dozvoljava izmene dizajna forme. Ovaj pomoćni meni prikazan je na slededoj slici. Slika 54 51

U Design View-u moguće je pomerati, smanjivati i proširivati polja. Primećuje se da nije moguće pomeriti pojedinačno polje. Za to je potrebno selektovati željeno polje (polja) i na njega kliknuti desnim tasterom miša. Tada se pojavljuje meni gde treba izabrati Layout -> Stacked, pri čemu de se selektovana polja odvojiti od ostalih i moći de da se premeste na neko drugo mesto. Ovo se vidi na slededoj slici. Slika 55 Pomeriti selektovana polja nadesnu stranu, kao što je prikazano na slededoj slici. Kreiranje dugmeta (button) za navigaciju Slika 56 Dok je forma otvorena u Design View, mogu se postaviti i dugmidi za jednostavnije kretanje kroz podatke o zaposlenima. Izabrati opciju Button iz Design tab-a, kao što je prikazano na slededoj slici. 52

Slika 57 Kliknuti na prazno mesto na formi gde je pogodno postaviti dugme. Nakon toga, otvara se prozor prikazan na slededoj slici. Slika 58 Na levoj strani izabrati Record Navigation, a na desnoj Go To First Record i kliknuti na Next. Ovim izborom vrši se kreiranje dugmeta koje prikazuje prvog zapisanog radnika. U sledećem prozoru izabrati da se na dugmetu prikazuje slika (ili izabrati Text, pa ispisati npr. Idi na prvi). Ovo je prikazano na sledećoj slici. Kliknuti Next. 53

Slika 59 U sledećem prozoru omogućeno je imenovanje samog dugmeta, a taj naziv mora biti jedinstven. Ostaviti ponuđeno ime. Ovaj korak vidi se na sledećoj slici. Kliknuti na Finish. Važno je razumeti razliku između naziva dugmeta i teksta koji se ispisuje na dugmetu. Naziv dugmeta je jedinstven, a tekst na dugmetu nije. Takođe, umesto teksta, mogude je postaviti sličicu na dugme kojom de se slikovito objasniti funkcija koju dugme vrši. Slika 60 Na isti način kreiraju se preostala tri dugmeta: Prethodni (Previous), Slededi (Next) i Idi na Poslednji (Go To Last). 54

Kreiranje dugmeta za dodavanje nove instance Takođe, mogude je kreirati dugme za dodavanje novog čitaoca. Ovo se razlikuje samo po tome što se u prvom prozoru na desnoj strani izabere Record Operations, a na levoj Add New Record..Dakle, forma sada izgleda kao na sledećoj slici. Sakrivanje polja na formi Slika 61 Da bi se sakrilo polje, potrebno je prvo otvoriti formu u Design View, kliknuti desnim tasterom miša na ovo polje i izabrati Properties, kao što je prikazano na sledećoj slici. Sa leve strane ekrana pojaviće se prozor Property Sheet u kom je potrebno, u okviru tab-a Format, polje Visible postaviti na No. Slika 62 55

Dizajn forme Sledeće, potrebno je kreirati formu za tabelu Knjige. Ponoviti postupak za kreiranje formi, dakle iz tab-a Create izabrati More Forms, pa Form Wizard Otvoriti formu u Design View i srediti je. Mogu se npr. obojiti redovi. Ukoliko nije otvoren prozor Property Sheet, otvoriti ga desnim klikom na formu izabravši opciju Properties. Iz padajuće liste u Property Sheet-u izabrati Detail, gde se vrše podešavanja za taj deo, što je prikazano na sledećoj slici. Slika 63 Da bi se obojilo i zaglavlje forme, u Property Sheet-u vrednost u padajudoj listi postaviti na FormHeader i izabrati boju u polju Back Color. Izabrati, npr. ponovo istu zelenu boju i sačuvati formu. Kreiranje Tab kontrole Sada je potrebno spojiti formu Citaoci i Knjige, jer za svakog čitaoca može da se unosi više knjiga. Zbog estetike, ali i budućih potreba za dodavanjem novih podformi, korisno je iskoristiti kontrolu Tab (Tab Control). Ona se nalazi u tab-u Design i prikazana je na sledećoj slici. Slika 64 56

Izabrati ovu kontrolu i postaviti je na željeno mesto, kao što je prikazano na sledećoj slici. Slika 65 Pri dodavanju tab kontrole, automatski se kreiraju dva tab-a, tj. dve strane, imenovane sa Page# i Page#. Naravno, u svakom trenutku se može obrisati neki od tab, ili dodati novi, ali i promeniti njihov redosled. Da bi se promenio naziv tab-a, potrebno je kliknuti na željeni, a zatim desnim tasterom miša otvoriti pomoćni meni i izabrati Properties, ukoliko Properties prozor nije već otvoren. Za ovu kontrolu ne postoji puno opcija koje je moguće podesiti. Najčešće korišćene su Name, gde se specificira naziv tab-a koji se prikazuje na formi, zatim Page Index, koji označava redosled tab-a (počinje od 0), i ControlTip Text, gde se upisuje tekst koji će se prikazivati kada se kursor miša prisloni na tab. Dakle, za Name je potrebno upisati KNJIGE, za Page Index neka ostane nula, a za ControlTip Text neka piše po izboru. Ova podešavanja prikazana su na sledećoj slici. Nakon ovih podešavanja, forma izgleda kao što je prikazano na sledećoj slici, kada se otvori u Form view. Drugi tab je potrebno obrisati klikom desnim tasterom miša na jezičak tab-a i izborom opcije Delete Page. Ukoliko se javi potreba za dodavanjem nove tab strane, to se vrši izborom opcije Insert Page. 57

Slika 66 Slika 67 58

Kreiranje podforme (Subform) Sada potrebno otvoriti formu Citaoci u Design View i iz tab-a Design izabrati Subform/Subreport, kako bi se dodala podforma knjige, i kliknuti na prazan deo prethodno kreirane tab strane Knjige. Otvoriće se prozor SubForm Wizard. Potrebno je izabrati Use an existing form (tj. koristiti postojeću, već kreiranu, formu) i kliknuti na Knjige, kao što je prikazano na sledećoj slici, a zatim i na dugme Next. Slika 68 Sada je ponuđen način na koji de forme Citaoci i Knjige biti povezani. Kliknuti na Define my own i iz polja za Form izabrati IDcitalac, a iz polja za Subform, takođe, izabrati IDknjiga. Ovo se vidi na sledećoj slici. Slika 69 59

Ovim je podešeno da se ove dve forme spajaju. Kliknuti na Finish. Sada se u donjem delu forme nalazi subform (podforma). Potrebno je proširiti je da bi se videlo više knjiga. Da bi forma izgledala lepše, pozadina forme Citaoci se može, takođe, obojiti. Kada otvorimo formu u Form View ona izgleda kao na sledećoj slici. Slika 70 Dugmići Minimize, Maximize, Close Button, Record Selectors, Navigation Buttons Na prethodnoj slici vidi se da se na dnu svake forme pojavljuje navigacija, što nije potrebno, jer se sada na formi nalaze dugmidi za navigaciju. Evo kako se ovo uklanja. Otvoriti formu u Design View, a zatim prozor Property Sheet. U padajudoj listi Property Sheet-a izabrati Form. Polja Record Selectors i Navigation Buttons postaviti na No. Takođe, mogu se skloniti dugmidi Maximize i Minimize, ako se vrednost polja Min Max Buttons postavi na None, a može se ukloniti i dugme za zatvaranje forme, ako se Close Button postavi na No. Ova podešavanja su označena na slededoj slici. Forma Knjige neće moći da se otvori u Design View dok je otvorena forma Citaoci, jer ona sadrži formu Knjige kao podformu, pa je potrebno prvo zatvoriti formu citaoci. 60

Sakrivanje kolona na formi Slika 71 Dok je otvorena forma Citaoci, može se podesiti da se ne vide kolone IdCitalac. Dakle, potrebno je selektovati svaku od njih posebno (i smanjiti širinu kolone kako ne bi bilo puno praznog mesta tamo gde se kolona nalazi), pa u Property Sheet-u vrednost polja Visible postaviti na No. Korišćenje kalendara za datumska polja Uneti jednog citaoca. Ukoliko se ne unese ime i/ili prezime pojaviće se upozorenje. Dalje, kada se postavi kursor miša na polje datum rođenja, sa leve strane polja pojaviće se integrisani kalendarčić iz kojeg je moguće izabrati željeni datum. Ova opcija je već objašnjena u prethodnom poglavlju. Takođe, u okviru kalendara postoji dugme Today, kako bi se olakšao unos trenutnog datuma. Korišćenje polja tipa Attachment Evo kako se unosi fotografija. Kliknuti mišem na polje fotografija. Pojaviće se tri dugmića, a treba kliknuti na ono koje je obeleženo spajalicom (attachment). Ovo je prikazano na sledećoj slici. 61

Slika 72 Kreiranje nove forme bez korišćenja čarobnjaka (Wizard) Dakle, potrebno je otvoriti praznu formu izborom opcije Form Design iz Create tab-a, kao što je prikazano na sledećoj slici. Slika 73 Otvoriće se prazna forma u Design View na koju je mogude dodati željene kontrole (combo box, list box, text box, button, subform/subreport, radio button, i itd.). Izgled prazne forme vidi se na sledećoj slici. 62

Sekcije u okviru forme Slika 74 Kao što se moglo primetiti na prethodno kreiranim formama, svaka je imala deo Form Header zaglavlje forme gde se najčešde nalazio naslov forme i/ili zaglavlje tabele, zatim Detail centralni deo forme gde se nalaze polja za unos podataka, podforme, tabele, i sl., i Form Footer zaglavlje u dnu forme. Forma prikazana na prethodnoj slici ima samo Detail deo, a ostali delovi forme se mogu dodati klikom desnim tasterom miša na površinu forme i izborom opcije Form Header/Footer, a takođe se može dodati i Page Header/Footer, koji se koristi najčešće zbog štampanja, kao zaglavlja strane. Ovo je prikazano na sledećoj slici. Slika 75 Sledi dodavanje polja na formu. Ova forma treba da sadrži polja iz tabele Poslovanje. Njihovo dodavanje vrši se pomodu opcije Add Existing Fields iz tab-a Design. Izborom ove opcije otvara se novi prozor sa desne strane ekrana, Fields List, iz kog je potrebno izabrati tabelu Poslovanje, odnosno prevući sve njene atribute na formu, kao što je prikazano na sledećoj slici. 63

Promena Text Field u Combo Box Slika 76 Kada se ova forma otvori u Form View, unos nove instance u tabelu nije prilagođen krajnjem korisniku, jer se od njega očekuje da unese broj, tj. IDcitalac, kao i IDknjiga, umesto da bira konkretne vrednosti iz padajuće liste. Zato je potrebno ova dva polja promeniti iz trenutnog oblika, Text Box, u oblik padajuće liste, Combo Box. Ovo se postiže klikom desnim tasterom miša na polje za unos IDcitalac, pri čemu se otvara pomoćni meni iz kog treba izabrati Change To, pa zatim Combo Box. Ovo je prikazano na sledećoj slici. Slika 77 Izborom ove opcije, Text Box postaje Combo Box i kao što se može primetiti kada se forma otvori u Form View, taj Combo Box ne sadrži vrednosti koje bi trebalo. Za popunjavanje ove padajuće liste konkretnim vrednostima, potrebno je otvoriti prozor Properties Sheet za polje IDCitalac i izabrati tab Data. Na tom mestu vrše se podešavanja vezana za podatke koje ova podajuća lista treba da prikaže. Control Source odnosi se na naziv kontrole za koju se vrše 64

podešavanja, a to je u ovom slučaju IDCitalac, Row Source odnosi se na izvor vrednosti upisanih u padajudu listu. Izvor ovih vrednosti treba da bude tabela Citaoci. Bound Column odnosi se na kolonu koja će se vezati za padajuću listu na kojoj se ova podešavanja vrše. Kako se vrši podešavanje za IDcitalac koje predstavlja polje tipa Number, potrebno je vezati ga za isti tip podatka. Ostala podešavanja su slična podešavanjima tabele. Na sledećoj slici označena su opisana podešavanja. Slika 78 Efekat se može pogledati otvaranjem forme u Form View, a prikazan je i na slici u nastavku. Slika 79 Promena Text Field u List Box Kao što je prikazano da se Text Box može promeniti u Combo Box, tako je moguće i obrnuto, a takođe se može izvršiti promena i u neku drugu kontrolu, u zavisnosti od kontrole nad 65

kojom se promena vrši. Tako je moguće umesto u Combo Box, pretvoriti polje za unos u npr. List Box. Pretraga u formi Na formu postaviti kontrolu Combobox, a zatim, Izabrati polje po kojem će se vršiti pretraga. Slika 80 Slika 81 Zatim Next, pa Finish. Na kraju bi forma bi trebalo da izgleda: 66

Postavljanje polja za izračunavanje Slika 82 Na formu postaviti Text Box polje. U okviru Propertz Sheet aktivirati karticu Data, a zatima Control Source, nakon čega aktivirati Expression Builder i napisati formulu kao što je prikazano na sledećoj slici. Da bi kontrola prikazivala broj potrebno je na kartici Format podesiti ispis numeričkog formata. Slika 83 67

5. U P I T I Upiti (Query, Queries) predstavljaju moćan alat koji pruža pogled na podatke u bazi podataka ili daje odgovore na specifična pitanja u vezi tih podataka. Na primer, ukoliko je potrebno izlistati, tj. pogledati samo imena i prezimena svih čitalaca i grad u kojem žive, ali ne i ostale podatke, moguće je kreirati upit koji prikazuje samo ova tri podatka. Ili, ukoliko je potrebno pogledati imena i prezimena samo onih čitalaca koji žive, recimo, u Lazarevcu, onda bi se upit ograničio samo na njih. Upiti se pišu posebnim upitnim jezikom koji se naziva SQL. Upiti se mogu kreirati na osnovu tabela ili drugih upita. U svakom trenutku, upiti pružaju svež pogled na podatke u bazi podataka. Access-ov upit je pitanje koje se postavlja u vezi sa podacima koji se nalaze u tabelama baze podataka. Postavljanje pitanja u vezi sa tim podacima omogućavaju alatke za sastavljanje upita (Query Tools). Upit može da bude jednostavno pitanje o podacima koji su svi u jednoj tabeli, ili složeno pitanje koje se odnosi na podatke razmeštene u više tabela. Na postavljeno pitanje Access prikazuje samo podatke koji su traženi (ako ih ima). Vrste upita Access podržava šest vrsta upita: Select je najcešća vrsta upita. Upiti za izdvajanje podataka pronalaze i izdvajaju podatke iz jedne ili više tabela i prikazuje ih u dinamičkom skupu čiji se sadržaj može pregledati, analizirati i ažurirati. Total je posebna verzija upita za izdvajanje podataka. Zbirni upiti omogućavaju izračunavanje suma ili zbirnih vrednosti u upitima za izdvajanje podataka. Po zadavanju ove vrste upita Access dodaje red Total u okno QBE (Query By Example). Action upiti omogućavaju pravljenje nove tabele (Make Tables) ili ažuriranje podataka u postojećim tabelama. Kada se unose izmene u upit za izdvajanje podataka, te izmene se mogu praviti samo u jednom po jednom zapisu. Za razliku od toga akcioni upiti omogućavaju ažuriranje više zapisa u istoj operaciji. Crosstab - ovi upiti prikazuju zbirne podatke u tabelarnom obliku poput programa za tabelarne proračune, s tim što su zaglavlja redova i kolona zasnovana na poljima iz tabele. Pojedinačne ćelije u rezultirajućem dinamičkom skupu su tabelarne. Uz pomoć upita možemo izdvajati podatke iz jedne ili više tabela ukoliko ih povezuju kolone sa istim podacima. Kada se koristi više tabela istovremeno, Access prikazuje podatke iz njih u jednom kombinovanom tabelarnom prikazu. Omogućavaju biranje polja (moguće je zadavanje polja koja su potrebna za skup rezultata upita) i biranje zapisa (koji ce zapisi biti izdvojeni u skup rezultata, moguće je zadati pomoću odredjenih uslova). Rezultati upita mogu se prikazati sortirani po odredjenom redosledu, koristiti za razne proračune na osnovu podataka. Ponekad je potrebno da se u bazi podataka kreira nova tabela koja ce sadržati podatke koji se dobijaju kao rezultat upita. Ova vrsta upita pravi novu tabelu na osnovu podataka iz dinamičkog skupa. 68

Dinamički skup, nastao kao rezultat upita može da ima upravo ona polja ili podatke koji su potrebni na izveštaju ili na obrascu. Kada se izveštaj ili obrazac zasniva na upitu, svaki put kada se odštampa izveštaj ili otvori obrazac, upit će izdvojiti najsvežije podatke iz tabela. Upite dalje možemo koristiti za pravljenje dijagrama, tj. na osnovu podataka dobijenih upitom može se napraviti dijagram, koji ce se kasnije koristiti na obrascu ili izveštaju. Mogu se praviti dodatni upiti koji se zasnivaju na skupu zapisa koji su izdvojeni prethodim upitom. To je veoma korisno za ad hoc upite, u kojima može biti potrebno ponavljanje upita sa malo izmenjenim uslovima. Sekundarni upit (podupit) može da se koristi za izmenu uslova, dok primarni upit i njegovi podaci ostaju nepromenjeni. Access-ovi upiti mogu da izdvajaju podatke iz široke lepeze izvora. Mogu se postavljati pitanja u vezi sa podacima koji se nalaze u dbase, Paradox, Btrieve i Microsoft SQL Server bazama podataka. Kreiranje upita Za početak, potrebno je kreirati upit koji de prikazati imena i prezimena čitalaca i naziv grada u kojem žive. U ovom, kao i narednim primerima, koristiće se Query Design koji se nalazi u tab-u Create, u delu Other, što je prikazano na sledećoj slici. Slika 84 U pop-up prozoru Show Table potrebno je izabrati tabelu(e) nad kojom će se upit kreirati. Za opisani primer potrebna je tabela Citaoci. Izabrati je, kliknuti na dugme Add, pa Close. Tada će se izabrana tabela pojaviti u prostoru za kreiranje upita. Kada pritisnete tater Close naći ćete se u QBE (Query By Example specijalna aplikacija u Access-u namenjena za jednostavnije kreiranje upita ) prozoru. Prozor se sastoji od dva dela. U gornjem nalaze se tabele koje ste u prethodnom dijalogu izabrali. Donji prozor sastoji se od nekoliko redova korisnih za sastavljanje upita: Field - U ovaj red se upisuju ili dodaju imena polja Table - U ovom redu se prikazuju imena tabela iz kojih potiču polja Sort - U ovom redu se zadaje način sortiranja podataka iz upita Show - Ovo polje je za potvrđivanje i odredjuje da li ce polje biti prikazano ili ne Criteria - U ovaj red se upisuje prvi red uslova za izdvajanje zapisa Or - Ovo je prvi sledeći red u koji se mogu uneti dodatni uslovi za izdvajanje zapisa Da bi obeležio koje tabele su povezane Access koristi linije. Linija koja spaja dve tabele je spoljna linija. Gornjem delu prozora se može promeniti veličina, i u njemu se mogu premeštati tabele, ukoliko je potreban pregledniji prikaz tabela i spojeva između njih. 69

Slika 85 Slika 86 Rezultat prethodno kreiranog upita može se pogledati klikom na opciju Run iz Design tab-a, u delu Results. Postoji i drugi način da se vidi rezultat upita, a to je klikom desnim tasterom miša na jezičak upita, pri čemu se otvara pomoćni meni iz kojeg treba izabrati Datasheet View. Ovo je prikazano na sledećoj slici. 70

Slika 87 Da bi se dodale nove tabele potrebno je pomeriti pokazivač miša u gornje okno i pritisnuti desni taster prilikom čega će se otvoriti meni u kojem treba odabrati opciju Show table. Izbor tabele se može napraviti duplim pritiskom na njeno ime. Tabela se može najjednostavnije obrisati pomoću selektovanja pritiskom na tabelu ili na neko njeno polje, i pritiskom tastera Delete. Nakon izbora tabela koje će učestvovati u upitu, neophodno je izabrati polja iz datih tabela i dodati ih u red Filed donjeg prozora Table Query-a. Polja se mogu izdvajati jedno po jedno, može se vršiti odabir više polja istovremeno, ili jednostavno izabrati sva polja. Za to se mogu koristiti tastatura ili miš. Prethodno selektovana polja prenose se u red za izbor polja ili se biraju sa padajuće liste u redovima Field, odnosno Table. Za selektovanje više polja istovremeno koriste se funkcijski tasteri Ctrl i Shift. Osim dodavanja polja pojedinačno ili grupno u QBE okno mogu se umetnuti i sva polja tabele istovremeno. Access nudi dve metode izbora svih polja: prevlačenje svih polja kao grupe ili biranjem referentne oznake za sva polja-zvezdice (*). Ukoliko se upit sastoji od polja dve ili više tabele postupak je isti, dodamo željena polja iz prve, potom iz druge... Najjednostavniji način za to je odabir grupe polja i prevlačenje nadole u QBE okno. Kreiranje kriterijumskog upita Za zadavanje uslova koje slogovi moraju da ispunjavaju koristi se red Criteria. Uslovi tekstualnog tipa unose se u polja za tekst na isti način kao i drugi podaci. Da bi se koristili takvi uslovi, potrebno je upisati primer vrednosti podatka koji treba da bude pronađen u tom polju. Može se koristiti i negacija Not ispred nekog teksta, i na taj način će biti prikazani svi slogovi koji ne sadrže tu vrednost. Takođe, kod uslova za numerička ili datumska polja mogu se koristiti operatori za upoređivanje, kao što su (>)veće, (<) manje, (=)jednako. Dalje, potrebno je kreirati upit koji prikazuje imena i prezimena samo onih čitalaca koji žive u Lazarevcu. 71

Ako tražimo čitaoce iz Lazarevca ili Beograda.. Slika 88 Slika 89 Ako želimo da sakrijemo neko polje uradićemo dečekiranje. Slika 90 Na kraju možete izabrati 5 načina prikaza upita: Design View - standardni QBE prikaz upita, Datasheet View - prikazuje se sadržaj dinamičkog skupa u tabelarnom obliku, SQL View - Može se videti izgled odgovarajuće SQL komande, 72

PivotTable View i PivotChart View. Neke upite moguće je kreirati jedino pomoću SQL-a. SQL View Kreiranje upita na ovaj način, tj. kroz Query Design, u pozadini generiše SQL kod koji se izvršava i daje rezultat. SQL kod se može videti otvaranjem upita u SQL View, tj. klikom desnim tasterom miša na jezičak upita, gde se otvara pomoćni meni, odakle treba izabrati opciju SQL View. Slika 91 Slika 92 U SQL kodu primećuju se sledeće klauzule: select, from, inner join i where. U okviru select klauzule upisuju se atributi koje upit treba da prikaže, u from klauzuli specificiraju se tabele čiji atributi se koriste, inner join klauzula specificira vezu između tabela, odnosno tabele i upita, i povezujući atribut koristeći reč ON, dok klauzula where služi za specificiranje uslova, odnosno kriterijuma. Prilikom projektovanja tabele možete naći ograničenja u pogledu ažuriranja. Access neće uvek dozvoliti ažuriranje sadržaja tabela. Ažuriranje se može izvršiti samo u slučaju da su sva polja iz samo jedne tabele ili iz tabela između kojih postoji veza 1:1. Svaki upit za čije kreiranje je potrebno napraviti snimak podataka ne omogućava ažuriranje (unakrsni, zbirni upiti, polja u kojima je vrednost Unique Value Yes, upiti za zadavanje SQL komandi, izračunata polja, polja sa pravom samo za čitanje, korisnici koji nemaju pravo pristupa i ODBC tabele bez primarnog ključa). Tabele neće automatski biti povezane ukoliko to nije učinjeno na nivou baze podataka, ili ako je isključena opcija AutoJoin. 73

Promena vrste spoja vrši se odabirom spoljne linije i duplim pritiskom na nju, prilikom čega će se pojaviti okvir za dijalog Edit Relationships gde je potrebno izabrati Join Type (slika). Tada se otvara okvir za dijalog Join Properties pruža izbor jednog od tri dugmeta za opcije koje pružaju sledeće mogućnosti: Slika 93 Only Include Rows Where the joined filds from both tables are equal (uključiti iz obe tabele samo redove u kojima je sadržaj spoljnih polja jednak. Ova opcija nalaže Access-u da iz obe tabele izdvoji sve zapise u kojima spoljna polja sadrže iste vrednosti. Ovo su jednakovredni ili unutrašnji spojevi. Include ALL Record Form (ime prve tabele) and only those records from (ime druge tabele) where the joined fields are equal (obavezno je uključivanje svih zapisa iz prve tabele i samo onih zapisa iz druge tabele u kojima je sadržaj spoljnih polja jednak). Ako se kao prva koristi tabela, Artikal, a kao druga tabela StavlaKataloga, biće prikazani svi artikli (čak i oni kojih nema u katalogu) i samo ona stavkakataloga koja imaju odgovarajući artikal. Ovo su desni spoljni spojevi. Include ALL records form (ime druge tabele) and only those records from (ime prve tabele) where the joined fields are equal (uključiti sve zapise iz druge tabele i samo one zapise iz prve tabele u kojima je sadržaj spoljnih polja jednak). Access omogućava rad samo sa specifičnim delovima tabele u slučaju kada tabela sadrži veliki broj slogova (samo sa slogovima koji ispunjavaju određene uslove) uz pomoć upita za izdvajanje podataka. Oni izdvajaju podatke iz jedne ili više međusobno povezanih tabela i omogućavaju postavljanje pitanja i dobijanje odgovora koji se tiču podataka smeštenih u tabelama baze podataka. Uslovi se postavljaju u kolonama odgovarajućih polja u redu Criteria. Za pravljenje slogova koji ispunjavaju istovremeno više uslova vezanih za različita polja potrebno je staviti ih u jedan isti red (koji ih povezuje logičkim i ). U slučaju izdvajanja slogova koji ispunjavaju bilo koji od navedenih uslova, oni se smeštaju jedan ispod drugog ili povezuju operatorom Or. Logički operatori u upitu Operatori su pored funkcija izraza osnovni delovi Access-ovih operacija. Koriste se u operacijama kao što su postavljanje standardnih (default) vrednosti, zadavanje uslova prilikom unosa vrednosti u tabele, korišćenje uslova u upitima, postavljanje izračunatih polja 74

na obrasce i dodavanje objekata za sumarne operacije na izveštaje. Operatori omogućavaju izvršavanje računskih operacija, poređenje vrednosti, spajanje znakovnih nizova i sastavljanje složenih relacionih izraza. Korišćenje operatora nalaže Access-u da izvrši odrećene operacije nad jednim ili više operanada. Postoji pet operatora koji su prikazani u tabeli. Reč like se može upotrebiti u kombinaciji sa znakom? ili *. Znak? zamenjuje jedan karakter, dok znak * zamenjuje niz karaktera. Dakle, ukoliko bi kriterijum za ime radnika bio specificiran sa like Ivan?, upit bi vratio rezultat Ivana, ali ne i Ivanka, dok bi upit sa kriterijumom like Ivan* vratio i Ivana i Ivanka. U Access je ugrađeno stotine standardnih funkcija koje se koriste u tabelama, upitima, obrascima i izveštajima. Funkcije za rad sa datumima i vremenom Now ( ) Daje tekući datum i vreme: 3.4.02 12:22:34. Time ( ) Daje tekuće vreme: 12:22:34 Date ( ) Daje tekući datum: 3.4.02 Finansijske funkcije (SQL) to su agregatne funkcije koje izvršavaju finansijske operacije nad skupom vrednosti koji je sadržan u određenom polju. To polje može da se nalazi na obrascu, izveštaju ili upitu. Avg ( ) Sum ( ) Matematičke funkcije Int ( ) Fix ( ) Sqr ( ) Izračunava prosek Izračunava ukupan zbir Daje celobrojni deo ulazne vrednosti-zaokružuje na prvu manju vrednost Daje celobrojni deo negativne vrednosti Izračunava kvadratni koren ulazne vrednosti Funkcije za rad sa znakovnim nizovima-stringovima Left ( ) Right ( ) Len ( ) Lcase ( ) Daje zadati broj znakova sa pocetka niza Daje zadati broj znakova od kraja niza Daje dužinu (broj znakova) niza Pretvara slova ulaznog niza u mala 75

Za postavljanje određenog uslova ili izračunavanje vrednosti određenog polja koriste se izrazi. Oni mogu biti jednostavni ili složeni. Mogu da sadrže razne kombinacije operatora, imena objekata, funkcija i konstanti. Izrazi se mogu sastojati iz sledećih sastavnih delova: Operatori (+,-,<,>,=,*,And,Or,Not,Like,itd) pokazuju koja će vrsta akcije biti izvršena nad jednim ili nad više elemenata izraza, imena objekata-predstavljaju postojeće objekte, funkcije - kao rezultat uvek daju povratnu vrednost, mogu se koristiti ugrađene Access - ove funkcije ili samostalno kreirane, literali - to su vrednosti koje se unose u izraz, mogu da budu brojevi, znakovni nizovi ili datumi. Access ih koristi u istom obliku u kom su unešeni, bez izmene, konstante - (Yes, No, Null, True, False). Access-ove tabele nude više načina pristupa i prikazivanja sadržaja objekta. Moguće je koristiti polja i njihov sadržaj, i svaki objekat tipa polje koristiti više puta. Sadržaj jednog objekta tipa polje moguće je prikazati na više obrazaca i izveštaja koristeći istu referencu tj. ime objekta tipa polje. Znak uzvika je važan simbol koji se koristi u kombinaciji sa rezervisanim rečima. Jedna od njih je reč Forms (obrasci). Kada iza te reči stoji znak uzvika, Access prepoznaje da je sledeće ime objekta ime obrasca koji želite da referencirate. Na primer, ukoliko se polje SifraArtikla pojavljuje na dva obrasca, [Artikal] i [StavkaKataloga], da bi se referenciralo polje SifraArtikla na obrascu [Atrikal] potrebno je koristiti operator! i rezervisanu reč Forms:Forms![Atrikal]. Tačka je simbol koji se koristi u kombinaciji sa operatorima za izraze. Za razliku od operatora!, operator. obično identifikuje svojstvo određenog objekta. Može se koristiti i između imena tabele i imena polja ukoliko je potrebno utvrditi sadržaj nekog polja tabele. Na primer: [StavkaKataloga].[ SifraArtikla] Sortiranje upita Upite je, takođe, moguće sortirati u opadajućem (descending) ili rastućem (acsending) redosledu po zadatom atributu. Ovo se vrši u okviru sort polja prozora Query Design. Takođe, rezultat upita se može sortirati po više atributa, a redosled zavisi od redosleda specificiranja sortiranja. Korišćenje logičkih operatora Operator NOT. Slika 94 76

Operator AND. Slika 95 Slika 96 Ako uslove upišemo u dve različite kolone QBE tabele, onda su oni povezani operatorom AND. Relacioni operatori. Slika 97 Slika 98 77

Slika 99 Slika 100 Iz baze podataka izdvojiti sve kupce čije ime mesta počinje sa slovom A, a sastoji se iz tri slova ili je ID_KNJIGA između 5 i 15. Slika 101 Prilikom zadavanja širih uslova možemo koristiti i uglaste zagrade [ ]. Uglastiim zagradama formiramo listu. Bilo koji znak koji se pojavljuje na listi unautar uglastih zagrada pojaviće se na odgovarajućem mestu u skupu rezultata. Iz baze podataka izdvojiti sve čitaoce čije mesto boravka počinje na slova L, B, T. Slika 102 78

Parametarski upiti Parametar se u upit unosi tako što u polje criteria željeni parametar upisujemo između uglastih zagrada. Izvođenje računskih operacija Slika 103 Račinske operacije u QBE tabeli možemo da izvodimo u polju Criteria ili korišćenjem izračunatih polja. Računske operacije u polju Criteria predstavljaju uslove za izvršavanje upita. Izračunato polje je novo polje koje pravimo u praznoj ćeliji Field QBE tabele. obično se novom izračunatom polju dodeljuje ime koje se upisuje na početku ćelije Field. nakon toga se stavlja dvotačka, a potom unosi izraz koji treba da se izračuna. Ako se u izrazu koriste neka druga polja iz QBE tabele, ta polja se upisuju u uglastim zagradama. Rezultat: Slika 104 Slika 105 79

Zbirni proračuni Ovi proračuni, za razliku od izračunatih polja, za dobijanje rezultata uzimaju vrednosti iz više zapisa u tabeli. Da bi napravili zbirni proračun u nekom upitu, potrbno je uraditi sledeće: 1. Aktivirati komandu Totals. 2. U novom redu Total QBE tabele pojaviće se izraz Group By za sva polja koja smo koristili u upitu. Izraz Group By treba da ostavimo za sva ona polja želimo da grupišemo ili koja će da učestvuju u zbirnom proračunu. Kod onih polja po kojima radimo zbirni proračun umesto izraza Group By biramo jednu od sledećih operacija: Avg: prosek Count: broj popunjenih vrednosti First: vrednost u prvom zapisu Last: vrednost u poslednjem zapisu Max: najveća vrednost Min: najmanja vrednost StdDev: standardna devijacija Sum: zbir Var: varijacija Slika 106 Ukoliko u upitu koristimo i zbirne proračune i kriterijume za izbor podataka, u polje total svih kolona u kojima smo definisali kriterijum za izbor treba upisati izraz Where. Ako kriterijum za izbor podataka želimo da primenimo pre zbirnog obračuna, operator Where treba upisati u ćeliju Total onog polja po kome želimo da napravimo izbor zapisa. Slika 107 80

Slika 108 Ukoliko u upit koristimo i zbirne proračune i izračunata polja, u polja total svih kolona u kojima smo definisali izračunata polja ( a ne želimo grupisanje ) treba upisati izraz Expression. Slika 109 Zbirne proračune možemo raditi i sa izračunatim poljima, ali izraz u svakom izračunatom polju ne sme da se odnosi na neka druga izračunata polja. Slika 110 U ovom primeru je korišćen izraz: UKUPNA VREDNOST: [Cena]*1,18 koji se može pisati u posebnom okviru Expression Builder ili u polju QBE. Ako pišemo u polju izraz zumiramo tako što aktiviramo desni klik na polje pa onda Zoom. Slika 111 81

Promena imena polja u QBE tabeli 1. U polje Field u QBE tabeli ispred starog imena polja treba upisati novo ime i dvotačku (novo ime: staro ime) 2. Treba otvoriti prozor sa svojstvima polja kojem menjamo ime ( obeležavamo polje i biramo Properties) i u svojstvo caption upisujemo novo ime polja. Crosstab Query - unakrsni upiti Unakrsni upiti rezultate izračunavanja prikazuju tabelarno. kreira se na sledeći način: 1. Potrebno je napraviti QBE tabelu sa svim potrebnim poljima i kriterijumima za izbor podataka. Mogu se koristiti i izračunata polja. 2. Sa kartice Design aktivirati alatku Crosstab Slika 112 U QBE tabeli pojavljuju se dva nova reda: Total i Crosstab. 3. U ćeliji Crosstab polja koja će se pojaviti u zaglavljima redova treba izabrati opciju Row Heading. Za zaglavlja redova možemo koristiti više polja, ali barem jedno mora imati Group By u svojoj ćeliji Total. 4. Za zaglavlja kolona biramo opciju Column Heading. Ovde možemo imati samo jedno polje koje mora imati Group By u svojoj ćeliji Total. 5. U ćeliji Crosstab polja za koje se računa zbirna vrednost treba izabrati opciju Value, a potom u ćeliji Total tog istog polja treba izabrati agregatnu funkciju. Opcija Group Bz za ovo polje nije dozvoljena 6. Ako želimo da grupišemo po dodatim poljima koja neće biti prikazana u skupu rezultata, u ćelijama crosstab ovih polja treba da izaberemo Not shown. Slika 113 82

Upit za ažuriranje Ovaj upit omogućava promenu određenih zapisa u tabeli. kreira se na sledeći način. 1. Aktivirati ikonicu Update Query. U QBE se pojavljuje novi red Update TO. 2. U ćeliju Criteria upisujemo kriterijume za izbor polja koja želimo da ažuriramo, a u ćeliju Update To upisujemo novu vrednost polja ili izraz za izračunavanje vrednosti Sledeći upit će povećati cene knjiga za 20% za sve čitaoce iz Lazarevca. Slika 114 Upit za izradu tabela Omogućava izradu nove tabele od grupe zapisa iz neke druge tabele. Kreira se na sledeći način: 1. Formiramo QBE tabelu. 2.Aaktiviramo opciju Make Table, pojaviće se prozor Make Table u kojem zadajemo ime nove tabele. Slika 115 83

6. Uvod u struktuirani upitni jezik SQL SQL omogućava korisnicima pristup podacima u sistemima za upravljanje relacionim bazama podataka, kao što su Oracle, Sybase, Informix, Microsoft SQL Server, Access i drugi, tako što dopušta korisnicima da opišu podatke koje žele da dobiju. SQL takođe omogućava korisnicima da definišu podatke u nekoj bazi podataka i da manipulišu tim podacima. U ovom kursu biće opisano kako se koristi SQL, a to će sve biti potkrepljeno primerima. SQL koji se koristi u ovom dokumentu predstavlja ANSI verziju tog jezika, ili standardni SQL. Osnove naredbe SELECT U relacionoj bazi podataka podaci se smeštaju u tabelama. Neka tabela, na primer, mogla bi da sadrži jedinstveni matični broj građana, imena, prezimena i adrese zaposlenih: TabelaAdresaRadnika JMBG Ime Prezime Adresa Grad Republika 512687458 Đorđe Petrović Kralja Petra 9 Beograd Srbija 758420012 Marija Simić Bul Nikole Tesle 22 Jagodina Srbija 102254896 Savo Jovanović Njegoševa 17 Podgorica Crna Gora 876512563 Svetlana Aćimović Laze Lazarevića 10 Subotica Srbija Pretpostavimo da želite, recimo, da vidite adrese svih zaposlenih. Da biste to postigli, koristite naredbu SELECT: SELECT Ime, Prezime, Adresa, Grad, Republika FROM TabelaAdresaRadnika; Rezultat ovog upita u bazu podataka je: Ime Prezime Adresa Grad Republika Đorđe Petrović Kralja Petra 9 Beograd Srbija Marija Simić Bul Nikole Tesle 22 Jagodina Srbija Savo Jovanović Njegoševa 17 Podgorica Crna Gora Svetlana Aćimović Laze Lazarevića 10 Subotica Srbija Da objasnimo sada šta ste upravo uradili: tražili ste sve podatke u tabeli TabelaAdresaRadnika preciznije, tražili ste kolone pod nazivom Ime, Prezime, Adresa, Grad, Republika. Obratite pažnju da imena kolona i tabela ne sadrže razmake ona se moraju navesti kao jedna reč, kao i da se naredba završava tačkom i zarezom (;). Opšti oblik naredbe SELECT kojom se dobijaju svi redovi u tabeli je: SELECT ImeKolone, ImeKolone,... FROM ImeTabele; 84

Da biste dobili sve kolone neke tabele bez navođenja svih imena kolona, koristite: SELECT * FROM ImeTabele; Uslovna selekcija podataka Da bismo dalje razmotrili naredbu SELECT, pogledajmo drugi primer (hipotetičke) tabele: TabelaPrimanjaRadnika IDRadnika Plata Prinadležnosti Položaj 010 75000 15000 rukovodilac 105 65000 15000 rukovodilac 152 60000 15000 rukovodilac 215 60000 12500 rukovodilac 244 50000 12000 činovnik 300 45000 10000 činovnik 335 40000 10000 činovnik 400 32000 7500 pripravnik 441 28000 7500 pripravnik U SQL-u postoji šest relacionih operatora i posle njihovog predstavljanja videćemo kako se koriste: = Jednako <> ili!= Različito < Manje > Veće <= Manje ili jednako >= Veće ili jednako 85

Da bi se prikazali samo oni redovi iz tabele koji zadovoljavaju određene kriterijume, koristi se klauzula WHERE. Ona se može najlakše razumeti ukoliko se pogleda nekoliko primera. Ukoliko želite da dobijete ID brojeve onih zaposlenih koji zarađuju preko 50.000, koristite sledeću naredbu: SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE PLATA >= 50000; Obratite pažnju da se koristi znak >= (veće ili jednako), pošto smo želeli da izdvojimo one zaposlene koji zarađuju više od 50,000, ili jednako 50,000, i to prikazano zajedno. Kao rezultat dobijamo: IDRADNIKA ------------ 010 105 152 215 244 Opis klauzule WHERE, odnosno deo PLATA >= 50000, naziva se uslov (operacija koja kao rezultat daje vrednost True (tačno) ili False (netačno)). Isti tip operacije može se primeniti na tekstualne kolone: SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE POLOŽAJ = 'rukovodilac'; Ova naredba prikazuje ID brojeve svih rukovodilaca. Generalno, u slučaju tekstualnih kolona, koristite operatore jednako ili različito, i obavezno ceo tekst koji se pojavljuje u naredbi navedite unutar apostrofa ('). Složeni uslovi Operator AND kombinuje dva ili više uslova i prikazuje neki red tabele samo ukoliko podaci tog reda zadovoljavaju sve navedene uslove (tj. svi uslovi su tačni). Na primer, da biste prikazali sve činovnike koji zarađuju više od 40.000, koristite naredbu: SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE PLATA > 40000 AND POLOŽAJ = 'činovnik'; Operator OR kombinuje dva ili više uslova, ali prikazuje red ukoliko je neki navedeni uslov zadovoljen. Da biste zajedno prikazali one zaposlene koji zarađuju manje od 40.000 ili su im prinadležnosti manje od 10.000, koristite ovaj upit: SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE PLATA < 40000 OR PRINADLEŽNOSTI < 10000; Operatori AND i OR mogu da se kombinuju, na primer: 86

SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE POLOŽAJ = 'rukovodilac' AND PLATA > 60000 OR PRINADLEŽNOSTI > 12000; SQL najpre pronalazi (odvojeno) redove u kojima zaposleni ima platu veću od 60.000 i ima rukovodeći položaj, a zatim iz ove liste redova izdvaja one koji zadovoljavaju gornji AND uslov ili uslov da su prinadležnosti veće od 12.000. Na kraju, SQL prikazuje ovu drugu novu listu, pri čemu treba znati da će svako ko prima prinadležnosti veće od 12.000 biti uključen jer operator OR uključuje red ako je bar jedan uslov tačan. Takođe obratite pažnju da se najpre izračunava rezultat operatora AND. Operatori IN i BETWEEN Lakši način za kombinovanje uslova je pomoću operatora IN ili BETWEEN. Na primer, ako želite da dobijete sve rukovodioce ili činovnike: SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE POLOŽAJ IN ( 'rukovodilac', 'činovnik'); ili da prikažete sve zaposlene koji zarađuju više ili jednako 30.000, ali manje ili jednako 50,000: SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE PLATA BETWEEN 30000 AND 50000; Da biste prikazali sve čije plate nisu u ovom intervalu, pokušajte: Operator LIKE SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE PLATA NOT BETWEEN 30000 AND 50000; Vratimo se na tabelu TabelaPrimanjaRadnika i pretpostavimo da želite da dobijete sve zaposlene čije prezime počinje sa S ; pokušajte: SELECT IDRADNIKA FROM TABELAPRIMANJARADNIKA WHERE PREZIME LIKE 'S*'; Procenat (%) se koristi ukoliko želimo da predstavimo bilo koji znak (cifru, slovo, znak interpunkcije) ili skup znakova koji mogu da slede iza slova S. Da biste pronašli zaposlene čija se prezimena završavaju sa S, koristite '*S', ili ako želite S u sredini reči, pokušajte '*S*'. Znak '*' može biti upotrebljen umesto bilo kojih znakova koji se nalaze na istoj poziciji relativno od datih znakova. Operator NOT LIKE prikazuje redove koji ne zadovoljavaju dati kriterijum. Spajanje tabela U ovom odeljku govori se samo o unutrašnjem spajanju i spajanju izjednačavanjem pošto su oni najkorisniji u praksi. 87

Dobar dizajn baze podataka preporučuje da svaka tabela sadrži podatke o samo jednom entitetu, a detaljnije informacije u relacionoj bazi podataka mogu se dobiti pomoću dodatnih tabela i njihovim spajanjem. Uvedimo najpre sledeće tabele kao primer: VlasniciAntikviteta IDVlasnika PrezimeVlasnika ImeVlasnika 01 Jovanović Branko 02 Simonović Boban 15 Lazarević Pava 21 Aćimović Jelena 50 Filipović Sima Porudžbine IDVlasnika ŽeljeniKomad 02 sto 02 pisaći sto 21 stolica 15 ogledalo Antikviteti IDProdavca IDKupca KomadNameštaja 01 50 krevet 02 15 sto 15 02 stolica 21 50 ogledalo 50 01 pisaći sto 01 21 orman 02 21 stočić za kafu 15 50 stolica 01 15 kutija za nakit 02 21 posuđe 21 02 polica za knjige 50 01 vaza 88

Ključevi Razmotrimo najpre koncept ključeva. Primarni ključ je kolona ili skup kolona koji jednoznačno određuju ostatak podataka u svakom redu. Na primer, kolona IDVlasnika u tabeli VlasniciAntikviteta jednoznačno određuje određeni red. Ovo znači dve stvari: nijedna dva reda ne smeju imati istu vrednost u koloni IDVlasnika, kao i da čak ukoliko dva vlasnika imaju isto ime i prezime, kolona IDVlasnika obezbeđuje da oni neće biti pomešani jer se za manipulisanje njima u celoj bazi koristi kolona IDVlasnika, a ne njihova imena. Strani ključ je kolona u tabeli koja je primarni ključ u drugoj tabeli, što znači da sve vrednosti u koloni stranog ključa moraju imati odgovarajuće podatke u drugoj tabeli u kojoj je ta kolona primarni ključ. U terminologiji relacionih baza podataka, ova veza se naziva referencijalni integritet. Na primer, u tabeli Antikviteti obe kolone IDKupca i IDProdavca predstavljaju strane ključeve za primarni ključ tabele VlasniciAntikviteta (tj. kolonu IDVlasnika; u cilju izlaganja pretpostavljamo da neko mora biti vlasnik antikviteta pre nego što može da kupuje ili prodaje komade antikvitetnog nameštaja), pošto se u obe kolone ID brojeva koriste za identifikaciju vlasnika ili kupaca i prodavaca, a kolona IDVlasnika je primarni ključ tabele VlasniciAntikviteta. Drugim rečima, svi ovi ID brojevi se koriste za ukazivanje na same vlasnike, kupce i prodavce antikviteta, bez potrebe za korišćenjem njihovih stvarnih imena. Obavljanje spajanja Namena ovih ključeva je da podaci iz više tabela mogu da se kombinuju, bez potrebe da se podaci ponavljaju u svim tabelama u ovome se sastoji snaga relacionih baza podataka. Na primer, možete da pronađete imena onih koji su kupili stolicu bez moranja da navedete njihova puna imena u tabeli Antikviteti. To ime možete da saznate povezujući one koji su kupili stolicu sa imenima u tabeli VlasniciAntikviteta preko kolone IDVlasnika, koja uspostavlja odnos između podataka u ovim dvema tabelama. Da biste dobili imena onih koji su kupili stolicu, koristite ovaj upit: SELECT PREZIMEVLASNIKA, IMEVLASNIKA FROM VLASNICIANTIKVITETA, ANTIKVITETI WHERE IDKUPCA = IDVLASNIKA AND KOMADNAMEŠTAJA = 'stolica'; Obratite pažnju na sledeće činjenice o ovom upitu: obe tabele koje su u relaciji navedene su u klauzuli FROM naredbe SELECT. U klauzuli WHERE primetite da uslov KOMADNAMEŠTAJA = 'stolica' ograničava izbor na one koji su kupili (a u našem primeru, stoga poseduju) stolicu. Drugo, obratite pažnju kako se uspostavlja odnos između kolona sa ID brojevima iz dve tabele upotrebom uslova IDKUPCA = IDVLASNIKA. Samo ako se podudaraju ID brojevi u tabelama i kupljen komad nameštaja je stolica (zbog operatora AND), prikazaće se imena iz tabele. Pošto je u uslovu spajanja upotrebljen znak jednakosti, ovo spajanje se naziva spajanje izjednačavanjem. Rezultat ovog upita su dva imena: Simonović, Boban i Filipović, Sima. Koristeći zapis sa tačkama da biste izbegli dvosmislenost, ispred imena kolona možete pisati imena tabela: 89

SELECT VLASNICIANTIKVITETA.PREZIMEVLASNIKA, VLASNICIANTIKVITETA.IMEVLASNIKA FROM VLASNICIANTIKVITETA, ANTIKVITETI WHERE ANTIKVITETI.IDKUPCA = VLASNICIANTIKVITETA.IDVLASNIKA AND KOMADNAMEŠTAJA = 'stolica'; Međutim, kako su u tabelama imena kolona različita, ovo nije bilo neophodno. Kada se pojavi isto ime kolone u obe tabele, onda se ispred imena kolone mora dodati ime tabele kojoj pripada. To se zove "qualifying columns" (kvalifikovanje kolona). Kombinacijom imena tabele i imena kolone se eliminišu dvosmisleni nazivi kada dve tabele sadrže kolone sa istim imenom. Koriste se dva formata spajanja tabela: Oracle proprietary join (Format spajanja svojstven Oraklu ): SELECT <kolone> FROM tabela_1, tabela_2 WHERE uslov_spajanja; ANSI/ISO SQL 99 compliant standard join (Standardni format spajanja po ANSI/ISO SQL 99): SELECT <kolone> FROM tabela_1 JOIN tabela_2 ON uslov_spajanja; Evo još nekih primera iz primera Biblioteka koji je obrađen u prethodnim poglavljima: SELECT Prezime_Ime, Dat_izd FROM Citaoci INNER JOIN Poslovanje ON Citaoci.ID_Citalac = Poslovanje.ID_Citalac; rezultat upita je: Slika 116 Slika 117 90

Slika 118 rezultat: Slika 119 Klauzula DISTINCT i eliminacija duplikata Pretpostavimo da želite da saznate samo ID brojeve i imena onih ljudi koji su prodali neki antikvitet. Očigledno, treba nam lista u kojoj je svaki prodavac naveden jedanput ne interesuje nas koliko antikviteta je neko prodao, već samo činjenica da je neko bio prodavac. To znači da SQL-u treba kazati da eliminiše duplikate redova prodaje i da svaku osobu prikaže samo jednom. Da biste ovo postigli, koristite ključnu reč DISTINCT. Najpre nam treba spajanje izjednačavanjem tabele VlasniciAntikviteta da bismo dobili detaljnije podatke o prezimenu i imenu osobe. Međutim, imajte na umu da pošto kolona IDProdavca u tabeli Antikviteti predstavlja strani ključ za tabelu VlasniciAntikviteta, prodavac će biti prikazan samo ukoliko u tabeli VlasniciAntikviteta postoji red sa njegovim ID brojem, imenom i prezimenom. Želimo i da eliminišemo višestruko pojavljivanje broja IDProdavca iz naše liste, pa koristimo DISTINCT ispred kolone iz koje se mogu pojaviti iste vrednosti (međutim, u opštem slučaju nije neophodno uvek pisati DISTINCT ispred imena kolone). Da bismo pokazali još jednu mogućnost, želimo takođe da lista bude prikazana po abecednom redu prezimena, a zatim imena (u slučaju istih prezimena). Stoga, koristićemo klauzulu ORDER BY: SELECT DISTINCT IDPRODAVCA, PREZIMEVLASNIKA, IMEVLASNIKA FROM ANTIKVITETI, VLASNICIANTIKVITETA WHERE IDPRODAVCA = IDVLASNIKA ORDER BY PREZIMEVLASNIKA, IMEVLASNIKA; U ovom primeru, pošto je svako bio prodavac, dobićemo spisak svih vlasnika po abecednom redu prezimena. Zbog kasnijeg pozivanja na ovu vrsta spajanja (i u slučaju da vas neko o tome pita), smatra se da ovakva vrsta spajanja pripada kategoriji unutrašnjih spajanja. 91

Pseudonimi i IN podupiti i podupiti U ovom odeljku govorićemo o pseudonimima, IN podupitima, kao i o tome kako se oni mogu koristiti u našem primeru sa tri tabele. Prvo, razmotrimo sledeći upit koji prikazuje prezimena onih vlasnika koji su poručili nešto i njihovu porudžbinu, pri čemu se daju samo one porudžbine koje se mogu zadovoljiti (to jest, postoji prodavac koji je vlasnik poručenog komada nameštaja): Ovo kao rezultat daje: SELECT VL.PREZIMEVLASNIKA Prezime, POR.ŽELJENIKOMAD Poručen komad FROM PORUDŽBINE POR, VLASNICIANTIKVITETA VL WHERE POR.IDVLASNIKA = VL.IDVLASNIKA AND POR.ŽELJENIKOMAD IN (SELECT KOMAD FROM ANTIKVITETI); Prezime Poručen komad ----------- ------------- Simonović sto Simonović pisaći sto Aćimović stolica Lazarević ogledalo Ima nekoliko stvari na koje treba obratiti pažnju u ovom upitu: "Prezime" i "Poručen komad" u redu koji počinje sa SELECT predstavljaju zaglavlja kolona u izveštaju. VL i POR su pseudonimi; to su nova imena za tabele navedene u klauzuli FROM koja se koriste u zapisu sa tačkama kao prefiksi svih imena kolona u upitu. Ovim se eliminiše dvosmislenost, naročito pri spajanju izjednačavanjem u klauzuli WHERE jer obe tabele imaju kolonu pod nazivom IDVlasnika, a zapis sa tačkama ukazuje SQL-u da su u pitanju dve različite kolone IDVlasnika iz dve različite tabele. Obratite pažnju da je tabela Porudžbine navedena prva u klauzuli FROM; ovim se osigurava da se spisak prikazuje prema toj tabeli, a da se druga tabela VlasniciAntikviteta koristi samo za detaljnije podatke (prezime). Najvažnije, AND u klauzuli WHERE izaziva izvršavanje IN podupita ("= ANY" ili "= SOME" su dve ekvivalentna zapisa za IN). Ono što se ovim postiže je izvršavanje podupita koji kao rezultat daje sve posedovane komade nameštaja iz tabele Antikviteti jer nema klauzule WHERE. Zato, da bi se prikazao red iz tabele Porudžbine, ŽeljeniKomad mora se nalaziti u toj vraćenoj listi komada nameštaja iz tabele Antikviteti, čime se neki antikvitet prikazuje samo ako porudžbina može da se realizuje kupovinom od drugog vlasnika. Ovo može da se shvati na sledeći način: podupit kao rezultat daje skup komada nameštaja koji se upoređuje sa svakim željenim komadom iz tabele Porudžbine; IN uslov je tačan samo ako ŽeljeniKomad pripada tom vraćenom skupu iz tabele Antikviteti. Obratite pažnju takođe da se u ovom slučaju desilo da je svaki željeni antikvitet bio raspoloživ, što naravno neće uvek biti slučaj. Pored toga, kada se koriste ključne reči 92

IN, "= ANY" ili "= SOME", one ukazuju na podudarnost redova, a ne kolona. To znači da ne možete navesti više kolona u klauzuli SELECT nekog podupita želeći da uparite kolonu u spoljašnjoj klauzuli WHERE sa jednom od više mogućih vrednosti kolone u podupitu. U podupitu se može navesti samo jedna kolona, a moguća podudarnost proizilazi iz više vrednosti redova u toj jednoj koloni, a ne obrnuto. Podupit je SELECT-rečenica ugneždena u neku klauzulu ili drugu SELECT-rečenicu. Podupit se izvršava jednom pre glavnog upita. Glavni ili spoljašnji upit koristi rezultat podupita. Podupiti se daju u zagradi. Podupit je uvek na desnoj strani uslova poređenja. Spoljašnji i unutrašnji upit mogu uzeti podatke iz različitih tabela (jedan iz jedne, drugi iz druge). Samo jedna klauzula ORDER BY može biti uključena u jednu SELECT-rečenicu i ona mora biti poslednja klauzula spoljašnjeg upita. Podupit ne može imati sopstvene klauzule ORDER BY. Jedino ograničenje broja podupita je veličina bafera koji se koristi za upit. Još jedna česta upotreba podupita odnosi se na primenu operatora u uslovima klauzule WHERE koji sadrže rezultat upita SELECT nekog podupita. Na primer, prikažimo kupce koji su kupili skup antikvitet (cena antikviteta je za 100 veća od prosečne cene svih kupljenih antikviteta): SELECT IDKUPCA FROM ANTIKVITETI WHERE CENA > (SELECT AVG(CENA) + 100 FROM ANTIKVITETI); Podupit izračunava prosečnu cenu plus 100, a zatim se prikazuju ID brojevi kupaca za svaki komad nameštaja koji je koštao iznad tog iznosa. Da bismo eliminisali duplikate, mogli smo da navedemo DISTINCT IDKUPCA. Dalje, prikažimo prezimena onih vlasnika u tabeli VlasniciAntikviteta samo ukoliko su kupili neki antikvitet: SELECT PREZIMEVLASNIKA FROM VLASNICIANTIKVITETA WHERE IDVLASNIKA IN 93

(SELECT DISTINCT IDKUPCA FROM ANTIKVITETI); Podupit kao rezultat daje spisak kupaca, a prezime vlasnika antikviteta prikazuje se ako i samo ako ID broj vlasnika pripada rezultatu podupita (koji se ponekad naziva lista kandidata). Napomena: u nekim implementacijama mogu se koristiti jednakosti umesto IN, ali zbog razumljivosti pošto je rezultat podupita neki skup, klauzula IN je bolji izbor. Da bismo pokazali primer sa ažuriranjem podataka, pretpostavimo da osoba koja je kupila sanduk za knjige ima pogrešno ime uneto u bazu podataka ime treba da bude Jovan: UPDATE VLASNICIANTIKVITETA SET IMEVLASNIKA = 'Jovan' WHERE IDVLASNIKA = (SELECT IDKUPCA FROM ANTIKVITETI WHERE KOMADNAMEŠTAJA = 'sanduk za knjige'); Podupit najpre pronalazi IDKupca za osobu (ili osobe) koja je kupila sanduk za knjige, a zatim spoljašnji upit ažurira njegovo ime. Zapamtite sledeće pravilo o podupitima: kada je podupit deo nekog WHERE uslova, klauzula SELECT u tom podupitu mora imati kolone koje se poklapaju po broju i tipu sa onima koje se nalaze u klauzuli WHERE spoljašnjeg upita. Drugim rečima, ako imate "WHERE ImeKolone = (SELECT...);", klauzula SELECT mora sadržati samo jednu kolonu koja odgovara koloni ImeKolone u spoljašnjoj klauzuli WHERE i njihov tip mora biti odgovarajući (oba tipa su celi brojevi, znakovne niske itd.). Aritmetički operatori Slika 120 U SQL-u se mogu koristiti aritmetički operatori (primer BP Biblioteka): SELECT Citaoci.Mesto, Poslovanje.Dat_izd, Knjige.Naslov, Knjige.ID_Knjiga, Knjige.ID_Knjiga*5 AS RACUN FROM Knjige INNER JOIN (Citaoci INNER JOIN Poslovanje ON Citaoci.ID_Citalac = Poslovanje.ID_Citalac) ON Knjige.ID_Knjiga = Poslovanje.ID_Knjiga WHERE Knjige.ID_Knjiga>5 OR Citaoci.Mesto Like"L*"; 94

Slika 121 rezultat: Agregatne funkcije Slika 122 Razmotrićemo pet važnih agregatnih funkcija: SUM, AVG, MAX, MIN i COUNT. One se nazivaju agregatnim jer daju sumarne rezultate nekog upita, a ne spisak svih redova. SUM () daje zbir vrednosti date kolone u svim redovima koji zadovoljavaju neki uslov, pri čemu je data kolona numerička. AVG () daje prosečnu vrednost date kolone. MAX () daje najveću vrednost u datoj koloni. MIN () daje najmanju vrednost u datoj koloni. COUNT(*) daje broj redova koji zadovoljavaju određen uslov. Vraćajući se na tabele sa početka ovog dela, razmotrimo tri primera: SELECT SUM(PLATA), AVG(PLATA) FROM TABELAPRIMANJARADNIKA Ovaj upit prikazuje sumu plata svih zaposlenih u tabeli, kao i prosečnu platu zaposlenih u tabeli. SELECT MIN(PRINADLEŽNOSTI) FROM TABELAPRIMANJARADNIKA WHERE POLOŽAJ = 'rukovodilac'; Ovaj upit kao rezultat daje najmanju vrednost u koloni Prinadležnosti onih zaposlenih koji su rukovodioci, a to je 12500. SELECT COUNT(*) FROM TABELAPRIMANJAZAPOSLENIH WHERE POLOŽAJ = 'činovnik'; Ovim upitom saznajemo koliko ima činovnika. 95

Klauzule GROUP BY i HAVING Jedan specijalan način upotrebe operatora GROUP BY je povezivanje neke agregatne funkcije sa grupom redova (ovo se naročito odnosi na funkciju COUNT koja broji redove u svakoj grupi). Pretpostavimo najpre ta tabela Antikviteti ima kolonu Cena i da svaki red ima neku vrednost u toj koloni. Želimo da dobijemo cenu najskupljeg antikviteta koji je kupio svaki vlasnik. Zato SQL-u moramo da kažemo da grupiše kupovine svakog vlasnika i izdvoji najvišu cenu kupovine: SELECT IDKUPCA, MAX(CENA) FROM ANTIKVITETI GROUP BY IDKUPCA; Sledeće, pretpostavimo da želimo da dobijemo najvišu cenu kupovine za antikvitete koji su kupljeni za iznos preko 1000. Za taj slučaj koristimo klauzulu HAVING: SELECT IDKUPCA, MAX(CENA) FROM ANTIKVITETI GROUP BY IDKUPCA HAVING CENA > 1000; Kao što se klauzula WHERE koristi da se ograniči izbor redova, tako se klauzula HAVING koristi za ograničen izbor grupa. Ako upit koristi klauzule GROUP BY i HAVING, prvo se grupišu redovi, zatim se izračunavaju grupne funkcije, a zatim se prikazuju samo one grupe koje su saglasne sa klauzulom HAVING. Klauzula WHERE se koristi da ograniči izbor redova koji se grupišu; klauzula HAVING ograničava izbor grupa dobijenih klauzulom GROUP BY. Primeri iz BP Biblioteka: Slika 123 Slika 124 96

Slika 125 Slika 126 Slika 127 Slika 128 Slika 129 97

Ako u klauzulu SELECT uključite grupnu funkciju (AVG, SUM, COUNT, MAX, MIN, STDDEV, VARIANCE) i još neku pojedinačnu kolonu, svaka tako navedena pojedinačna kolona mora biti navedena i u klauzuli GROUP BY. Alijasi kolona se ne mogu koristiti u klauzuli GROUP BY. Klauzula WHERE isključuje vrste (redove) pre njihove podele na grupe. Zato se grupne funkcije ne mogu koristiti u klauzuli WHERE. Za definisanje uslova selekcije na osnovu vrednosti grupnih funkcija koristi se klauzula HAVING Formiranje novih tabela Sve tabele u bazi podataka moraju se formirati u nekom trenutku. Pogledajmo kako bi na primer formirali tabelu Porudžbine: CREATE TABLE PORUDŽBINE (IDVLASNIKA INTEGER NOT NULL, ŽELJENIKOMAD TEXT(40) NOT NULL); Slika 130 Ovom naredbom daje se ime tabeli i opisuje svaka kolona u tabeli. Obratite pažnju da se u ovoj naredbi koriste generički tipovi podataka i da oni mogu biti različiti zavisno od korišćenog sistema za upravljanje bazama podataka. Kao i obično, proverite dokumentaciju svog sistema. Neki opšti tipovi podataka su: Text(x) Kolona znakova, pri čemu broj x označava maksimalan broj dopuštenih znakova (maksimalnu dužinu) u koloni. Integer Kolona celih brojeva, pozitivnih ili negativnih. Decimal(x, y) Kolona decimalnih brojeva, pri čemu x označava maksimalan broj cifara decimalnih brojeva u koloni, a y označava maksimalan broj dopuštenih cifara iza decimalne tačke. Najveći broj tipa (4,2) bio bi 99.99. Date Kolona datuma određenog formata. Logical Kolona koja može da sadrži dve vrednosti: TRUE ili FALSE. Takođe obratite pažnju da NOT NULL znači da kolona mora da ima neku vrednost u svakom redu. Ako se navede NULL za kolonu, u nekom redu ta kolona može biti prazna. Menjanje tabela Dodajmo kolonu tabeli Antikviteti koja treba da sadrži cenu odgovarajućeg komada nameštaja: ALTER TABLE ANTIKVITETI ADD (CENA DECIMAL(8,2) NULL); 98

Podaci za ovu novu kolonu mogu se upisati ili ažurirati na način koji je opisan kasnije. Dodavanje podataka Da biste dodali redove tabeli, navedite sledeću naredbu: INSERT INTO ANTIKVITETI VALUES (21, 01, 'otoman', 200.00); Ovim se podaci upisuju u tabelu Antikviteti, kao novi red, kolona po kolona, u predefinisanom redosledu. Promenimo sada redosled i ostavimo kolonu Cena praznom: INSERT INTO ANTIKVITETI (IDKUPCA, IDPRODAVCA, KOMADNAMEŠTAJA) VALUES (01, 21, 'otoman'); Primeri za kreiranje i doradu tabela: Slika 131 Slika 132 Slika 133 99

Slika 134 ALTER TABLE dodaje novo polje ili ograničenje u već postojeću tabelu ALTER TABLE RADNIK ADD Telefon text (20); Brisanje podataka Obrišimo ovaj novi red iz baze podataka: Ažuriranje podataka DELETE FROM ANTIKVITETI WHERE KOMADNAMEŠTAJA = 'otoman'; Ažurirajmo kolonu Cena u redu koji još ne sadrži podatak o ceni: UPDATE ANTIKVITETI SET CENA = 500.00 WHERE KOMADNAMEŠTAJA = 'stolica'; Ovim se cena svih stolica postavlja na 500,00. Kao što se vidi iz ovoga, da bi se ažuriranje ograničilo na određenije redove, mora se koristiti više WHERE uslova povezanih operatorom AND. Isto tako, mogu se navesti vrednosti za više kolona ukoliko se naredbe jednakosti odvoje zarezima. 100

7. Izveštaji Izveštajima se vrši organizacija i sumiranje podataka radi njihovog preglednijeg prikazivanja i analize na ekranu ili na papiru nakon štampanja. Detaljni izveštaji uključuju i sumirane podatke kao što su konačne sume, prebrojavanja, procentualna izračunavanja i sl. U Access 2007 izveštaji se mogu vrlo jednostavno kreirati ručno, a takođe postoji mogućnost korišćenja čarobnjaka (wizard). Izveštaji mogu prikazivati podatke iz jedne, ali i iz više tabela. Kreiranje izveštaja korišćenjem čarobnjaka U primeru koji sledi, kreiran je izveštaj koji prikazuje podatke o svim čitaocima i i knjigama koje su zadužili..., Izveštaj se pomoću čarobnjaka kreira izborom opcije Report Wizard iz tab-a Create, što je prikazano na slededoj slici. Slika 135 Nakon izbora ove opcije, otvara se prozor iz kojeg je potrebno izabrati tabelu(e) i/ili upit(e), a zatim i njihove atribute koje treba prikazati na izveštaju. Slika 136 Kliknuti na dugme Next pri čemu se prelazi na korak u kojem je potrebno specificirati ukoliko postoji potreba za određenim grupisanjem podataka. U ovom izveštaju potrebno je izvršiti grupisanje po čitaocu. 101

Slika 137 Slika 138 Na sledeći korak prelazi se klikom na dugme Next gde je potrebno specificirati sortiranje ukoliko je potrebno i sumiranje željenih podataka. 102

Slika 139 Klikom na dugme Summary Options otvara se novi prozor u kojem je moguće izabrati atribut čije vrednosti je potrebno sumirati. Prepoznati su samo oni atributi nad kojima je moguće vršiti sumiranje, a to su oni tipa Number. U ovom primeru, jedini atribut koji je moguće sumirati je cena. Pored sumiranja, ponuđene su i opcije za izračunavanje prosečne (Avg), minimalne (Min) i maksimalne (Max) vrednosti, pa treba označiti željene. Ovo je prikazano na sledećoj slici. Slika 140 Sa desne strane prozora (prethodna slika) moguće je izabrati da li de izveštaj biti detaljan ili će sadržati samo konačne sume za svakog čitaoca, kao i da li je potrebno izračunati procenat svake pojedinačne sume u ukupnoj, ali pošto ovde nije izabrana opcija sumiranja, neće biti izabrano ni ovo. Kliknuti na dugme Ok, a zatim Next. Potrebno je izabrati odgovarajući način prikaza podataka (Layout), kao i orijentaciju izveštaja, uspravno (Portrait) ili vodoravno (Landscape). Takođe, može se označiti opcija za automatsko podešavanje širine kolona, kako 103

bi sve mogle stati na papir (opcija Adjust the field width so all fields fit on a page). Ova podešavanja prikazana su na sledećoj slici. Slika 141 Kliknuti na dugme Next, a zatim izabrati stil izveštaja. U ovom primeru izabrano je None, što znači da neće biti primenjen ni jedan stil, već će izveštaj biti u beloj boji. Dizajn izveštaja biće naknadno urađen. Ovaj korak prikazan je na slededoj slici. Slika 142 Kliknuti na dugme Next, a zatim dodeliti naziv izveštaju u sledećem koraku, a zatim izabrati da li da se prikaže izveštaj u Report View (opcija Preview the report) ili da se otvori u Design View kako bi se dodatno kastomizovao (opcija Modify the report's design). Ovo je prikazano na sledećoj slici. 104

Slika 143 Kliknuti na dugme Finish. Nakon toga vrši se generisanje izveštaja koji se prikazuje u Report View, ukoliko to izabrano kao opcija, kao što se vidi na sledećoj slici. Design View izveštaja Slika 144 105

Da bi se izveštaj otvorio u Design View radi dodatnih prilagođavanja, potrebno je desnim klikom miša na izveštaj otvoriti pomoćni meni i izabrati opciju Design View. Ova izveštaj u Design View izgleda kao na sledećoj slici. Sekcije izveštaja Slika 145 Na prethodnoj slici mogu se uočiti sekcije u okviru izveštaja, slične onima koje su opisane u poglavlju Forme. Sekcija Report Header pojavljuje se na prvoj strani izveštaja i prikazuje njegov naslov, tj. naziv. Page Header se pojavljuje na vrhu svake strane izveštaja i prikazuje nazive kolona, dok se Page Footer pojavljuje u dnu svake strane i može prikazivati broj strane i/ili ukupan broj strana. Sekcija Detail se nalazi između Page Header i Page Footer i prikazuje konkretne vrednosti iz odgovarajudih tabela. Report Footer se nalazi na poslednjoj strani izveštaja i može prikazivati razne sume i slično. Kreiranje izveštaja bez korišćenja čarobnjaka Da bi se kolona cena pomerila, potrebno je prevući je mišem i otpustiti taster miša onda kada se pojavi vertikalna narandžasta linija na željenom mestu. Ova linija vidljiva je na sledećoj slici. 106

Slika 146 Nakon pomenutih podešavanja redosleda kolona, isti deluje smislenije. Međutim, da bi se umesto neke kolone postavile druge kolone, potrebno je izabrati već objašnjenu opciju Add Existing Fields iz tab-a Design. Tada se otvara prozor za dodavanje kolona iz tabele(a) čiji su atributi već na izveštaju, u okviru dela Fields available for this view, zatim iz tabela koje su povezane sa tabelama koje se nalaze u pomenutom delu prozora, Fields available in related tables, i najzad kolona iz ostalih tabela, Fields available in other tables. Ovaj prozor, Fields List, vidi se na slededoj slici. Slika 147 Potrebno je iz dela Fields available in related tables izabrati atribut ime iz tabele, prevući ga na željeno mesto. 107

Slika 148 Sada je moguće obrisati kolonu Mesto, klikom desnim tasterom miša na istu i biranjem opcije Delete iz pomoćnog menija. Potrebno je preimenovati kolonu MESTO u npr. RM. Ovo se može učiniti dvostrukim klikom miša na naslov kolone, čime se on selektuje i postaje spreman za izmenu. Međutim, ovom atributu u sekciji Detail ne sme se menjati naziv, jer on označava stvarno ime atributa iz tabele. Izveštaj nakon ovih izmena dobija izgled prikazan na sledećoj slici. Slika 149 Uz pomoć već uobičajenih opcija Microsoft Office paketa u tab-u Home, moguće je dodatno srediti izveštaj u pogledu poravnanja teksta, podebljanja, boja i slično (opcije za font). 108

Potrebno je centrirati zaglavlja kolona i podesiti svakoj koloni odgovarajudu širinu selektovanjem iste i povlačenjem leve ili desne ivice mišem. Takođe, i u Design View izveštaja moguće je isti obojiti uz pomoć prozora Property Sheet. Da bi se svaka sekcija izveštaja jasno uočila, svaku sekciju moguće je obojiti u drugačiju boju u okviru opcije Back Color, a opcija Alternate Color je moguće koristiti samo u onim sekcijama u okviru kojih se prikazuju instance, pa se dešava ponavljanje sekcije. Ovaj izveštaj biće obojen npr. plavom bojom u sekciji Report Header, zatim svetlijom plavom zaglavlja kolona, tj. Page Header, sekcija Takođe, na prethodnoj slici vidi se komentar ispred sumarnih podataka za svakog čitaoca (na slici Summary for 'IDRadnika' = 1 (1 detail record)), što nije neophodno, pa se može obrisati biranjem Delete opcije pomoćnog menija koji se otvara desnim klikom miša na isti. Ono što se može desiti na izveštaju, to je pojavljivanje znaka "#" u nekoj od kolona. To znači da je kolonu potrebno proširiti, kako bi se mogle videti vrednosti u istoj. Ukoliko se javi potreba za drugačijim grupisanjem i sortiranjem podataka, to je moguće uraditi u Design View pomodu opcije Group & Sort iz Ribbon palete u okviru tab-a Design. Tada se u dnu izveštaja otvara Group, Sort and Total prozor, koji je prikazan na sledećoj slici. Slika 150 Klikom na male strelice bira se atribut po kojem je potrebno izvršiti grupisanje, odnosno sortiranje, zatim from smallest to largest (na prethodnoj slici) označava da se izabran atribut sortira počev od najmanje vrednosti, u slučaju da je atribut brojčanog tipa, ili ukoliko je atribut tekstualnog tipa sortiranje je moguće po abecedi, opadajudim ili rastućim redosledom, i slično kod ostalih tipova podataka. Da bi se dodalo novo grupisanje, kliknuti na Add a group, ili ukoliko je potrebno sortirati podatke po još nekim poljima, kliknuti na Add a sort. Ove opcije su vidljive na prethodnoj slici. Opcije Sum, Avg, Min, Max, Count,... Dodatna izračunavanja na izveštaju, koja nisu mogla da se definišu putem wizard-a, mogu se primeniti direktno u Design View na izveštaju. Ova izračunavanja se postavljaju desnim klikom miša na polje nad kojim se isto podešava, a zatim se iz pomoćnog menija bira Total opcija i konkretna funkcija. Podrazumeva se da ne mogu sve funkcije računanja biti primenjene na sve tipove podataka. Za tekstualno polje najčešće se primenjuje funkcija Count Records, koja vrši prebrojavanje odgovarajućih instanci, dok je za numerička polja 109

dostupno najviše funkcija, kao što su Sum, Average, Count Records, Count Values, Max, Min, Standard Deviation, Variance. Izabrana funkcija računanja prikazuje se za svaku grupu (ukoliko grupisanje postoji), a zatim i ukupno za ceo izveštaj. Opcija Total prikazana je na sledećoj slici. Slika 151 110

8. Makroi i switchboard U ovom delu priručnika biće reči o tome kako povezati prethodno kreirane forme i izveštaje u jednu celinu. Pre svega, misli se na kreiranje dugmića na formi ili izveštaju koji otvaraju neke druge forme i izveštaje, ili pokreću neke specifične akcije, zatim kreiranje početne forme aplikacije i na njoj dugmiće za otvaranje formi i izveštaja, kao i kreiranje dodatnih pomoćnih menija. Sve ovo podrazumeva korišćenje makroa (Macros). Makroi omogućavaju automatizaciju raznih zadataka, odnosno dodavanja funkcionalnosti na forme, izveštaje i kontrole. U Microsoft Access-u mogu se posmatrati kao pojednostavljen programski jezik koji se piše kreiranjem liste akcija koje je potrebno izvršiti. Prilikom kreiranja makroa biraju se akcije iz padajuće liste koje će se izvršavati klikom na odgovarajuće dugme, a zatim popunjavaju dodatne potrebne informacije za izvršavanje akcija. Makroi omogućavaju dodatne mogućnosti na formama, izveštajima i kontrolama bez pisanja programskog koda u VBA modulu (Visual Basic for Applications). Oni pružaju listu komandi dostupnih u VBA, što je većini ljudi jednostavnije za korišćenje u odnosu na pisanje VBA koda. Postupak dodavanja dugmića na formu je već opisan, samo što se razlikuje u akciji koju će ono vršiti. Potrebno je na formu Čitaoci postaviti dugme koje će otvarati formu Knjige. Slika 152 Sledeća ideja je da se klikom na prethodno kreirano dugme prikazuju knjige samo za onog čitaoca čiji su podaci trenutno prikazani na formi Čitaoci. Problem povezivanja podataka koji su trenutno prikazani na formi Čitaoci sa podacima koje je potrebno prikazati u formi Knjige, biće rešen bez pomoći čarobnjaka (wizard). Na novokreirano dugme, potrebno je kliknuti desnim tasterom miša i iz pomoćnog menija izabrati opciju Build Event, kao što je prikazano na sledećoj slici. 111

Slika 153 Build Event opcija služi za definisanje, tj. kreiranje događaja koji treba da se dogodi klikom na dugme za koje se kreira. Biranjem ove opcije otvara se prozor prikazan na sledećoj slici. Slika 154 Na prethodnoj slici primećuje se da je akcija ved specificirana, jer je ona izabrana prilikom kreiranja dugmeta uz pomoć čarobnjaka. Preostalo je samo da se definiše Where Condition, odnosno uslov koji treba da zadovolje podaci koji će se prikazati na formi Knjige. Postavljanjem kursora miša u polje Where Condition prikazuje se dugme na desnom kraju polja. Klikom na to dugme otvara se prozor Expression Builder. U ovom prozoru potrebno je specificirati da vrednost polja ID_Citalac treba da bude jednako vrednosti atributa ID_KNJIGA iz tabele Knjige. Dakle, potrebno je dva puta kliknuti tasterom miša na Forms, zatim Loaded Forms, tj. trenutno otvorene forme, pa izabrati formu Čitaoci, a zatim iz srednje kolone 112

izabrati polje ID_citalac dvostrukim klikom miša, kako bi se ovo sve ispisalo u uslovu, kao što je prikazano na sledećoj slici. Slika 155 Nakon ovog koraka ispisuje se Forms![Citaoci]![ID_Citalac] što označava da se posmatra vrednost upisana u polje ID_Citalac na formi Citaoci. Sada je potrebno postaviti uslov da ova vrednost mora biti jednaka vrednosti atributa ID_Knjiga tabele Knjige, što znači da treba dopisati znak jednakosti (=) ili ga izabrati među ponuđenim. Zatim, potrebno je dvostukim klikom miša izabrati Tables u prvoj koloni, pa izabrati Knjige, a potom dvostrukim klikom miša iz druge kolone izabrati ID_knjige, kao što je prikazano na sledećoj slici. Slika 156 Ovim korakom završava se ispisivanje uslova, koji glasi: Forms![Citaoci]![ID_Citalac] = [Knjige]![ID_Knjiga]. 113

Kliknuti na dugme Ok i sačuvati promene. Ovo novokreirano dugme ne mora imati sličicu na sebi, kao ostali dugmići, već je moguće ispisati tekst npr. prikaži radnu istoriju. Ovo se vrši u Property Sheet prozoru, u podešavanjima vezanim za ovo polje, u tab-u Format. Potrebno je obrisati vrednost u polju Picture gde piše (image) i zatim potvrditi brisanje slike sa ove kontrole, čime de se ispisati vrednost (none), zatim u polje Caption napisati KNJIGE. Ova podešavanja prikazana su na sledećoj slici. Klikom na ovo dugme dobija se: Slika 157 Slika 158 114

Kreiranje dugmeta za pregled izveštaja pre štampanja Kao i na većini izveštaja, na izveštaju Citaoci potrebno je dodati dugme za pregled izveštaja pre štampanja i dugme za štampanje. Dugme se na izveštaj dodaje na isti način kao i kod formi, dakle prvo se izveštaj otvori u Design View, a zatim se iz tab-a Design u okviru Ribbon palete bira Button koji se postavlja na željeno mesto na izveštaju. Kliknuti desnim klikom miša na kreirano dugme i iz pomoćnog menija izabrati opciju Build Event. Tada se otvara pop-up prozor Choose Builder u kojem se bira opcija Macro Builder. U sledeće otvorenom prozoru potrebno je specificirati akciju koja se očekuje klikom na prethodno kreirano dugme. Neka ovo dugme služi za prikaz izveštaja pre štampanja (Print Preview). Dakle, akcija koja treba da se desi je tipa RunCommand koju treba pronaći i izabrati iz padajućeg menija. Tada se u dnu ovog prozora prikazuje mesto za unos konkretne komande (Command) koja treba da se izvrši. Ovde je iz padajućeg menija potrebno izabrati PrintPreview, koja se tada prikazuje u okviru polja kolone Arguments. Ova podešavanja prikazana su na sledećoj slici. Slika 159 Sačuvati izmene i preimenovati naziv dugmeta u npr. pogledaj pre štampanja. Kreiranje dugmeta za štampanje izveštaja Sada je potrebno kreirati još jedno dugme na čiji klik mišem de se štampati izveštaj. Ponoviti isti postupak kao za prethodno dugme, s tom razlikom što je za Command potrebno izabrati Print i preimenovati dugme u, npr. štampaj izveštaj. Postoji još jedna sitnica koju je potrebno podesiti. Ukoliko bi se ovakav izveštaj pustio na štampanje, primetili bi da su se otštampali i dugmići. Kako se oni ne bi videli prilikom štampanja na papiru, potrebno je podesiti sledeće: u Design View, kliknuti desnim tasterom miša na dugme i otvoriti Properties. Iz Format tab-a vrednost polja Display When postaviti na Screen Only. Ovo znači da će dugme biti vidljivo samo na ekranu, a ne i u štampanoj verziji. Print Only znači da je vidljivost samo u štampanoj verziji, a Always i na ekranu i prilikom štampanja. Kreiranje početne forme aplikacije korišćenjem Switchboard Manager-a Početna forma može da se kreira, korišćenjem Switchboard Manager-a. On se pokreće iz palete Ribbon, odnosno tab-a Database Tools, koji je prikazan na sledećoj slici. 115

Slika 160 Prilikom prvog pokretanja Switchboard Manager-a prikazuje se poruka da ne postoji nijedan kreiran Switchboard i postavlja se pitanje da li je potrebno kreirati ga. Kliknuti na Yes. Tada se otvara prozor prikazan na sledećoj slici. Slika 161 Zatim na ovoj strani postavljamo dugmiće koji će otvarati starne: Unos, Pretraga, Izveštaj i Zatvaranje aplikacije. Kliknimo na dugme New, kao na slici. Slika 162 Ostale stranice dodajemo na isti način. Na kraju bi trebalo da se dobije: 116

Slika 163 Dakle, sa prethodne slike uočava se da je kreiran Switchboard pod nazivom Main Switchboard. On predstavlja podrazumevajuću početnu formu, jer je izabran za Default. Njega je moguće izmeniti klikom na Edit, ili obrisati klikom na Delete, a moguće je napraviti novi klikom na New. Kliknuti na Edit. Tada se otvara novi prozor u koji se dodaju stavke ove početne forme, odnosno menija. Pre svega, promeniti naziv forme u, npr. POCETNA STRANA. Ovo je prikazano na sledećoj slici. Slika 164 Klik na dugme Close. Da bi na ovu stranu komandne table dodali dugmad pritisnemo dugme New, otvara se prozor kao na sledećoj slici. Slika 165 U polje Text upisati tekst koji će se pojaviti pored dugmeta, za Command iz padajuće liste izabrati šta treba da se desi biranjem ove stavke, da li da se otvori neka od formi, neki izveštaj i sl. Ova podešavanja prikazana su na sledećoj slici. 117

Slika 166 Na isti način se urade ostali dugmići i na kraju dugme za završetak rada kako je prikazano na sledećoj slici. Slika 167 Pritisnemo dugme Close i vraćamo se na prozor sa stranicama komandne table. 118

Slika 168 Izaberimo stranicu UNOS i da bi radili promene na njoj pritisnemo dugme Edit. Otvara se prozor za dodavanje dugmadi na tu stranicu. Upišimo u polje Text CITAOCI, za akciju se izabere Open Form in Edit Mode i izaberemo da otvara obrazac Citaoci. Postupak ponovimo i za dugmad koja otvaraju ostale obrasce, a za dugme NAZAD, izaberemo da se otvara POCETNA STRANA. Slika 169 119

Slika 170 Ponoviti postupak za stranice PRETRAGA i IZVESTAJI. Nakon kreiranja komandne table u glavnom prozoru baze pojavljuje se novi obrazac Switchboard čijim pokretanjem se dobija: Slika 171 120

Opcija Overlapping Windows, Application Title, Application Icon i Display Form Kada korisnik ove aplikacije otvori nekoliko formi i/ili izveštaja, primeti se da se oni nižu jedno za drugim u tabovima. Ovo se može promeniti na taj način da se svaka forma i izveštaj otvaraju u posebnim prozorima. To se podešava na sledeći način. Kliknuti na Office Button i iz menija, u dnu, izabrati Access Options dugme koje se vidi na sledećoj slici. Slika 172 U novootvorenom prozoru, sa leve strane, izabrati Current Database, a zatim sa desne uključiti opciju Overlapping Windows. U ovom prozoru moguće je još podesiti i naslov aplikacije u polju Application Title i ikonicu aplikacije u polju Application Icon. Takođe, potrebno je podesiti koja forma de se automatski otvarati pri pokretanju ove aplikacije, a to može biti upravo jedna od prethodno kreiranih formi ili Switchboard, koju je potrebno izabrati iz padajuće liste polja Display Form. Ova podešavanja prikazana su na sledećoj slici. Slika 173 121

Kada se ove promene potvrde klikom na dugme OK u dnu, javlja se poruka da je potrebno zatvoriti aplikaciju, kako bi se uočio njihov efekat. Ponovnim otvaranjem aplikacije uočava se njen novi naslov, zatim ikonica, početna forma automatski otvorena, i pojedinačni prozori za svaki otvoren izveštaj i formu, kao što je prikazano na slici u nastavku... Slika 174 Kreiranje Shortcut Menu makroa Kako bi krajnjem korisniku rad u ovoj Access aplikaciji bio dodatno pojednostavljen, moguće je dodati još jedan tip makroa, Shortcut menu, tj. meni sa prečicama. Kao što se moglo primetiti u ovom priručniku, često je korišćena funkcionalnost pomoćnih menija u okviru formi i izveštaja koji su se otvarali klikom desnog tastera mišem. Upravo kreiranje menija tog tipa objašnjeno je u nastavku. Ideja je da se napravi meni za formu Citaoci, koji će se otvarati klikom desnim tasterom miša na ovu formu. Meni treba da ima stavke prikaži celokupan izveštaj, zatim prikaži čitaoce iz... Iz palete Ribbon potrebno je izabrati tab Create, a zatim izabrati Macro, kao što je prikazano na sledećoj slici. Slika 175 Klikom desnim tasterom miša na novootvoreni prozor, otvara se pomoćni meni iz kog treba izabrati Macro names, kao što se vidi na sledećoj slici. 122

Slika 176 Ovako se dodaje još jedna kolona, Macro names, u koju se upisuje naziv stavke u meniju koji se upravo kreira. Dakle, potrebno je prvo upisati prikaži izveštaj kao naziv makroa, zatim za akciju (Action) izabrati OpenReport, jer je izveštaj taj koji treba da se otvori, a dok je kursor miša u polju Action, u donjem delu prozora izabrati Izveštaj. Ovo je prikazano na sledećoj slici. Slika 177 Sledeće, potrebno je napraviti stavku menija pod nazivom prikaži čitaoce iz..., na čiji klik treba da se otvara upit Citaoci. Dakle, za Macro name upisati prikaži Citaoce iz..., za Action izabrati OpenQuery, a zatim izabrati upit Citaoci. U polju Data Mode moguće je specificirati da li da se ovaj upit otvara kao Read Only, ili da bude dozvoljeno ažuriranje podataka u njemu, tj. Edit, ili da bude spreman za unos novih podataka, tj. Add. Neka bude izabrano Read Only. Ovo je prikazano na sledećoj slici. Slika 178 123

I najzad, potrebno je kreirati stavku menija O KNJIGAMA. Dakle, za Macro name upisati O KNJIGAMA, za Action izabrati OpenForm, jer je forma ta koja treba da se otvara, a onda upisati ime te forme u okviru polja Form Name, a to je forma Knjige. Za Data Mode ovaj put treba izabrati Add, jer je potrebno da se forma Knjige otvori spremna za unos nove knjige. Ova podešavanja prikazana su na sledećoj slici. Slika 179 Radi lakšeg razumevanja, ovaj makro sačuvati pod nazivom Stavke menija, međutim nazivi makroa treba da budu smisleniji. Ovim su kreirane samo stavke menija, a ne i sam meni, pa je potrebno kreirati još jedan meni koji će ga predstavljati. Slika 180 Dakle, kreirati novi makro za koji su potrebne samo dve kolone Action i Arguments. Za Action je potrebno iz padajuće liste izabrati AddMenu, a zatim u dnu prozora upisati naziv menija u polje Menu Name, recimo Meni za Biblioteku. Polje Menu Macro Name predstavlja stavke koje će se javljati u ovom meniju, pa je potrebno izabrati prethodno kreiran makro Stavke menija. Sačuvati ovaj makro pod nazivom Meni, opet radi lakšeg razumevanja. Kreiranje ovog makroa prikazano je na sledećoj slici. 124

Slika 181 Ostalo je još da se ovaj meni doda u formu Biblioteka. Otvoriti formu Biblioteka u Design View, i otvoriti Properties. U tab-u Other pronađi polje Shortcut Menu Bar i ukucati naziv makroa koji treba da se poziva, a to je Meni, što je prikazano na sledećoj slici. Slika 182 Sačuvati promene na formi Biblioteka i otvoriti je u Form View. Klikom desnim tasterom miša na bilo koje slobodno mesto na formi, otvara se meni sa tri stavke, što se vidi na sledećoj slici 125

Opcija Event-Timer Interval Slika 183 Za kraj, biće prikazana još jedna zanimljivost. Kreirati jednostavnu malu formu na kojoj će se nalaziti labela sa tekstom: Učitavam podatke.... Otvoriti Properties te forme i iz padajuće liste izabrati podešavanja za Form. Podesiti vrednost polja Border Style na None, zatim vrednost polja Record Selectors i Navigation Buttons na No i vrednost Scroll Bars na Neither. Ova podešavanja prikazana su na sledećoj slici. Slika 184 126

Kada se ova forma otvori u Form View, ona izgleda kao na sledećoj slici. Slika 185 Ponovo otvoriti ovu formu u Design View, a zatim otvoriti Properties. Izabrati podešavanja za formu u padajućoj listi, a zatim otvoriti tab Event. Postaviti kursor miša u polje On Timer i kliknuti na dugmence koje se pojavi na desnoj strani. U novootvorenom prozoru izabrati Macro Builder, a zatim postaviti dve akcije: prvo akciju Close, zatim akciju OpenForm i izabrati formu Biblioteka, što je prikazano na sledećoj slici. Slika 186 Sačuvati promene, pa u tab-u Event podesiti sledeće polje, Timer Interval, na vrednost 1000, što znači jedan sekund. Sačuvati formu pod nazivom Učitavanje podataka. Ova podešavanja označavaju da se jedan sekund nakon otvaranja forme Učitavanje podataka, ona zatvara, a zatim se otvara forma Biblioteka. 127

9. Front-end i back-end baza podataka Bezbednost baze podataka U prethodnih osam poglavlja uspešno je kreirana baza podataka sa korisničkim interfejsom. Korisnički interfejs predstavlja sofisticirani pogled na bazu podataka i namenjen je krajnjim korisnicima. On obuhvata, pre svega, forme i izveštaje koji komuniciraju sa tabelama baze podataka čitajući postojeće podatke iz nje i upisivanjem novih podataka. Krajnji korisnici obično nisu upoznati sa šemom baze podataka, odnosno svojstvima tabela, međusobnim vezama između njih, SQL kodom i sl. Baza podataka, čiji je postupak kreiranja opisan u ovom priručniku, kao takva vrlo je ranjiva, jer se može desiti da krajnji korisnik pristupi specifikaciji tabela i napravi neželje izmene. Zbog ovog i drugih problema, bilo bi dobro na neki način zaštiti bazu podataka, odnosno ograničiti pristup krajnjim korisnicima. Opcija Database Splitter Ono što Microsoft Access 2007 pruža u prilog ovom problemu je opcija Database Splitter, koja se nalazi u tab-u Database Tools pod nazivom Access Database, i prikazana je na sledećoj slici. Slika 187 Ova opcija omogućava sledeće: baza podataka se deli na dva Access fajla - prvi sadrži samo tabele, a drugi sadrži linkove ka tabelama, zatim forme, upite, izveštaje i makroe. Biranjem ove opcije, otvara se prozor prikazan na sledećoj slici. Slika 188 128

U ovom prozoru objašnjena je opcija Database Splitter, odnosno splitovanje, razdvajanje baze podataka. Pre pokretanja Split Database opcije, preporučuje se pravljenje kopije baze podataka, posebno u slučajevima njene velike veličine, jer može da se desi prekid ovog procesa, pri čemu se gube određeni podaci. Važno je napomenuti da ova opcija ne znači da baza, nad kojom se ona poziva, ostaje netaknuta i da se kreiraju nova dva fajla, nego upravo naprotiv. Baza nad kojom se radi razdvajanje ostaje bez tabela, a kreira se jedan dodatni fajl gde se te tabele premeštaju. Dakle, nakon pravljenja kopije baze, kliknuti na dugme Split Database. Tada se otvara prozor prikazan na sledećoj slici. Slika 189 Sa prethodne slike uočava se da je naziv prozora koji se otvorio Create Back-end Database. Dakle, potrebno je dodeliti naziv back-end bazi podataka, odnosno onom fajlu gde će biti smeštene tabele, i snimiti na željeno mesto. Ukoliko je proces razdvajanja baze uspešno završen, javlja se odgovarajuća poruka, što je prikazano na sledećoj slici. Slika 190 Sada je moguće uočiti da trenutno otvorena baza podataka zaista sadrži sve forme, izveštaje, upite i makroe, ali i linkove ka tabelama. Ovi linkovi su obeleženi strelicama, što se vidi i na sledećoj slici. 129

Opcija Display Navigation Pane Slika 191 Kada se otvori back-end fajl ove baze, uočava se da ona, zaista, sadrži samo tabele. Međutim, ono što se može primetiti to je da krajnji korisnici imaju pristup dizajnu korisničkog interfejsa, kao i to da mogu videti koji sve objekti (forme, upiti, izveštaji, makroi) postoje u aplikaciji. Ovi problemi se mogu rešiti na sledeći način. Otvoriti Access Options iz menija koji se pokreće na Access Button. Izabrati karticu Current Database. U delu Navigation potrebno je isključiti opciju Display Navigation Pane, kojom se sakriva prikaz svih objekata. Ova opcija prikazana je na sledećoj slici. Opcija Allow Full Menus Sledeće, potrebno je isključiti stavke menija koji se pokreće klikom na Office button, a zatim i opcije Ribbon palete koje omogućavaju kreiranje novih objekata, uvoz i izvoz, i sl. Ovo se, 130

takođe, podešava u okviru Access Options, u kartici Current Database. Potrebno je isključiti opciju Allow Full Menus, koja se vidi na sledećoj slici. Opcija Allow Default Shortcut Menus Najzad, preostaje sakrivanje shortcut menija. To su pomoćni meniji koji su često spominjani u ovom priručniku, a pokreću se klikom desnog tastera miša na željeni objekat (formu, izveštaj, tabelu, upit, makro), čime se može pristupiti istom u Design View, Layout View i drugim opcijama. Sakrivanje Default Shortcut Menus vrši se, takođe, u Access Options i kartici Current Database, gde je potrebno isključiti opciju Allow Default Shortcut Menus, što je prikazano na sledećoj slici. Slika 192 Nakon svih ovih izmena i klikom na dugme OK, javiće se poruka da je potrebno zatvoriti bazu podataka kako bi se uočio njihov efekat. Sakriveni detalji mogu se ponovo otkriti klikom na strelicu prikazanu na sledećoj slici, a zatim biranjem opcije More Commands... gde se isključene opcije ponovo uključuju. Slika 193 131

10. Enkripcija baze podataka Još jedan detalj može doprineti zaštiti od neželjenih pristupa, a to je enkripcija. Enkripcija podrazumeva postavljanje pristupne lozinke bazi podataka. Proces postavljanja lozinke počinje otvaranjem baze podataka u Exclusive modu i potrebno je da opcija Allow Full Menus bude uključena (Office Button -> Access Options -> Current Database -> Allow Full Menus). To znači da je potrebno otvoriti ili novi Access 2007 fajl, ili postojeći zatvoriti klikom na dugme Close Database. Zatim, iz istog menija, izabrati opciju Open i pronađi željeni fajl i označiti ga, a to je back-end baza podataka, tj. onaj fajl koji sadrži samo tabele. Nakon toga, umesto da se odmah klikne na dugme Open, potrebno je kliknuti na strelicu pored tog dugmeta i izabrati opciju Open Exclusive. Ovo se vidi na sledećoj slici. Slika 194 Pošto je baza podataka otvorena u Exclusive modu, moguće je postaviti lozinku. Iz tab-a Database Tools izabrati opciju Encrypt with Password, koja se vidi na sledećoj slici. Slika 195 132

Otvara se prozor za unos nove lozinke i njenu potvrdu. Nakon zadate lozinke, baza podataka, u ovom slučaju back-end, zaštićena je lozinkom koju treba uneti pri svakom pokretanju aplikacije. Nakon što je lozinka postavljena za back-end bazu, front-end baza neće moći da funkcioniše, jer ona sadrži linkove ka tabelama kojima pokušava da pristupi bez lozinke. Dakle, potrebno je ponovo linkovati tabele. Ovo znači da u front-end bazi prvo treba obrisati postojeće linkove ka tabelama. Nakon njihovog brisanja, sledi kreiranje novih linkova biranjem tab-a External Data. U okviru ovog tab-a bira se tip fajla iz kojeg je potrebno uvesti, tj. importovati podatke (import), što znači da treba izabrati Access, jer se vrši povezivanje sa postojedim Access fajlom. Ovo je prikazano na sledećoj slici. Slika 196 U novootvorenom prozoru postavlja se pitanje da li je potrebno uraditi import, tj. uvoz podataka ili samo linkovanje, tj. povezivanje. Naravno, potrebno je izabrati drugu opciju, tj. povezivanje. Ovaj prozor prikazan je na sledećoj slici. Slika 197 Nakon toga, u istom prozoru kliknuti na dugme Browse i pronađi odgovarajuću back-end bazu podataka. Kliknuti na dugme OK. U narednom prozoru očekuje se unos lozinke koja je 133

dodeljena back-end bazi. Nakon unosa validne lozinke, prikazuju se tabele, i eventualno drugi Access objekti (forme, izveštaji, makroi, upiti,...), pri čemu je potrebno označiti, tj. selektovati sve tabele klikom na dugme Select All, što se vidi na sledećoj slici Slika 198 Kliknuti na dugme OK za početak povezivanja. Ovim korakom ponovo je uspostavljena veza između back-end baze podataka, koja je sada zaštićena lozinkom, i front-end baze. Import i export podataka i objekata baze podataka U bazu podataka moguće je importovati ne samo tabele ili linkove ka tabelama iz druge baze, već i forme, upite, izveštaje i makroe. Postupak importovanja tabela, formi, izveštaja, upita i makroa, razlikuje se od linkovanja tabela iz druge Access baze samo po tome što je u prvom prozoru potrebno izabrati opciju za Import, a ne za Link. Dekripcija baze podataka Proces suprotan postavljanju lozinke, tj. enkripciji, naziva se dekripcija (decrypt). Dekripcija, tj. uklanjanje lozinke je moguće, takođe, isključivo kada se baza otvori u Exclusive modu, a zatim se iz tab-a Database Tools bira Decrypt Database. 134