BAZE PODATAKA pr of . dr Predrag St aniši Prirodno-matematiki fakultet
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 1/233
BAZE PODATAKA
prof. dr Predrag Staniši
Prirodno-matematiki fakultet
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 2/233
DIO I
UVOD I OSNOVNI
POJMOVI
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 3/233
Nastanak i cilj DBMS
• Baza podataka (database) je kolekcija logikipovezanih podataka, ukljuujui i podatke o tim
podacima, koja je dizajnirana da zadovoljiinformacione potrebe neke organizacije.
• Pojam nastao šezdesetih godina kao posljedicavelikih problema koji su postojali utradicionalnom pristupu razvoju softverskih
sistema za uvanje podataka i njihovu obradu.• Tradicionalni pristup se zasnivao na tome da senapravi jedan ili više fajlova koji služe za uvanjepodataka a zatim pišu aplikacije koje rade sa timfajlovima.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 4/233
Nedostaci tradicionalnog pristupa
• Definicija podataka se u suštini nalazi usamim programima
• Podaci nemaju jasnu strukturu
• Ne postoji nikakva kontrola nad pristupom imanipulacijom podacima, izuzev one koja
se nalazi u samim programima.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 5/233
Nedostaci tradicionalnog pristupa
• Ponavljanje i nekonzistentnost podataka.• Teškoe u pristupu podacima.
• Izolacija podataka.
• Slaba mogunost oporavka od kvara.
• Problemi pri višekorisnikom radu.
• Loša bezbjednost od neovlašenog pristupa.• Teško je održavati integritet podataka.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 6/233
Nedostaci tradicionalnog pristupa
• Rezultat je potencijalna ogromna složenost iloša struktura sistema, velika složenost ilinemogunost izmjena u sistemu, mogua
nekonzistentnost podataka, problemi uvišekorisnikom radu, teškoe u dobijanjupotrebne informacije, itd.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 7/233
Kako riješiti ove probleme?
• Došlo se do zakljuka da se podaci morajurazdvojiti od programa koji rade sa njima, da im se
mora obezbijediti jasna struktura koja se možedopunjavati, sa minimalnim moguimponavljanjem podataka.
• Takoe, postalo je jasno da mora postojatiuniforman nain pristupa tim podacima, koji neeizazivati probleme u radu i koji e uvatikonzistentnost podataka.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 8/233
DBMS
• Za efikasno ispunjenje ovih zadataka, kao imnogih drugih, mora se koristiti posebansoftverski sistem. Takav skup programa je
SISTEM ZA UPRAVLJANJEBAZAMA PODATAKA
ili
DATABASE MANAGEMENT SYSTEM
(DBMS).
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 9/233
Klijent/Server arhitektura
Bazapodataka
Sistem za upravljanjebazama podataka
Klijent Klijent Klijent
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 10/233
Nivoi apstrakcije
• Bazu podataka možemo posmatrati na trinivoa apstrakcije (tzv. ANSI\SPARCarhitektura):
– FIZIKI NIVO
– LOGIKI NIVO
– NIVO POGLEDA
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 11/233
Nivoi apstrakcije
Fiziki nivo
Logiki nivo
Nivo pogleda
Pogled 1 Pogled 2 Pogled n...
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 12/233
Instanca i shema
• Ukupna informacija uskladištena u bazi podatakau odreenom vremenskom trenutku jeINSTANCA baze podataka.
• Dizajn, tj. opšta struktura baze podataka naziva seSHEMOM (ili šemom) baze podataka.
• Baza podataka tipino ima:• JEDNU FIZIKU SHEMU;
• JEDNU LOGIKU SHEMU;
• NEKOLIKO PODSHEMA.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 13/233
Nezavisnost podataka
• Mogunost promjene sheme na jednom nivou, bezmijenjanja sheme na sledeem višem nivou.
– FIZI
KA NEZAVISNOST (promjena fizike shemene odražava se na logiku)
– LOGIKA NEZAVISNOST (promjena logikesheme ne odražava se na podsheme niti na korisnikeprograme) – teže je ostvariti.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 14/233
Modeli podataka
• Model podataka je skup konceptualnih alata zadefinisanje podataka, veza meu podacima,znaenja podataka i ogranienja na podacima.
• Postoje razni modeli podataka:– Hijerarhijski model– Mrežni model– Model entiteti/veze
– Relacioni model– Objektno-orijentisani modeli mnogi drugi
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 15/233
Vrste modela
• LOGI
KI MODELI ZASNOVANI NAOBJEKTIMA
• LOGIKI MODELI ZASNOVANI NAREKORDIMA (ZAPISIMA,SLOGOVIMA)
• FIZIKI MODELI
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 16/233
Jezici baza podataka• DBMS sadrži
– jezik koji služi za definisanje baze podataka (datadefinition language DDL)
– jezik za manipulaciju podacima
(data manipulation language DML)– jezik za kontrolu sistema
(data control language DCL)
– esto i viši programski jezik, integrisan sa DML iDDL.
– Ponekad se izdvajaju djelovi, npr. DSL, VDL.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 17/233
Manipulacija podacima
• Skladištenje podataka
• Brisanje podataka
• Mijenjanje podataka• Izvlaenje podataka (upit, engl. query).
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 18/233
Upitni jezik
• Nekorektno,itav DML a ponekad i DDL iDCL nazivaju se UPITNIM JEZIKOM
(query language).
• Primjeri:– SQL (Structured Query Language)
– QBE (Query By Example)
– QUEL
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 19/233
Upravljanje transakcijama• Transakcija je kolekcija operacija koja se izvodi kao
jedna logika funkcija.• ACID svojstva
– Atominost (sve ili ništa)
– Konzistentnost (uva integritet baze)– Izolacija (ostale ne vide njene efekte, do završetka)– Trajnost (nakon završetka i ako se sruši sistem, njene
promjene su trajne)• Transakcijama upravlja komponenta DBMSUPRAVLJA TRANSAKCIJAMA(transaction manager)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 20/233
Upravljanje skladištenjem• Fiziki detalji su zadatak sistema, korisnici rade na
višim nivoima apstrakcije.• UPRAVLJA SKLADIŠTENJEM (storage manager) je
komponenta sistema odgovorna za izvršavanje DDL i
DML reenica, tj. za njihovo prevoenje u niz naredbifajl sistemu, uz odgovarajue upravljanje memorijom.
• Mora biti EFIKASAN u pogledu brzine i prostora.
• UPRAVLJANJE FAJLOVIMA (na disku)
• UPRAVLJANJE BAFEROM (prenos disk-memorija)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 21/233
DBA
• Database administrator (administrator bazepodataka)– Definisanje i modifikovanje sheme
– Definisanje i modifikovanje detalja skladištenja imetoda pristupa podacima
– Definisanje i modifikovanje integriteta
– Davanje prava pristupa bazi
– Arhiviranje podataka, uvoz, izvoz, replikacija.– Nadgledanje i podešavanje performansi sistema.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 22/233
Korisnici• Aplikativni programeri (koriste DML u
svojim programima)• Specijalizovani korisnici (koriste DBMS kao
osnovu za razvoj drugih sistema, npr. CAD)
• Sofisticirani korisnici (direktno se obraajusistemi sa upitom)
• Naivni (krajnji korisnici)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 23/233
Data dictionary ili catalogStatistika, indeksi• Data dictionary (renik podataka) ili catalog
(sistemski katalog) sadrži metapodatke, tj. podatkeo podacima.
• Obino se metapodaci uvaju na slian nain kao isami podaci.
• Sistem uva i– STATISTIKU o podacima,– INDEKSE (strukture podataka koje omoguuju brz
pristup osnovnim podacima)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 24/233
Izvršavanje upita
• OBRAIVA UPITA (query processor)komponenta koja analizira i izvršava upite.
• IZVŠILAC UPITA (query evaluationengine) - dio za samo izvršavanje upita,komunicira sa upravljaem skladištenjem.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 25/233
Izvršavanje upita• DDL INTERPRETER sa drugim komponentama
izvršava reenice DDL-a i smješta metapodatke ukatalog.
• DML KOMPAJLER prevodi reenice DML-a uneku pogodnu unutrašnju formu
• OPTIMIZATOR UPITA analizira upit i tražinajbolji nain za njegovo izvršavanje, korišenjemkataloga, indeksa, statistike, ...
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 26/233
Arhitektura DBMSNaivni korisnici korisnic
DBMS
disk
Fajlovi podataka
Indeksi Statistiki podaci
Katalog
Obraiva upita
Upravljanje baferom
Upravljanje fajlovima
Upravljanjetransakcijama
DDLinterpreter
DML kompajler
Izvršilac upita
Upravlja skladiš-tenjem
Interfejsi aplikacija
DMLprekompajler
Sofisticiranikorisnici DBAAplikativniprogrameri
UPITIApl. programi
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 27/233
Komercijalni sistemi• 'Ozbiljni', 'industrijski' DBMS kao što su
– Oracle– SQL Server– Informix
– IBM DB2– Sybase
• Postoje i stoni (desktop) DBMS, kao
– Microsoft Access– Microsoft Fox Pro– Borland dBase– Interbase
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 28/233
DIO II
E/R MODEL
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 29/233
Model Eniteti/Veze(Entity/Relationship ili E/R)
• Visokog nivoa, dobar za logikoprojektovanje baze podataka
• Zbog previsokog nivoa apstrakcije nije
pogodan za konkretnu realizaciju• Dobra dijagramska tehnika
• Dobro definiše logiku strukturu podataka• Lako se prevodi u relacioni model
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 30/233
E/R nije model podataka!• Model podataka treba da sadrži
– STRUKTURNI dio– INTEGRITETNI dio
– MANIPULATIVNI dio
• E/R model sadrži– Strukturni dio
– U maloj mjeri integritetni dio
• E/R model i nije model podataka u pravom smislu,nego sredstvo za logiko projektovanje!
• Ponekad se smatra tankim slojem iznad relacionog
modela
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 31/233
Model eniteti/veze
• ATRIBUT
• SKUP ENTITETA
• SKUP VEZA
• LINIJE
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 32/233
Entitet, Skup entiteta• ENTITET - objekat koji postoji i koji se
razlikuje od drugih objekata.
• SKUP ENTITETA - entiteti se grupišu uskupove. Npr. skup entiteta OVJEK, sadržientitete koji predstavljaju konkretne ljude.
• Skup entiteta karakteriše se skupomATRIBUTA.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 33/233
Atribut, Domen atributa• ATRIBUT se definiše na skupu entetita. Formalno,
atribut je preslikavanje skupa entiteta u neki skup
vrijednosti (DOMEN ATRIBUTA).
• Skup entiteta OVJEK karakterišu atributi IME,
PREZIME, GODINA_ROENJA, BOJA_KOSE, itd.
• Domen atributa IME je skup koji sadrži nizove znakova
dužine do 30.
• Domen atributa GODINA_ROENJA je skup
prirodnih brojeva.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 34/233
Vrijednost atributa• Npr. atribut IME nekom enitetu iz skupa OVJEK
pridružuje vrijednost ‘Marko’; nekom drugomvrijednost ‘Janko’
• VRIJEDNOST ATRIBUTA ZA ENITET jeelement iz domena atributa koji atribut pridružujetom entitetu.
• Entitet iz skupa eniteta u potpunosti je opisan
vrijednostima atributa!
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 35/233
Vrijednosti atributa opisuju entitet• Vrijednostima
‘Marko’, ‘Markovi’, 1950, ‘Crna’
atributa
IME, PREZIME, GODINA_ROENJA, BOJA_KOSE
odreen je jedan konkretni entitet iz skupa entiteta
OVJEK.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 36/233
Entitet, atributi i skup entiteta
STUDENT
IMEBR_INDEKSA PREZIME
Entiteti:
e1 (12/2002, Marko, Markovi)
e2 (11/2001, Janko, Jankovi)
STUDENT je skup entiteta
e1
e2
Dijagram:
BR_INDEKSA, IME i PREZIME su ATRIBUTI
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 37/233
Prosti i složeni atributi
• Prosti atributi – vrijednosti su atomine,cjeline, ne sadrže djelove
• Složeni
GRAD
STUDENT
ULICA BROJ
ADRESA
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 38/233
Jednoznani i višeznani atributi• Jednoznani atribut – entitetu se pridružuje
samo jedna vrijednost iz domena• Višeznani – više vrijednosti iz domena
STUDENT
PROSJEKTELEFON
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 39/233
Kompleksni atributi• Atributi u principu mogu biti proizvoljne složenosti,
mogu kombinovati složenost, višeznanost, jednoznanost, ...
• Svaku složenost atributa treba izbjegavati jer se istomože predstaviti na druge naine, npr. putem veza.
• Ako je cilj prevoenje u relacioni model najbolje jekoristiti samo jednoznane proste atribute!
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 40/233
Skladišteni i izvedeni atributi• Skladišteni atribut – vrijednost atributa za
entitete se skladišti u bazi• Izvedeni – vrijednost atributa se izraunava
STUDENT
DATUM UPISATRAJANJESTUDIRANJA
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 41/233
NULL vrijednost• Specijalna vrijednost atributa, koja znai
NEPOZNATO, NEODREENO
• Za entitet e1 iz skupa entiteta OVJEK, atribut
BOJA_KOSE može imati konkretnu vrijednost aza entitet e2 može biti NULL.
e1(Marko, Markovi, 1950,’Crna’)e2(Janko, Jankovi, 1952, NULL)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 42/233
Primarni klju skupa eniteta• SUPERKLJU skupa entiteta je skup atributa ije
vrijednosti jednoznano identifikuju entitet uskupu entiteta.
• KANDIDATSKI KLJU skupa entiteta jesuperklju koji ne sadrži pravi podskup koji jesuperklju.
• PRIMARNI KLJU je jedan izabranikandidatski klju.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 43/233
Kljuevi• Za skup entiteta STUDENT superkljuevi su npr.
– {BR_INDEKSA, FAKULTET, ADRESA_STUDENTA}
– {BR_INDEKSA, JMBG}– {BR_INDEKSA, FAKULTET}– {JMBG}.
• {BR_INDEKSA, FAKULTET} i {JMBG} sukandidatski kljuevi
• Primarni klju je, recimo, {JMBG}.
• Za skup entiteta BOLNICA primarni klju je
{IME_BOLNICE, GRAD}.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 44/233
Primarni klju
BOLNICA
GRADIME_BOLNICE BROJ_ZAPOSL
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 45/233
Veza, Skup veza• Veza je asocijacija, odnos izmeu nekoliko
entiteta.• Na primjer, možemo definisati vezu izmeuprofesora Markovi i predmeta Matematika.
• SKUP VEZA je matematiki skup veza istog tipa.Na primjer,
Markovi-MatematikaPetrovi-Fizika Jankovi-Matematika
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 46/233
Skup veza• Formalno, skup veza R je matematika relacija
izmeu skupova entiteta E1, E2, ..., En.
• Dakle, to je skup n-torki oblika (e1,e2,...en), gdje jeei entitet iz skupa Ei.
}...,,,),...,,{( 221121 nnn E eE eE eeee R ∈∈∈=
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 47/233
Veza, Skup veza
e1
e2
e3
e4
b1
b2
b3b4
b5
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 48/233
Dijagram za skup veza
STUDENT
IMEBR_IND PREZIME
PREDMET
NAZIV
PRIJAVA
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 49/233
ULOGA
STUDENT
IMEBR_IND PREZIME
PREDMET
NAZIV
PRIJAVA
• Skup entiteta UESTVUJE (participira) u skupu veza.
• ULOGA je funkcija koju entitet igra u vezi
• Student ‘polaže’ predmet, predmet je ‘položen’ od studenta.
polaže položen
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 50/233
Tipovi veza• Postoji 4 osnovna tipa veza meu entitetima
– One-to-One (jedan u jedan)
– One-to-Many (jedan u više)– Many-to-One (više u jedan)
– Many-to-Many (više u više)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 51/233
Veza One-to-One (jedan u jedan)e1
e2
e3
e4
b1b2
b3
b5
Dijagram
Profesor Predmetpredaje
A B Jednom entitetu izA odgovara 0 ili 1
entiteta iz Bi
jednom entitetu iz
B odgovara 0 ili 1entiteta iz A
b4
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 52/233
Veza One-to-Many (jedan u više)e1
e2
e4
b1
b2
b3
b4
Dijagram
Profesor Predmetpredaje
Jednom entitetu izA odgovara 0 ili
više entiteta iz Bi
jednom entitetu iz
B odgovara 0 ili 1entiteta iz Ab5
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 53/233
Veza Many-to-One (više u jedan)e1
e2
e3
e4
b1
b2
b3
Dijagram
Profesor Predmetpredaje
Jednom entitetu izA odgovara 0 ili 1
entiteta iz Bi
jednom entitetu iz
B odgovara 0 iliviše entiteta iz A
b4
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 54/233
Veza Many-to-Many (više u više)e1
e2
e3
e4
b1
b2
b3
b4
Dijagram
Profesor Predmetpredaje
Jednom entitetu izA odgovara 0 ili
više entiteta iz Bi
jednom entitetu iz
B odgovara 0 iliviše entiteta iz Ae5
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 55/233
Primarni klju skupa veza• Potreban je mehanizam za identifikaciju konkretne veze uskupu veza.
• KLJU SKUPA VEZA je unija primarnih kljueva skupovaentiteta koji uestvuju u vezi. Primarni klju skupa veza
PREDAJE je {ime_profesora, naziv_predmeta}.
• Za veze tipa Jedan-u-Više i Više-u-Jedan, dovoljno je uzeti
primarni klju Više strane
• Za veze tipa Jedan-u-Jedan dovoljno je uzeti primarni klju
jedne strane
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 56/233
Opšta kardinalnost veza• Kardinalnost preslikavanja iz skupa entiteta
E1 u skup entiteta E2 je par (D, G) kojioznaava da je jedan entitet iz E2 u vezi sa
minimalno D a maksimalno G entitetaskupa E1.
Zaposleni Firmazaposlenje(0,M) (1,2)
Dijagrami sa opštom kardinalnošu
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 57/233
Dijagrami sa opštom kardinalnošu
• Jedan u jedan Profesor Predmetpredaje(0,1) (0,1)
• Jedan u višeProfesor predaje
(0,1) (0,M)
• Više u jedan Profesor predaje(0,M) (0,1)
• Više u više Profesor predaje(0,M) (0,M)
Predmet
Predmet
Predmet
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 58/233
Totalna i parcijalna participacija• Skup entiteta E može participirati u skupu
veza R– TOTALNO – svaki entitet iz skupa E mora bar
jednom uestvovati u skupu veza.
– PARCIJALNO – može postojati entitet izskupa E koji ne uestvuje u skupu veza.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 59/233
Totalno ueše u skupu veza• Ueše je totalno kada je D=1 na suprotnoj strani!
• Drugi naziv ZAVISNOST POSTOJANJA.• Svaki zaposleni je u vezi sa bar jednom firmom
Zaposleni Firmazaposlenje(1,2)(0,M)
Dvije linije, oznaka totalnog ueša
Zaposleni Firma(1,2)(0,M)zaposlenje
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 60/233
Slabi i jaki skupovi entiteta• JAKI ili REGULARNI skup entiteta je onaj koji ima
kljune atribute
• SLABI ili PODREENI skup entiteta je onaj koji
nema klju. Entiteti u takvom skupu se identifikujutako što se povezuju sa entitetom iz nekog jakog skupaentiteta – NADREENOG skupa entiteta.
• Za vezu koja identifikuje entitete iz slabog skupakažemo da je IDENTIFIKUJUA.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 61/233
Slabi ili zavisni entitet
ŽIRO RAUN
VLASNIKBR_RAUNA
UPLATABR_UPLATE
Slabi entitetuvijek totalnouestvuje u
identifikujuojvezi!IZNOS
Diskriminator slabog skupa
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 62/233
Diskriminator slabog skupaentiteta
• Diskriminator slabog skupa entiteta je skupatributa ije vrijednosti jednoznanoidentifikuju entitet u skupu onih entiteta koji
zavise od jednog jakog entiteta.
• BR_UPLATE je diskriminator.
• Primarni klju slabog skupa entiteta = primarni
klju jakog skupa entiteta + diskriminator.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 63/233
Totalno ueše i zavisnost postojanja
• Slabi entitet uvijek totalno uestvuje uidentifikujuoj vezi!
• Postoji totalno ueše i ako se ne radi oslabom skupu entiteta. Na primjer,ZAPOSLENI ima svoj klju ali totalno
uestvuje u vezi sa firmom!
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 64/233
Atributi veza
Profesor Predmetpredaje
Broj asova
• Atributi veza imaju smisla samo kod veza tipa VIŠE UVIŠE.
• Kod veza tipa Jedan u Više i Više u Jedan uvijek se
mogu prikazati kao atribut entiteta na VIŠE strani.
•Kod veza tipa Jedan u Jedan mogu se prikazati kaoatribut na bilo kojoj strani.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 65/233
Veze tri i više skupova entitetaFilijala KlijentBRK
Raun
• MOGU SE PREDSTAVITI PREKO BINARNIH VEZA(ŠTO NIJE UVIJEK NAJBOLJE!)
Filijala Klijent
Raun
T
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 66/233
Prošireni E/R model
• Specijalizacija/Generalizacija
• Agregacija
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 67/233
Specijalizacija/Generalizacija
Štedni raun
Raun
Broj Stanje
IS A
Žiro raun
Limit Kamata
IS A
Standardni Zlatni
Bonus
Skupovi entiteta nižeg
nivoa nasljeuju sveatribute entiteta višegnivoa
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 68/233
Tipovi specijalizacije• Definisana po atributu višeg skupa entiteta.
Ako je VRSTA_RAUNA• ‘Štedni’ - entitet je u skupu entiteta ŠTEDNI_RAUN
• ‘Žiro’ - entitet je u skupu entiteta ŽIRO_RAUN
• Definisana od strane korisnika za svaki entitet
– Npr. ZAPOSLENI i 3 tima zaposlenih A, B, C.Korisnik odluuje kada neki zaposleni ide u neki tim.
Disjunktna i preklapajua
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 69/233
Disjunktna i preklapajuaspecijalizacija/generalizacija
• DISJUNKTNA (disjoint) - entitet može
pripadati najviše jednom nižem skupu entiteta.Na primjer, raun je ili štedni ili žiro, ne može i
jedno i drugo.
• PREKLAPAJUA (overlapping) - entitet možepripadati više nego jednom nižem skupuentiteta. Na primjer, zaposleni može biti lanviše od jednog tima zaposlenih.
Totalna i parcijalna
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 70/233
Totalna i parcijalnaspecijalizacija/generalizacija
• TOTALNA (total) - svaki entitet mora pripadatibar jednom nižem skupu entiteta. Na primjer,raun mora biti ili štedni ili žiro. Ne može
postojati raun koji nije ni štedni ni žiro.
• PARCIJALNA (partial) entitet ne mora pripadati
nijednom nižem skupu entiteta. Na primjer,zaposleni ne mora biti lan nijednog timazaposlenih.
Ogranienja na
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 71/233
specijalizaciju-generalizaciju
d
d
o
o
Disjunktna
Parcijalna
Preklapajua
Totalna
Preklapajua
Parcijalna
DisjunktnaTotalna
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 72/233
Agregacija• Nedostatak osnovnog E/R modela je što ne
postoje veze izmeu veza.• AGREGACIJA dozvoljava da se veza
pomatra kao entitet višeg nivoa
Klijent Zajampozajmljivanje
Službenik
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 73/233
Primjer. Studentska službaIZNOSGODINA DATUM
PROFESOR PREDMETPREDAJE
IME PREZIME
ZVANJE
NAZIV
POLAGANJE
DATUMSTUDENT
BR_IND
IME OCJENA
UPLATAŠKOLARINE
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 74/233
DIO III
RELACIONI MODEL
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 75/233
Relacioni model• Osnovni koncepti
– Domen
– Atribut
– Relacija– Primarni klju
– Spoljašnji klju
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 76/233
Relacioni model– Domen – ili tip podataka (data type) je skup
vrijednosti i dozvoljene operacije na tom skupu.Primjeri domena:• Cijeli broj• Realni broj
• String• Datum
Svi domeni u relacionom modelu su prosti
Atribut je imenovani domen. Primjeri atributa:• Godina_roenja je cijeli broj.• Plata je realni broj.• Ime je string dužine 20
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 77/233
Relacioni model• Relaciona shema je skup atributa.
student(broj_indeksa, ime, prezime)
• Relacija na relacionoj shemi r(A1,A2,...) jeskup torki oblika (v1,v2,...) gdje je vivrijednost iz domena Ai.
Atributi
Relacionashema
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 78/233
Relacija ili tabelaRadnik
20001971Vesko Veskovi
21231976Petar Petrovi18001975Janko Jankovi
20001975Marko Markovi
PlataGod_roenjaIme
Naziv relacije Atributi ili kolone
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 79/233
Relacioni model• Domeni svih atributa su prosti.
• Redosled kolona (atributa) nije bitan.
• Redosled vrsta (torki) nije bitan.
• Nema duplikata torki (mada SQL ovo narušava!)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 80/233
NULL vrijednosti• Osim vrijednosti iz domena atribut može
imati i specijalnu vrijednost NULL kojaznai nepoznato, neodreeno.
Radnik
2000NULLVesko Veskovi21231976Petar Petrovi
18001975Janko Jankovi
20001975Marko Markovi
PlataGod_roenjaIme
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 81/233
Kandidatski klju• Kandidatski klju relacije je skup atributa te
relacije za koji važe sledea svojstva:– Jedinstvenost. Ne postoje dvije torke relacije koje imaju
iste vrijednosti na tom skupu atributa.
– Minimalnost. Ne postoji dio tog skupa atributa koji imasvojstvo jedinstvenosti.
• Kandidatski klju ne može sadržati NULLvrijednosti!
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 82/233
Primarni klju• Primarni klju relacije je jedan (izabrani)
kandidatski klju te relacije. Radnik(ime, prezime, adresa, grad, JMBG, plata)
Kandidatski kljuevi su{ime, prezime, adresa, grad}
{JMBG}
Za primarni klju možemo izabrati bilo koji odnjih, na primjer {JMBG}.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 83/233
Spoljašnji klju• Spoljašnji klju relacije r1 je skup atributa
(oznaimo ga sa FK) te relacije za koji važi:1. Postoji relacija r2 (r1 i r2 ne moraju biti razliiti) koja
ima kandidatski klju CK.
2. Svaka vrijednost FK u r1 je ili kompletno NULL iliidentina sa vrijednošu CK na nekoj torki iz r2.
• Spoljašnji klju se vezuje za pojamreferencijalnog integriteta.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 84/233
Spoljašnji klju
Radnik
NULL1971Vesko Veskovi
A1976Petar PetroviB1975Janko Jankovi
A1975Marko Markovi
Odjelj_IDGod_roIme
Odjeljenje
C
BA
Odjelj_ID
Obezbjeenje
FinansijskoKadrovsko
Naziv odjeljenjaKandidatskiklju
Spoljašnjiklju
Prevoenje E/R modela u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 85/233
relacioni• Jaki skupovi enititeta se direktno prevode
u relacije. Primarni klju entiteta je primarniklju relacije.
BOLNICA
GRADIME_BOLNICEBROJ_ZAPOSL
BOLNICA(IME_BOLNICE, GRAD, BROJ_ZAPOSL)
Primarni klju je {IME_BOLNICE, GRAD}
Prevoenje veza tipa
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 86/233
One-to-Many i ny-to-One• Veze One-to-Many i Many-to-One se prevode
tako što se u entitet na Many strani doda spoljašnjiklju koji ukazuje na primarni klju One strane.
Predmet(Naziv) , primarni klju je {Naziv}
Profesor(Ime, Zvanje, Naziv) , primarni klju je {Ime},
{Naziv} je spoljašnji klju na relaciju Predmet
Profesor Predmetpredaje
Ime ZvanjeNaziv
Prevoenje veza tipa
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 87/233
One-to-Many i ny-to-One
Predmet(Naziv, Ime) , primarni klju je {Naziv}
{Ime} je spoljašnji klju na relaciju Profesor
Profesor(Ime, Zvanje) , primarni klju je {Ime}
Profesor Predmetpredaje
Ime ZvanjeNaziv
Prevoenje veza tipa
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 88/233
ny-to-Many• Veze Many-to-Many se prevode tako što se
napravi nova relacija za koju važi– Relacija sadrži atribute veze.
– Njen primarni klju je unija primarnih kljueva relacija
koje uestvuju u vezi.– Atributi nove relacije, koji nastali iz primarnog kljua
neke relacije koja uestvuje u vezi, predstavljajuspoljašnji klju na tu relaciju.
Prevoenje veza tipa
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 89/233
ny-to-Many
Predmet(Naziv) , primarni klju je {Naziv}
Profesor(Ime, Zvanje) , primarni klju je {Ime}
Predaje(Naziv, Ime , Datum) , primarni klju je {Naziv, Ime}
{Naziv} je spoljašnji klju na relaciju Predmet
{Ime} je spoljašnji klju na relaciju Profesor
Profesor Predmetpredaje
Ime ZvanjeNazivDatum
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 90/233
Prevoenje slabog entitetaSlabi entitet se prevodi u relacioni model tako što se
napravi nova relacija za koju važi– Relacija sadrži sve atribute slabog entiteta i primarni
klju jakog.
– Njen primarni klju je unija primarnog kljua jakogentiteta i diskriminatora.
– Atributi nove relacije, koji su nastali iz primarnogkljua jakog entiteta, predstavljaju spoljašnji klju na
relaciju nastalu iz jakog entiteta.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 91/233
Prevoenje slabog entiteta
ŽiroRa un(Br_ra una) , primarni klju je {Br_rauna}
Uplata(Br_ra una,Br_uplate, Datum) ,
primarni klju je {Br_rauna, Br_uplate}
{Br_rauna} je spoljašnji klju na relaciju ŽiroRa un
ŽIRO RAUN
VLASNIKBR_RAUNA
UPLATABR_UPLATE DATUM
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 92/233
Veze One-To-One• Veze tipa One-To-One su rijetke jer se takva
informacija naješe predstavlja zajedno (jednimentitetom) ili vezom One-To-Many ili Many-To-One.
• Kada treba izdvojiti podskup iz nekog skupaentiteta umjesto veze One-To-One naješe sekoristi zavisni entitet bez diskriminatora, tj. tabela
iji je primarni klju istovremeno i spoljašnji!
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 93/233
Veze One-to-One
STUDENT (BR_INDEKSA) , primarni klju je { BR_INDEKSA}
DOBRI_STUDENT (BR_INDEKSA, NAGRADA) ,
primarni klju je { BR_INDEKSA}
{ BR_INDEKSA} je spoljašnji klju na relaciju STUDENT
STUDENT
PROSJEKBR_INDEKSA
DOBRI_STUDENTI NAGRADA
P j š ih k di l i
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 94/233
Prevoenje opštih kardinalosti• U opštem sluaju pomou trigera
(TRIGGER) i uslova integriteta(CONSTRAINT)
• Ako je ueše skupa entiteta u skupu vezatotalno, tj. ako je na suprotnoj strani D=1,tada treba staviti na atribute spoljašnjegkljua NOT NULL.
P j š ih k di l i
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 95/233
Prevoenje opštih kardinalosti
FIRMA (IME_FIRME) , primarni klju je { IME_FIRME}
ZAPOSLENI (SIFRA, IME_FIRME) ,
primarni klju je {SIFRA}
{ IME_FIRME} je spoljašnji klju na relaciju FIRMA
IME_FIRME NOT NULL
Zaposleni Firmazaposlenje(1,2)(0,M)
Prevoenje
S ij li ij /G li ij
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 96/233
Specijalizacije/Generalizacije• Viši skup entiteta se prevodi direktno –
napravi se tabela• Za svaki niži napravi se tabela koja sadrži
– Primarni klju višeg skupa entiteta (koji je i uovoj tabeli primarni klju)
– Primarni klju je istovremeno i spoljašnji klju
na tabelu nastalu od višeg skupa entiteta.– Sve dodatne atribute nižeg skupa entiteta.
S ij li ij /G li ij
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 97/233
Specijalizacija/Generalizacija
Štedni raun
Raun
Broj Stanje
IS A
Žiro raun
Limit Kamata
RA UN(BROJ, STANJE) , klju je { BROJ }
ŽIRO_RA UN(BROJ, LIMIT) ,
primarni klju je { BROJ }
{ BROJ } je spoljašnji klju na relaciju RA UN
ŠTEDNI_RA UN(BROJ, KAMATA) ,
primarni klju je { BROJ }{ BROJ } je spoljašnji klju na relaciju RA UN
Disjunktna i totalna
S ij li ij /G li ij
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 98/233
Specijalizacija/Generalizacija
Raun
Broj Stanje
IS A
Žiro raun
Limit Kamata
ŽIRO_RA UN(BROJ, LIMIT) ,
primarni klju je { BROJ }
ŠTEDNI_RA UN(BROJ, KAMATA) ,
primarni klju je { BROJ }
Štedni raun
Kod disjunktne i totalne specijalizacije/generalizacije
ne mora se praviti tabela za entitet višeg nivoa
Atributom definisana disjunktna
S ij li ij /G li ij
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 99/233
Specijalizacija/Generalizacija
Raun
Broj Stanje
IS A
Žiro raun
Limit Kamata
RA UN(BROJ, VRSTA_RA UNA, LIMIT, KAMATA)
primarni klju je { BROJ }
Štedni raun
Kod atributom definisane disjunktne specijalizacije/generalizacije
ne moraju se praviti tabele za entitete nižeg nivoa.
A ij
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 100/233
Agregacija
• Agregirani skup veza se posmatra kao skupentiteta
• Napravi se tabela za njega.
Agregacija
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 101/233
AgregacijaSlužbenikKlijent Zajampozajmljivanje
KLIJENT(SIFRA, IME) , primarni klju je {SIFRA}
ZAJAM (BROJ, IZNOS) , primarni klju je { BROJ }
POZAJMLJIVANJE (SIFRA, BROJ) , primarni klju je {SIFRA, BROJ }
{SIFRA} je spoljašnji klju na relaciju KLIJENT
{ BROJ } je spoljašnji klju na relaciju ZAJAM
SLUŽBENIK (JMBG, SIFRA, BROJ ) , primarni klju je { JMBG}
{SIFRA, BROJ } je spoljašnji klju na relaciju POZAJMLJIVANJE
Šta je Microsoft SQL Server
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 102/233
Šta je Microsoft SQL Server
• Microsoft SQL Server je sistem za
upravljanje bazama podataka (SUBP) ilidatabase management system (DBMS)
Model podataka u SQL Serveru
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 103/233
Model podataka u SQL Serveru• Relacioni model je danas najpopularniji,
preko 90% DBMS ga podržava• Osnova SQL Server-a je relacioni model i
zato je on RELACIONI SISTEM ZAUPRAVLJANJE BAZAMA PODATAKA.
Fajlovi SQL Server baze
podataka
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 104/233
podataka• Fajl sa ekstenzijom mdf, sadrži samu bazu
podataka.• Fajl sa ekstenzijom ldf, sadrži žurnal
transakcija (transaction log) koji služi zaomoguavanje konkurentnog rada višekorisnika i oporavak od kvara.
Kreranje baze podataka
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 105/233
Kreranje baze podataka• Dva naina:
– SQL reenicomCREATE DATABASE proba
– Interaktivno, pomou Enterprise managera
Tipovi podataka u SQL Server u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 106/233
Tipovi podataka u SQL Server-u• Cijeli brojevi
bitCijeli broj sa vrijednošu ili 1 ili 0.
int
Od -2^31 (-2,147,483,648) do 2^31 - 1 (2,147,483,647).smallint
Od 2^15 (-32,768) do 2^15 - 1 (32,767).
tinyintod 0 do 255.
Tipovi podataka u SQL Server u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 107/233
Tipovi podataka u SQL Server-udecimal and numeric
decimal
Fiksirana preciznost i vliina
od -10^38 -1 do 10^38 -1.numeric
Sinonim za decimal.
Tipovi podataka u SQL Server-u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 108/233
Tipovi podataka u SQL Server-umoney and smallmoney
money
Novac od -2^63 (-922,337,203,685,477.5808) do2^63 - 1 (+922,337,203,685,477.5807), satanošu na 1/10 000.
smallmoney
Novac od -214,748.3648 do +214,748.3647, satanošu na 1/10 000.
Tipovi podataka u SQL Server-u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 109/233
Tipovi podataka u SQL Server-uApproximate Numerics
float
Broj sa pokretnim zarezom od -1.79E + 308 do1.79E + 308.
real
Broj sa pokretnim zarezom od -3.40E + 38 do
3.40E + 38.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 110/233
Tipovi podataka u SQL Server-u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 111/233
Tipovi podataka u SQL Server ucursor
Kursor.timestamp
Jedinstveni broj u bazi podataka.
uniqueidentifier
Globalno jedinstven identifikator (GUID).
Tipovi podataka u SQL Server-u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 112/233
Tipovi podataka u SQL Server uSlovni podaci
charNe-Unicode slovni podaci fiksirane dužine, max. 8,000
znakova.
varchar
Ne-Unicode slovni podaci promjenljive dužine, max.8,000 znakova.
text
Ne-Unicode slovni podaci promjenljive dužine, max.2^31 - 1 (2,147,483,647) znakova.
Tipovi podataka u SQL Server-u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 113/233
Tipovi podataka u SQL Server uUnicode slovni podaci
ncharUnicode slovni podaci fiksirane dužine, max. 4,000
znakova.
nvarchar
Unicode slovni podaci promjenljive dužine, max. 8,000znakova.
ntext
Unicode slovni podaci promjenljive dužine, max. 2^30 - 1(1,073,741,823) znakova.
Tipovi podataka u SQL Server-u
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 114/233
Tipovi podataka u SQL Server uBinary Strings
binaryBinarni podaci fiksirane dužine, max. 8,000 bajta.
varbinary
Binarni podaci promjenljive dužine, max. 8,000 bajta.image
Binarni podaci promjenljive dužine, max. 2^31 - 1
(2,147,483,647) bajta.
Kreiranje tabele
(interaktivno)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 115/233
(interaktivno)
Kreiranje tabele (SQL)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 116/233
Kreiranje tabele (SQL)CREATE TABLE FAKULTET(
IME_FAK VARCHAR(20),
SJEDISTE VARCHAR(50),
PRIMARY KEY ( IME_FAK)
)
CREATE TABLE STUDENT(IME_FAK VARCHAR(20),
BROJ_INDEKSA VARCHAR(10),
GODINA INTEGER NOT NULL,
PROSJEK DECIMAL (15,4) ,PRIMARY KEY ( BROJ_INDEKSA, IME_FAK) ,
FOREIGN KEY (IME_FAK) REFERENCES FAKULTET
)
Kreiranje tabele (SQL)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 117/233
e a je tabe e (SQ )CREATE TABLE PROFESOR(
IME_FAK VARCHAR(20),
REDNI_BROJ INTEGER,
IME VARCHAR(20),
CONSTRAINT PK1 PRIMARY KEY (REDNI_BROJ, IME_FAK),
CONSTRAINT FK1 FOREIGN KEY (IME_FAK) REFERENCESFAKULTET
)
Brisanje tabele (SQL)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 118/233
j ( Q )Brisanje tabele
DROP TABLE STUDENT
Izmjena strukture tabele(SQL)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 119/233
j ( Q )Dodavanje kolone
ALTER TABLE STUDENTADD GOD_RODJ INTEGER
Brisanje kolone
ALTER TABLE STUDENT
DROP COLUMN PROSJEK
Sistemske tabele
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 120/233
• Informacija o raznim objektima koje
kreiramo u bazi takoe se uva u tabelama
• To su posebne tabele koje se nazivajusistemskim tabelama.
Izmjena ogranienja
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 121/233
j g jBrisanje ogranienja
ALTER TABLE PROFESOR DROP CONSTRAINT
FK1
Dodavanje ogranienja
ALTER TABLE PROFESOR
ADD CONSTRAINT FK2 FOREIGN KEY
(IME_FAK) REFERENCES FAKULTET
Unošenje podataka
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 122/233
j pUnos podataka
INSERT INTO FAKULTET(IME_FAK, SJEDISTE) VALUES
('PMF', 'PODGORICA')
INSERT INTO FAKULTET(IME_FAK, SJEDISTE) VALUES
('ETF', NULL)
INSERT INTO FAKULTET(IME_FAK) VALUES ('MTF')
Brisanje podataka
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 123/233
j pBrisanje podataka
DELETE FROM FAKULTET
WHERE IME_FAK ='PMF'
Brisanje svih torki (OPASNO!)
DELETE FROM STUDENT
Izmjena podataka (SQL)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 124/233
j pIzmjena podataka
UPDATE FAKULTET
SET FAKULTET.IME_FAK = 'FIL'
WHERE FAKULTET.IME_FAK='PMF'
UPDATE STUDENT
SET IME_FAK = 'FIL',
GODINA=1WHERE IME_FAK='PMF' AND
BROJ_INDEKSA='34'
Indeks
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 125/233
• Indeks je struktura podataka koja služi za
efikasniji pristup podacima i sortiranje.• Nedostatak je što usporava dodavanje i
brisanje zapisa.
• Indeks može biti na jednoj ili više kolona.
• Indeks je naješe neka varijanta B-stabla,
recimo B+-stablo.
UNIQUE indeks
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 126/233
• Unique indeks– ne dozvoljava duplikate
• Kod kreiranja primarnog kljua i uniqueconstraint-a kreira se unique indeks.
• Podrazumijeva se da nije UNIQUE.
Kreiranje i brisanje indeksa
(SQL)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 127/233
• Kreiranje i brisanje indeksa (SQL)
CREATE UNIQUE INDEX indsjedON FAKULTET (SJEDISTE ASC)
CREATE INDEX indgod
ON STUDENT (GODINA ASC)
DROP INDEX STUDENT.indgod
Klasterisani i neklasterisani
indeksCLUSTERED i d k k d k d l d i
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 128/233
• CLUSTERED indeks – kod koga redosled zapisa u
listu odgovara fizikom poretku.• NONCLUSTERED indeks – kod koga redosledzapisa u listu ne mora odgovarati fizikom poretku.
• Može biti samo jedan CLUSTERED indeks natabeli!• Indeks može biti
– CLUSTERED - NONCLUSTERED– UNIQUE CLUSTERED - UNIQUE CLUSTERED
Indeks
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 129/233
CREATE UNIQUE CLUSTERED INDEX indstud
ON STUDENT (JMBG ASC)
CREATE NONCLUSTERED INDEX indstud ON
STUDENT (BRLK, GRAD)
FILLFACTOR, PAD_INDEX
• FILLFACTOR – procenat od 1 do 100j ti li t
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 130/233
popunjenosti lista.
• Nije dobar ni preveliki i ni premali!• PAD_INDEX – ako je ukljuena ova opcija,
FILLFACTOR se primjenjuje i naunutrašnje vorove.
CREATE CLUSTERED INDEX indstud
ON STUDENT (JMBG ASC)
WITH PAD_INDEX, FILLFACTOR = 60
IGNORE_DUP_KEYIGNORE DUP KEY ij d lj d
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 131/233
• IGNORE_DUP_KEY opcija dozvoljava da
se, kada INSERT reenicom unosimo torkekoje imaju duplikate na indeksnim kolona,duplikati budu eliminisani. Ako ova opcija
nije postavljena kompletna INSERTreenica se odbija.
CREATE INDEX indstud
ON STUDENT (JMBG ASC)
WITH IGNORE_DUP_KEY
STATISTICS_NORECOMPUTED t t ki t ti tik
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 132/233
• Da se ne rauna automatski statistika
vezana za indeks.• Ima smisla samo ako se tabela ne mijenja,
može loše uticati na optimizator upita.
CREATE INDEX indstud
ON STUDENT (JMBG ASC)WITH
STATISTICS_NORECOMPUTE
Indeksi, interaktivno•
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 133/233
•
Primjer bazeCREATE TABLE SNABDJEVAC( CREATE TABLE FABRIKA (
F NO VARCHAR(20)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 134/233
S_NO VARCHAR(20),S_IME VARCHAR(20),
STATUS INTEGER,GRAD VARCHAR(20),PRIMARY KEY (S_NO)
)
CREATE TABLE PROIZVOD (
P_NO VARCHAR(20),P_IME VARCHAR(20),BOJA VARCHAR(20),TEZINA DECIMAL(10,4),GRAD VARCHAR(20),PRIMARY KEY (P_NO)
)
F_NO VARCHAR(20),F_IME VARCHAR(20),
GRAD VARCHAR(20),PRIMARY KEY (F_NO))
CREATE TABLE ISPORUKA (S_NO VARCHAR(20),
P_NO VARCHAR(20),F_NO VARCHAR(20),KOL SINGLE,PRIMARY KEY (S_NO, P_NO, F_NO),FOREIGN KEY (S_NO) REFERENCES SNABDJEVAC,FOREIGN KEY (P_NO) REFERENCES PROIZVOD,
FOREIGN KEY (F_NO) REFERENCES FABRIKA)
Budva30IgorS5
Podgorica20DejanS4Beograd30BozoS3
Beograd10UovanS2
Podgorica20StankoS1
GRADSTATUSS_IMES_NO
200F3P3S2
200F2P3S2
400F1P3S2
700F4P1S1
200F1P1S1
KOLF_NOP_NOS_NO
SNABDJEVAISPORUKA
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 135/233
Podgorica19CrvenaUticnicaP6
Beograd12PlavaKablP5
Podgorica14CrvenaKondenzatorP4
Pljevlja17PlavaKondenzatorP3
Beograd17ZelenaOtpornikP2
Podgorica12CrvenaSaraf P1
GRADTEZINABOJAP_IMEP_NO
PodgoricaKompjuterF7
KragujevacKasetofonF6
PodgoricaSatelitska antenaF5
BudvaDVD PlejerF4
BudvaMuzicki stubF3
PljevljaTelevizorF2
BeogradVideoF1
GRADF_IMEF_NO
500F4P6S5
400F4P5S5
800F4P4S5
200F4P3S5
100F4P1S5200F2P6S5
100F7P5S5
500F5P5S5
100F4P2S5
200F2P2S5
300F7P6S4
300F3P6S4
500F2P4S3
200F1P3S3
100F2P5S2
800F7P3S2
400F6P3S2
600F5P3S2
500F4P3S2PROIZVOD
FABRIKA
Operacija SELECT• Nai svu informaciju o snabdjevaima
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 136/233
Nai svu informaciju o snabdjevaimaSELECT S_NO, S_IME, STATUS, GRAD
FROM SNABDJEVAC
• Drugi nainSELECT * FROM SNABDJEVAC
• Nai šifre i imena svih snabdjevaa ( projekcija)
SELECT S_NO, S_IMEFROM SNABDJEVAC
WHERE dio• Nai imena proizvoda iz Podgorice
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 137/233
Nai imena proizvoda iz Podgorice.
SELECT P_IMEFROM PROIZVOD
WHERE GRAD= 'Podgorica'
• Nai snabdjevae iz Podgorice sa statusom veimod 10 .SELECT * FROM SNABDJEVAC
WHERE GRAD= 'Podgorica' AND STATUS>20
And , Or• Nai fabrike koje su u Beogradu ili Podgorici.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 138/233
Nai fabrike koje su u Beogradu ili Podgorici.SELECT * FROM FABRIKA
WHERE GRAD= 'Podgorica' OR GRAD= 'Beograd'
• Nai sve proizvode iz Beograda, kao i one izPodgorice koji su crvene boje.SELECT * FROM PROIZVOD
WHERE GRAD= 'Beograd' OR
(GRAD= 'Podgorica' AND BOJA='Crvena')
Not• Nai snabdjevae koji nisu iz Podgorice
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 139/233
j j gSELECT * FROM SNABDJEVAC
WHERE NOT (GRAD='Podgorica')
ili
SELECT * FROM SNABDJEVAC
WHERE GRAD<>'Podgorica'
• NULL uvijek daje vrijednost NETANO!!!
Is Null, Is not null• Nai snabdjevae kojima ne znamo grad
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 140/233
Nai snabdjevae kojima ne znamo grad.
SELECT * FROM SNABDJEVACWHERE GRAD IS NULL
• Nai snabdjevae kojima znamo grad.SELECT * FROM SNABDJEVAC
WHERE GRAD IS NOT NULL
Between• Nai šifre i imena snabdjevaa iji je status
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 141/233
j j jizmeu 10 i 20.
SELECT * FROM SNABDJEVAC
WHERE STATUS>=10 AND STATUS<=20
ili
SELECT * FROM SNABDJEVACWHERE STATUS BETWEEN 10 AND 20
Not Between• Nai šifre i imena snabdjevaa iji je status ilimanji od 10 ili ei od 20
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 142/233
manji od 10 ili vei od 20.
SELECT * FROM SNABDJEVAC
WHERE STATUS<10 OR STATUS>20
ili
SELECT * FROM SNABDJEVAC
WHERE STATUS NOT BETWEEN 10 AND 20
In• Nai šifre i imena snabdjevaa iji je status 10 ili
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 143/233
20 ili 30.
SELECT * FROM SNABDJEVAC
WHERE STATUS=10 OR STATUS=20 OR
STATUS=30
ili
SELECT * FROM SNABDJEVAC
WHERE STATUS IN (10,20,30)
Not In• Nai šifre i imena snabdjevaa iji status nije ni 10
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 144/233
ni 20 ni 30.SELECT * FROM SNABDJEVAC
WHERE STATUS<>10 AND STATUS<>20 ANDSTATUS<>30
iliSELECT * FROM SNABDJEVAC
WHERE NOT (STATUS=10 OR STATUS=20 ORSTATUS=30)
iliSELECT * FROM SNABDJEVAC
WHERE STATUS NOT IN (10,20,30)
Like
• Nai imena proizvoda koji poinju slovom P.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 145/233
SELECT P_IME FROM PROIZVODWHERE P_IME LIKE 'P%'
Primjer Tano Netano
% nula ili više znakova a%a aa, aBa, aBBBa aBC
%ab% abc, AABB, Xab aZb, bacab% abcdefg, abc cab, aab
_ Jedan znak a_a aaa, a3a, aBa aBBBaOpseg ili skup znakova [a-z] f, p, j 2, &
[fpj] f, p, j 2, &
Van opsega ili skupa [^a-z] 9, &, % b, a
Izrazi i ugraene funkcije
SELECT F_NO, KOL*1.3
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 146/233
FROM ISPORUKA
SELECT F_NO, KOL*1.3 AS NOVO
FROM ISPORUKA
SELECT SIN(STATUS), LEFT(GRAD,3)
FROM SNABDJEVAC
Order by
SELECT * FROM ISPORUKA
ORDER BY S NO
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 147/233
ORDER BY S_NO
SELECT * FROM ISPORUKA
ORDER BY S_NO, F_NO
SELECT * FROM ISPORUKA
ORDER BY S_NO ASC, F_NO DESC
SELECT * FROM ISPORUKA
ORDER BY S_NO DESC, F_NO DESC
Agregatne funkcije
• Pravu snagu pokazuju sa grupisanjem.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 148/233
• 5 osnovnih agregatnih funkcija:– MAX
– MIN– AVG– SUM
– COUNT
Agregatne funkcije
• SELECT MAX(KOL) FROM ISPORUKA
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 149/233
• SELECT MIN(KOL) FROM ISPORUKA
• SELECT SUM (KOL) FROM ISPORUKA
• SELECT AVG(KOL) FROM ISPORUKA
• SELECT COUNT(*) FROM ISPORUKA
Grupisanje
Položio
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 150/233
8P1Hem121
9P2Fiz150
10P2Fiz100
7P2Mat130
6P1Mat100OcjenaProfesorPredmetBr_ind
Grupisano po predmetu
6P1Mat100
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 151/233
9P2Fiz150
8P1Hem121
10P2Fiz100
7P2Mat130
6P1Mat100
Grupisano po profesoru
6P1Mat100
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 152/233
8P1Hem121
7P2Mat130
9P2Fiz15010P2Fiz100
6P1Mat100
Grupisano po predmetu i
profesoru6P1Mat100
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 153/233
8P1Hem121
7P2Mat130
9P2Fiz150
10P2Fiz100
6P1Mat100
GROUP BY
Nai ukupnu i prosjenu isporuenu koliinu pofabrikama
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 154/233
fabrikama.
SELECT F_NO, SUM(KOL), AVG(KOG)
FROM ISPORUKA
GROUP BY F_NO
U rezultat ulazi po jedan red iz svake grupe
Zato u SELECT dijelu mogu uestvovati samoatributi iz GROUP BY dijela i agregatne funkcije
GROUP BY
Nai maksimalnu isporuenu koliinu po
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 155/233
snabdjevaima i fabrikama.
SELECT S_NO, F_NO, MAX(KOL)
FROM ISPORUKA
GROUP BY S_NO, F_NO
HAVING
• Dodatni kriterijum na grupu
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 156/233
Nai maksimalnu isporuenu koliinu po snabdjevaima ifabrikama koji imaju više od dvije isporuke.
SELECT S_NO, F_NO, MAX(KOL)
FROM ISPORUKA
GROUP BY S_NO, F_NO
HAVING COUNT(*)>2
U HAVING dijelu se ispituju grupe i zato u tom dijelumogu uestvovati samo atributi iz GROUP BY dijela iagregatne funkcije
Upiti sa više tabela
- Dekartov proizvod
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 157/233
SELECT *FROM SNABDJEVAC, ISPORUKA
- Dekartov proizvod sa where uslovom je SPAJANJE.
- Nai imena snabdjevaa koji imaju bar jednu isporuku
SELECT S_IMEFROM SNABDJEVAC, ISPORUKA
WHERE SNABDJEVAC.S_NO=ISPORUKA.S_NO
Upiti sa više tabela
- Nai imena snabdjevaa iz Podgorice koji
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 158/233
imaju bar jednu isporuku.
SELECT S_IME
FROM SNABDJEVAC, ISPORUKAWHERE SNABDJEVAC.S_NO=ISPORUKA.S_NO
AND SNABDJEVAC.GRAD='Podgorica'
Upiti sa više tabela
- Nai imena snabdjevaa iz Podgorice koji
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 159/233
isporuuju bar jedan crveni proizvod.
SELECT S_IME
FROM SNABDJEVAC, ISPORUKA, PROIZVODWHERE SNABDJEVAC.S_NO=ISPORUKA.S_NO
AND PROIZVOD.P_NO=ISPORUKA.P_NO
AND SNABDJEVAC.GRAD='Podgorica'
AND PROIZVOD.BOJA='Crvena'
Upiti nad više tabela
- Nai imena snabdjevaa iz Podgorice kojiisporuuju bar jedan crveni proizvod fabrici iz
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 160/233
p j j p
Beograda.
SELECT S_IME
FROM SNABDJEVAC, ISPORUKA, PROIZVOD, FABRIKAWHERE SNABDJEVAC.S_NO=ISPORUKA.S_NO
AND PROIZVOD.P_NO=ISPORUKA.P_NO
AND FABRIKA.F_NO=ISPORUKA.F_NO
AND SNABDJEVAC.GRAD='Podgorica'AND PROIZVOD.BOJA='Crvena'
AND FABRIKA.GRAD='Beograd'
INNER JOIN
• Spajanje se može izvesti i samo u FROM dijelu
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 161/233
SELECT S_IME
FROM SNABDJEVAC INNER JOIN ISPORUKA
ON SNABDJEVAC.S_NO=ISPORUKA.S_NO
SELECT * FROM
(SNABDJEVAC INNER JOIN ISPORUKA ON
SNABDJEVAC.S_NO=ISPORUKA.S_NO)
INNER JOIN FABRIKA ONISPORUKA.F_NO=FABRIKA.F_NO
INNER JOIN
- Nai imena snabdjevaa iz Podgorice kojiisporuuju bar jedan crveni proizvod fabrici iz
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 162/233
Beograda.
SELECT S_IME FROM
( (SNABDJEVAC INNER JOIN ISPORUKA ON
SNABDJEVAC.S_NO=ISPORUKA.S_NO)INNER JOIN FABRIKA ON ISPORUKA.F_NO=FABRIKA.F_NO)
INNER JOIN PROIZVOD ON ISPORUKA.P_NO=PROIZVOD.P_NO
WHERE SNABDJEVAC.GRAD='Podgorica'
AND PROIZVOD.BOJA='Crvena'AND FABRIKA.GRAD='Beograd'
Spajanje tabele sa sobom
• Nai sve mogue parove (P_IME, P_IME)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 163/233
SELECT A.P_IME, B.P_IME
FROM PROIZVOD A, PROIZVOD B
Upiti nad više tabela sa
grupisanjem- Nai šifre snabdjevaa kao i broj isporuka
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 164/233
crvenih proizvoda.
SELECT S_NO, COUNT(*)
FROM ISPORUKA, PROIZVODWHERE PROIZVOD.P_NO=ISPORUKA.P_NO
AND PROIZVOD.BOJA='Crvena'
GROUP BY S_NO
OUTER JOIN
• Ukljuuje u rezultat i one koji nisu spojeni,sa lijeve, desne strane ili obije strane.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 165/233
j , j
SELECT * FROM
SNABDJEVAC INNER JOIN PROIZVOD
ON SNABDJEVAC.GRAD= PROIZVOD.GRAD
SELECT * FROM
SNABDJEVAC LEFT OUTER JOIN PROIZVOD
ON SNABDJEVAC.GRAD= PROIZVOD.GRAD
OUTER JOIN
SELECT * FROM
SNABDJEVAC RIGHT OUTER JOIN PROIZVOD
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 166/233
ON SNABDJEVAC.GRAD= PROIZVOD.GRAD
SELECT * FROM
SNABDJEVAC FULL OUTER JOIN PROIZVOD
ON SNABDJEVAC.GRAD= PROIZVOD.GRAD
Podupiti
• To su SELECT upiti unutar drugog upita
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 167/233
• Postoje dvije vrste podupita– Nevezani podupiti (oni koji se raunaju
nezavisno od spoljašnjeg upita)– Vezani podupiti
Podupiti kao konstantePodupit koji vraa jednu vrijednost se može koristiti svuda gdje i konstanta!
Ispisati podatke o snabdjevaima uz informaciju o ukupnom broju isporuka
SELECT *,
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 168/233
(SELECT COUNT(*) FROM ISPORUKA) AS BR_ISPORUKAFROM SNABDJEVAC
Ispisati podatke o snabdjevaima uz informaciju o ukupnom broju njihovih
isporuka
SELECT *,
(SELECT COUNT(*) FROM ISPORUKA
WHERE ISPORUKA.S_NO=SNABDJEVAC.S_NO) ASBR_ISPORUKA
FROM SNABDJEVAC
Podupiti kao konstante
Nai one proizvode ijih je isporuka više nego1/5 ukupnog broja isporuka
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 169/233
SELECT ISPORUKA.P_NO, COUNT(*)FROM ISPORUKAGROUP BY P_NOHAVING COUNT(*) >
(SELECT COUNT(*) FROM ISPORUKA)/5
• ovako mogu da se koriste podupiti koji vraajutano jednu vrijednost!!!
Podupiti koji vraaju više
vrijednosti• Uvede se pomou rijei
– ALL
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 170/233
– ANY (SOME)
– IN
– NOT IN
– EXISTS– NOT EXISTS
• Svi osim EXISTS i NOT EXISTS rade iskljuivo
sa podupitima koji vraaju jednu kolonu
Podupit ALL
• Nai šifre onih snabdjevaa koji imaju takvuisporuku koja ima koliinu veu od svake koliine
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 171/233
koju isporuuje 'S1’.
SELECT ISPORUKA.S_NO
FROM ISPORUKAWHERE ISPORUKA.KOL >
ALL (SELECT X.KOL
FROM ISPORUKA X
WHERE X.S_NO='S1')
Podupit ALL
• Nai šifre onih snabdjevaa koji isporuuju bar jedan detalj koji ne isporuuje 'S1’.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 172/233
SELECT ISPORUKA.S_NOFROM ISPORUKAWHERE ISPORUKA.P_NO <>
ALL (SELECT X.P_NO
FROM ISPORUKA XWHERE X.S_NO='S1')
• Ako podupit ne vraa vrijednost onda seuporeenje smatra TANIM (probajte sa 'S7’)!
Podupit ANY
• Nai šifre onih snabdjevaa koji isporuuju bar jedan detalj u koliini veoj od bar jedne koliine
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 173/233
koju isporuuje 'S1’.SELECT ISPORUKA.S_NOFROM ISPORUKAWHERE ISPORUKA.KOL >
ANY (SELECT X.KOLFROM ISPORUKA XWHERE X.S_NO='S1')
• Ako podupit ne vraa vrijednost onda seuporeenje smatra NETANIM (probajte sa 'S7’)!
• SOME je isto što i ANY
Podupit IN
• Nai šifre onih snabdjevaa kojisnabdijevaju neku fabriku iz Beograda.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 174/233
SELECT ISPORUKA.S_NOFROM ISPORUKA
WHERE ISPORUKA.F_NOIN (SELECT F_NO
FROM FABRIKA
WHERE GRAD='Beograd')
Podupit NOT IN
• Nai šifre onih snabdjevaa koji isporuujubar jedan proizvod koji nije crven.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 175/233
SELECT ISPORUKA.S_NOFROM ISPORUKA
WHERE ISPORUKA.P_NONOT IN (SELECT P_NO
FROM PROIZVOD
WHERE BOJA='Crvena')
Podupit EXISTS
• Nai one snabdjevae koji isporuuju bar nešto.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 176/233
SELECT *
FROM SNABDJEVAC
WHERE EXISTS
(SELECT *FROM ISPORUKA
WHERE SNABDJEVAC.S_NO= ISPORUKA.S_NO)
Podupit NOT EXISTS
• Nai šifre onih snabdjevaa koji isporuuju svecrvene proizvode.
SELECT ISPORUKA S NO
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 177/233
SELECT ISPORUKA.S_NOFROM ISPORUKAWHERE NOT EXISTS
(SELECT P_NO
FROM PROIZVODWHERE BOJA='Crvena' AND NOT EXISTS
(SELECT *FROM ISPORUKA X
WHERE X.S_NO= ISPORUKA.S_NOAND X.P_NO= PROIZVOD.P_NO)
)
SLOŽENIJI INSERT
- INSERT INTO može da bude sa podupitom
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 178/233
INSERT INTO SNABDJEVAC(S_NO, S_IME, STATUS, GRAD)
SELECT S_NO+'d', S_IME, STATUS, GRAD
FROM SNABDJEVAC
SELECT - INTO
• Kreiranje tabele pomou SELECT upita
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 179/233
• SELECT * INTO POMOCNA FROMSNABDJEVAC
Složeniji UPDATE
• ALTER TABLE ISPORUKA ADDIME_SNAB VARCHAR(20)
• UPDATE ISPORUKA
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 180/233
• UPDATE ISPORUKASET IME_SNAB = SNABDJEVAC.S_IME
FROM SNABDJEVACWHERE SNABDJEVAC.S_NO= ISPORUKA.S_NO
• UPDATE ISPORUKASET IME_SNAB = (SELECT SNABDJEVAC.S_IME
FROM SNABDJEVAC
WHERE SNABDJEVAC.S_NO=ISPORUKA.S_NO)
WHERE ISPORUKA.KOL>500
SLOŽENIJI DELETE
• DELETE FROM POMOCNAFROM SNABDJEVAC
WHERE SNABDJEVAC S NO= POMOCNA S NO
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 181/233
WHERE SNABDJEVAC.S_NO= POMOCNA.S_NO
• DELETE FROM POMOCNA
WHERE EXISTS(SELECT *FROM SNABDJEVAC
WHERE SNABDJEVAC.S_NO=
POMOCNA.S_NO)
POGLEDI (VIEW)
– CREATE VIEW CrveniProizvodi(P_NO, P_IME,BOJA, TEZINA, GRAD)
AS
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 182/233
ASSELECT P_NO, P_IME, BOJA, TEZINA, GRADFROM PROIZVOD
WHERE BOJA='Crvena'
Dalje se sa CrveniProizvodi može raditi skoro svekao sa pravom tabelomSELECT * FROM CRVENIPROIZVODI
POGLEDI
Promjene u pogledu se odražavaju napodatke iz kojih je pogled nastao (kad je tomogue)!
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 183/233
mogue)!UPDATE CRVENIPROIZVODISET TEZINA=10WHERE P_NO='P1'
Mijenja i osnovnu tabelu!
INFORMACIJA O
POGLEDIMA• Informacije o raznim objektima u bazi se mogu
dobiti pomou pogleda koji izvlae te informacije
iz sistemskih tabela
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 184/233
iz sistemskih tabela.• Vlasnik odnosno shema kojoj pripadaju ti pogledi
je INFORMATION_SCHEMA
SELECT TABLE_NAME FROMINFORMATION_SCHEMA.VIEWS
• Brisanje pogledaDROP VIEW CrveniProzivodi
DEFAULT objekat
• Slino DEFAULT ogranienju na koloni• Korisno kada se isti default koristi na dosta mjesta, u
raznim tabelama.
• Kreira se sa CREATE DEFAULT reenicom SQL-ai j k l i š j bi d f lt
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 185/233
• Kreira se sa CREATE DEFAULT reenicom SQL-ai povezuje sa kolonom izvršavanjem sp_bindefaultprocedure
CREATE DEFAULT nula AS 0GO
CREATE TABLE PROBA(POLJE INT)GOsp_bindefault nula, 'proba.polje'
• Raskidanje veze sa kolonom
sp unbindefault 'proba polje'
DEFAULT objekat
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 186/233
sp_unbindefault proba.polje
• Brisanje DEFAULT objekta (tek nakon što
se raskine veza sa svim kolonama)
DROP DEFAULT nula
DEFAULT objekatInteraktivno (Enterprise Manager)
Database – Defaults – New DefaultDatabase – Defaults – Properties
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 187/233
DEFAULT objekatInteraktivno (Enterprise Manager)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 188/233
Pravila (RULES)
• Slino kao CHECK CONSTRAINT nakoloni
• Korisno kada se isto ogranienje koristi na
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 189/233
• Korisno kada se isto ogranienje koristi nadosta mjesta, u raznim tabelama.
• Kreira se sa CREATE RULE reenicomSQL-a i povezuje sa kolonom izvršavanjemsp_bindrule procedure
CREATE RULE
CREATE RULE id_chk AS @id BETWEEN 0 and 10000
CREATE RULE range rule AS
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 190/233
U g _@range >= $1000 AND @range < $20000
CREATE RULE list_rule AS @list IN ('1389', '0736', '0877')
CREATE RULE pattern_rule AS @value LIKE '_ _-%[0-9]'
Primjer CREATE RULE
CREATE TABLE klijent (
klijent_id int PRIMARY KEY,
ime char(50)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 191/233
)
GO
CREATE RULE provjeraid AS @id BETWEEN 0 and 10000GO
sp_bindrule provjeraid, ' klijent.klijent_id'
Raskidanje i brisanje pravila
• Raskidanje veze sa kolonom
sp unbindrule 'klijent.klijent_id'
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 192/233
sp_unbindrule j j _
• Brisanje RULE objekta (tek nakon što se
raskine veza sa svim kolonama)
DROP RULE provjeraid
Pravila, interaktivnoDatabase –Rules– New Rule
Database – Rules – Properties
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 193/233
USER DEFINED DATA TYPE
(UDT)• Tipovi podataka definisani korisnikom• Zasnovani na postojecim tipovima
• Dobro kada se koriste u više tabela
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 194/233
• Kreira se procedurom sp_addtype
• EXEC sp_addtype telefon, 'varchar(24)', 'NOT NULL'• GO• CREATE TABLE TELEFONI(• BROJ_TEL telefon PRIMARY KEY)
Brisanje UDT
•Brisanje UDT (tek nakon što se
više nije tip nijedne kolone)EXEC sp droptype 'telefon'
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 195/233
j p j )EXEC sp_droptype 'telefon'
UDT, interaktivno
Database –User Defined Data Types- New User Defined Data Type- Properties
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 196/233
UDT, interaktivno
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 197/233
TRANSAKCIJE
• Transakcija (transaction) je niz operacija kojipredstavlja jedistvenu logiku cjelinu.
• Da bi logika cjelina bila transakcija ona mora
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 198/233
• Da bi logika cjelina bila transakcija ona moraimati 4 svojstva:
Atomicity, ConsistencyIsolation, Durability
• Tzv. ACID svojstva
ACID svojstva
• Atominost – ili se sve modifikacije podataka izvrše, iliništa.
• Konzistentnost – na kraju transakcije baza mora biti ukonzistentnom stanju – podaci kljuevi indeksi
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 199/233
konzistentnom stanju podaci, kljuevi, indeksi.
• Izolacija – transakcija ne treba da vidi modifikacije koje
izvode konkuretne transakcije, sve dok se one ne završe.(serijabilnost – na kraju izgleda kao da su one izvršena jedna za drugom).
• Trajnost – kad se transakcija završi, izmjene koje jeizvršila su trajne, ak i ako doe do kvara sistema.
Eksplicitne transakcije
• Sistem unutar sebe stalno koristi (implicitne)transakcije
• Korisnike eksplicitne transkacije
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 200/233
p j– BEGIN TRANSACTION
– COMMIT TRANSACTION
– U sluaju da transkacija ne može nastaviti saizvršavanjemROLLBACK TRANSACTION
BEGIN TRANSACTION
COMMIT TRANSACTIONBEGIN TRANSACTION
INSERT INTO SNABDJEVAC(SNO) VALUES ('S8')INSERT INTO SNABDJEVAC(SNO) VALUES (NULL)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 201/233
INSERT INTO SNABDJEVAC(SNO) VALUES (NULL)
-- GRESKA, SVE SE PONISTAVA
-- (DVIJE CRTE SU KOMENTAR)COMMIT TRANSACTION
Nivoi izolacije transakcije
• READ UNCOMMITTED• READ COMMITTED (podrazumjevano)• REPEATABLE READ
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 202/233
• SERIALIZABLE
• Vea nivo smanjuje konkurentnost!
• Postavlja se daSET TRANSACTION ISOLATION LEVEL
Sistemske promjenljive
• Poinju sa @@• @@ERROR – broj zadnje greške
• @@ROWCOUNT – broj torki pogoen zadnjimupitom
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 203/233
upitom• @@IDENTITY – zadnja unijeta identity
vrijednost
• Mogu se koristiti u upitima, procedurama i
funkcijama.SELECT @@ERROR
STORED PROCEDURE
• Uskladištene procedure pisane na Transact-SQL-u (T-SQL)
• T-SQL sadrži SQL i programski jezik slian
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 204/233
Pascal-u
• Mogue je deklarisati promjenljive,izvršavati razne naredbe, npr. IF, WHILE,GOTO, zajedno sa iskazima SQL-a
CREATE PROCEDURE
CREATE PROCEDURE info_snabdjevaci
ASSELECT * FROM SNABDJEVAC
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 205/233
- izvršite je saEXEC info_snabdjevaci
DROP PROCEDURE
• Procedura se briše sa DROP PROCEDUREReenicom
DROP PROCEDURE info snabdjevaci
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 206/233
DROP PROCEDURE info_snabdjevaci
Može i ovakoIF EXISTS (SELECT name FROM sysobjects
WHERE name = 'info_snabdjevaci' AND type = 'P')
DROP PROCEDURE info_snabdjevac
Ulazni parametri
CREATE PROCEDURE info_snabdjevac
@IME_GRADA VARCHAR(30)
AS
SELECT * FROM SNABDJEVAC
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 207/233
SELECT * FROM SNABDJEVAC
WHERE GRAD=@IME_GRADA- izvršite je sa
EXEC info_snabdjevac 'Podgorica'
Izmjena procedure, default
vrijednosti parametarakod procedure se mijenja sa ALTER PROCEDURE
ALTER PROCEDURE info_snabdjevac@IME_GRADA VARCHAR(30)= 'Podgorica'
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 208/233
AS
SELECT * FROM SNABDJEVACWHERE GRAD=@IME_GRADA
- izvršite je bez parametara, sa
EXEC info_snabdjevac
Izlazni parametri
CREATE PROCEDURE br_snabdjevaca
@IME_GRADA VARCHAR(30),
@UKUPNO INTEGER OUTPUT
AS
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 209/233
AS
SET @UKUPNO=(SELECT COUNT(*)
FROM SNABDJEVAC
WHERE GRAD=@IME_GRADA)
Pozivanje procedure sa izlaznim
parametrimaDECLARE @REZULTAT INT
EXEC br_snabdjevaca 'Podgorica',
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 210/233
@REZULTAT OUTPUT
SELECT @REZULTAT
Lokalne promjenljive
CREATE PROCEDURE dodaj_snabdjevaca
@SIFRA VARCHAR(30),
@IME VARCHAR(30)
AS
DECLARE @GRAD VARCHAR(30)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 211/233
DECLARE @GRAD VARCHAR(30)
DECLARE @STATUS INT
SET @GRAD='Podgorica'
SET @STATUS= LEN(@GRAD)
INSERT INTO SNABDJEVAC(S_NO, S_IME, STATUS, GRAD)
VALUES(@SIFRA, @IME, @STATUS, @GRAD)
IF…ELSE naredba,
BEGIN – END, PRINTCREATE PROCEDURE vece_isporuke
@SIFRA VARCHAR(30)
AS
IF (SELECT MAX(KOL) FROM ISPORUKA WHERE S_NO =@SIFRA) > 400
BEGIN
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 212/233
BEGIN
PRINT 'Ovo su isporuke snabdjevaca ' + @SIFRA
PRINT ' 'SELECT P_NO, F_NO, KOL
FROM ISPORUKA
WHERE S_NO = @SIFRA
ENDELSE
PRINT 'Ovaj snabdjevac je isporucio male kolicine!'
WHILE
CREATE PROCEDURE POVECAJ_STATUSE
AS
DECLARE @BROJAC INT
SET @BROJAC=0
WHILE @BROJAC<10
BEGIN
SET @BROJAC=@BROJAC+1
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 213/233
SET @BROJAC=@BROJAC+1
UPDATE SNABDJEVAC
SET STATUS=STATUS+ 1
IF (SELECT MIN(STATUS) FROM SNABDJEVAC) > 13
BREAK
ELSE
CONTINUE
END
SELECT * FROM SNABDJEVAC
PRINT 'Kraj'
@@ERROR, RETURN
CREATE PROCEDURE dodaj_snabdjevaca
@SIFRA VARCHAR(30),
@IME VARCHAR(30)
AS
INSERT INTO SNABDJEVAC(S_NO, S_IME)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 214/233
VALUES(@SIFRA, @IME)
IF @@ERROR <> 0BEGIN
PRINT 'Greska!'
RETURN(99)
END
Kursor CURSOR
• CURSOR je objekat koji omoguuje daaplikacije pristupaju podacima red po red, a
ne kroz tabele, odnosno skupovevrijednosti.
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 215/233
vrijednosti.
• Kursor se deklariše saDECLARE ime_kursora CURSOR [OPCIJE]
AS select_upit [FOR UPDATE]
Kursori
• DECLARE snab_kursor CURSOR
FOR SELECT * FROM snabdjevac
• Opcije– LOCAL , GLOBAL
FORWARD ONLY SCROLL
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 216/233
– FORWARD_ONLY , SCROLL
– STATIC, KEYSET, DYNAMIC, FAST_FORWARD
– READ_ONLY, SCROLL_LOCKS, OPTIMISTIC
– TYPE_WARNING
– FOR UPDATE
Kursori
Kursor se otvara sa
OPEN ime_kursora
Kursor se zatvara saCLOSE ime kursora
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 217/233
CLOSE ime_kursora
Kursor se uništava saDEALLOCATE ime_kursora
FETCH
• FETCH naredba služi za dobijanje reda izkursora. Red ide na izlaz ili u promjenljive.
• FETCH [opcija] FROM ime_kursora• Opcije
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 218/233
– NEXT
– PRIOR– FIRST– LAST– ABSOLUTE broj– RELATIVE broj
Primjer rada sa kursorom
DECLARE snab_kursor CURSOR LOCAL SCROLL READ_ONLY
FOR SELECT S_NO, S_IME FROM snabdjevac
OPEN snab_kursorFETCH NEXT FROM snab_kursor
FETCH RELATIVE 3 FROM snab kursor
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 219/233
FETCH RELATIVE 3 FROM snab_kursor
DECLARE @SIFRA VARCHAR(30)DECLARE @IME VARCHAR(30)
FETCH NEXT FROM snab_kursor INTO @SIFRA, @IME
PRINT @SIFRA + ' ' + @IME
CLOSE snab_kursor
DEALLOCATE snab_kursor
UPDATE, DELETE
na kursoruNa kuroru koji nije READ_ONLY mogu s
izbrisati ili izmijeniti tekuci red. Insert nije
mogu.UPDATE SNABDJEVAC
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 220/233
SET GRAD='Niksic'
WHERE CURRENT OF snab_kursor
DELETE FROM SNABDJEVAC
WHERE CURRENT OF snab_kursor
@@FETCH_STATUS
• Promjenljiva @@FETCH_STATUS sadržiinformaciju o (ne)uspjehu zadnje FETCH naredbe.
• @@FETCH_STATUS =0 ako je sve bilo u redu.• Prije prve FETCH naredbe, vrijednost
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 221/233
@@FETCH_STATUS je nedefinisana
• Vrijednost @@FETCH_STATUS je globalna , tj.na nju utiu FETCH naredbe na svim kursorima!
@@FETCH STATUS primjer
DECLARE snab_kursor CURSOR LOCAL
FOR SELECT S_NO, S_IME FROM SNABDJEVAC
DECLARE @SIFRA VARCHAR(30)
DECLARE @IME VARCHAR(30)
OPEN snab_kursor
FETCH NEXT FROM snab k rsor INTO @SIFRA @IME
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 222/233
FETCH NEXT FROM snab_kursor INTO @SIFRA, @IME
WHILE @@FETCH_STATUS=0BEGIN
PRINT @SIFRA + ' ' + @IME
FETCH NEXT FROM snab_kursor INTO @SIFRA, @IME
END
Trigger (okida)
• Okida je uskladištena procedura koja seizvršava automatski, kada se desi neki
dogaaj u sistemu.• Postoje sledee vrste okidaa
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 223/233
j
– INSERT– DELETE
– UPDATE
Kreiranje okidaa
• Okidai prepoznaju konceptualne tabele deleted iinserted. One sadrže one redove koji se brišu,
odnosno unose.CREATE TRIGGER unosSnab
ON SNABDJEVAC
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 224/233
ON SNABDJEVAC
FOR INSERTAS
INSERT INTO ISPORUKA(S_NO, P_NO, F_NO, KOL)
SELECT S_NO, 'P1', 'F1',0 FROM INSERTED
Delete okida
CREATE TABLE SPIJUN(
BR INT IDENTITY(1,1) PRIMARY KEY,
OPERACIJA VARCHAR(200),
VRIJEME DATETIME,KORISNIK VARCHAR(200),
)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 225/233
CREATE TRIGGER brisiSnab
ON SNABDJEVACFOR DELETE
AS
INSERT INTO SPIJUN(OPERACIJA, VRIJEME, KORISNIK)
SELECT 'IZBRISAN SNABDJEVAC '+DELETED.S_NO,GETDATE(), CURRENT_USER
FROM DELETED
Okidai, RAISERROR i
ROLLBACKCREATE TRIGGER brisiFabriku
ON FABRIKA
FOR DELETEAS
IF EXISTS(SELECT * FROM DELETED WHEREF NO 'F8')
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 226/233
F_NO='F8')
BEGINRAISERROR('Ne moze se brisati fabrika F8!', 16,1)
ROLLBACK TRANSACTION
END
UPDATE okidai
• Koriste i INSERTED i DELETED tabele• Koriste i reenice IF UPDATE()
CREATE TRIGGER provjeraGrada
ON PROIZVOD
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 227/233
FOR UPDATE
ASIF UPDATE(GRAD)
BEGIN
RAISERROR('Ne moze se mijenjati grad!',16,1)
ROLLBACK TRANSACTIONEND
Update okidai
CREATE TRIGGER provjeraTezine
ON PROIZVOD
FOR UPDATE
ASINSERT INTO SPIJUN(OPERACIJA, VRIJEME, KORISNIK)
SELECT 'IZMJENA TEZINE PROIZVODA '+DELETED.P_NO
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 228/233
+ ' SA '+CONVERT(VARCHAR, DELETED.TEZINA)+ ' NA '+
CONVERT(VARCHAR, INSERTED.TEZINA)
, GETDATE(), CURRENT_USER
FROM INSERTED INNER JOIN DELETED ONINSERTED.P_NO=DELETED.P_NO
Kombinovanje okidaa
• sve vrste okidaa se mogu kombinovati• tada treba koristiti tabele koje svi vide, npr. i UPDATE i
DELETE okida pune tabelu deleted.CREATE TRIGGER provjeraStatus
ON SNABDJEVAC
FOR UPDATE, DELETE
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 229/233
AS
IF EXISTS(SELECT * FROM DELETED WHERE STATUS=30)
BEGIN
RAISERROR('Snabdjevaci sa statusom 30 se ne mogu mijenjatiniti brisati!',16,1)
ROLLBACK TRANSACTIONEND
Brisanje okidaa
• DROP TRIGGER provjeraTezine
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 230/233
USER DEFINED FUNCTIONS• Funkcije koje definiše korisnik• Mogu se koristiti svuda gdje i sistemske funkcije• Kreiraju se naredbom
CREATE FUNCTION ime (spisak parametara)
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 231/233
RETURNS tipASBEGIN
tijelo funkcijeRETURN izrazEND
USER DEFINED FUNCTIONS
CREATE FUNCTION MOJ_TRIM(@X VARCHAR(20))
RETURNS VARCHAR(20)ASBEGIN
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 232/233
DECLARE @POM VARCHAR(20)SET @POM=(LTRIM(RTRIM(@X)))RETURN @POM
END
USER DEFINED FUNCTIONS
Imjena funkcije sa
ALTER FUNCTION
• Funkcije se brišu sa
8/17/2019 SlajdoviBaze
http://slidepdf.com/reader/full/slajdovibaze 233/233
j
DROP FUNCTION ime