You are on page 1of 74

Glavne teme

 Upravljanje podacima
 Korišćenje DDL izjava za kreiranje i izradu
tabela
 Izrada ostalih šematskih objekata
Upravljanje podacima
Opišite svaku od izjava za upravljanje podacima (DML
Statement)
INSERT
UPDATE
DELETE
SELECT
MERGE

SELECT se smatra odvojenim jezikom samim za sebe, dok


MERGE ne čini ništa što se ne bi moglo uraditi sa drugim
komandama.
Opišite svaku od izjava za
upravljanje podacima (DML
Statement)
INSERT
Oracle čuva podatke u obliku redova u tabelama.
Tabele su popunjene redovima (kao što je i država
nastanjena stanovništvom) na nekoliko načina, ali
najčešći metod je upotrebom izjave INSERT.
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
UPDATE
Komanda UPDATE koristi se za izmjenu postojećih
redova – redova koji su kreirani komandom INSERT, ili
putem alata (kao što je Datapump).
Kao i kod drugih SQL komandi, UPDATE može uticati
na jedan red ili na skup redova.
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
DELETE
Umetnuti redovi mogu se ukloniti iz tabele pomoću
komande DELETE.
Ta komanda će ukloniti jedan red ili skup redova,
zavisno od klauzule WHERE.
Ako klauzula WHERE ne postoji, svaki red u tabeli će
biti uklonjen.
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
TRUNCATE
Komanda TRUNCATE nije komanda za upravljanje
podacima (DML); ona je DDL komanda.
Dok INSERT, UPDATE, i DELETE (pa čak i MERGE)
mogu biti stalne (sa COMMIT) ili obrnute (sa
ROLLBACK) komande, komanda TRUNCATE, kao i sve
druge DDL komande je odmah stalna: nikada ne može
biti obrnuta.
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Uklanjanje redova iz tabele

Postoje dvije opcije za uklanjanje redova iz tabele:


komande DELETE i TRUNCATE.
DELETE je manje drastična, u smislu da se izbrisano može
povratiti, dok je kod truncation to nemoguće. DELETE je i
lakša za kontrolisanje, na taj način da je moguće odabrati
koje redove brišete, dok se truncation uvijek odnosi na cijelu
tabelu. Međutim, DELETE je mnogo sporija i može zadati
više problema bazi podataka.
TRUNCATE je virtuelno trenutna i jednostavna.
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Opišite svaku od izjava za upravljanje
podacima (DML Statement)
Uklanjanje redova sa TRUNCATE

TRUNCATE je DDL komanda (Data Definition


Language). Ona se vrši u rječniku podataka i utiče na
strukturu tabele, a ne na njen sadržaj.
Međutim, izmjene koje ona vrši strukturi imaju
neželjeni efekat da uništavaju sve redove u tabeli.
Kontrolne transakcije
Koncepti koji se kriju iza transakcije predstavljaju dio
relacione paradigme baze podataka.
Transakcija se sastoji od jedne ili više DML izjava, i
praćena je ili komandom ROLLBACK ili komandom
COMMIT.
Moguće je koristiti komandu SAVEPOINT kako biste
zadali stepen kontrole unutar transakcije.
Svaka relaciona baza podataka mora biti u mogućnosti
da prođe ACID test: mora garantovati Atomičnost,
Konzistentnost, Izolovanost i Trajnost.
Kontrolne transakcije
A za atomičnost (Atomicity)

Princip atomičnosti navodi da svi dijelovi transakcije moraju biti


izvršeni ili nijedan od njih.
Na primjer, ako vaš poslovni analitičar kaže da svaki put kada se
promijeni plata zaposlenog, morate promijeniti i razred kojem
pripada zaposleni, u tom slučaju atomička transakcija se sastoji od
dva ažuriranja.
Baza podataka mora garantovati da se mijenjaju oba podatka ili
nijedan. Ukoliko uspije samo jedno ažuriranje, dobićete
zaposlenog čija plata nije kompatibilna sa razredom kojem
pripada: to je korupcija podataka, u poslovnom riječniku. Ako
nešto (bilo šta) krene pogrešno prije izvršavanja transakcije, sama
baza podataka mora garantovati da se svaki dio koji je izmijenjen
vrati u prvobitno stanje; to se mora vršiti automatski.
Kontrolne transakcije
C je za konzistentnost (Consistency)

Princip konzistentnosti navodi da rezultat upita mora biti konzistentan


sa stanjem baze podataka u vrijeme kada je pokrenut upit.
Zamislite jednostavan upit kojim se računa srednja vrijednost kolone u
tabeli. Ako se radi o velikoj tabeli, biće potrebno više minuta da se prođe
kroz tabelu.
Ako drugi korisnici ažuriraju kolonu dok je upit u toku, da li u upit
treba uvrstiti nove ili stare vrijednosti?
Da li da uvrsti redove koji su umetnuti ili izbrisani nakon što je
pokrenut upit?
Princip konzistentnosti zahtijeva od baze podataka da obezbjedi da
promijenjene vrijednosti upit ne može da vidi; time ćete dobiti srednju
vrijednost kolone kakva je bila onda kada je pokrenut upit, bez obzira
koliko traje izvršenje upita ili koje druge aktivnosti se pojavljuju u datoj
tabeli.
Kontrolne transakcije
I za izolovanost (Isolation)

Princip izolovanosti navodi da nepotpuna transakcija (tj. neizvršena)


mora biti nevidljiva svima.
Tokom transakcije, samo jednoj sesiji koja izvršava transakciju je
omogućeno da vidi izmjene; sve druge sesije moraju vidjeti neizmjenjene
podatke, a ne nove vrijednosti.
Logika koja je u pozadini toga je da kao prvo, cjelokupna transakcija
možda neće proći i da zbog toga nijednom drugom korisniku ne treba
dozvoliti da vidi izmjene koje će možda opet biti vraćene u prvobitno
stanje.
Drugo, tokom transakcije podaci su, poslovnim rječnikom rečeno,
nekoherentni: postoji kratak vremenski interval u kome je izmijenjena
visina plate zaposlenog, ali ne i razred kojem pripada.
Izolovanost transakcije zahtijeva od baze podataka da od ostalih
korisnika mora sakriti transakcije koje su u fazi izvršavanja: oni će vidjeti
verziju koja je prethodila ažuriranju sve dok se transakcija ne završi, a
tada će sve izmjene vidjeti kao jedan konzistentan skup.
Kontrolne transakcije
D za trajnost (Durability)

Princip trajnosti navodi da jednom kada se izvrši transakcija,


baza podataka je više ne smije izgubiti. Za vrijeme trajanja
transakcije, princip izolovanosti zahtijeva da niko (osim same
sesije) ne može vidjeti promjene koje su do tada izvršene.
Ali onog momenta kada se transakcija završi, treba je
objelodaniti, a baza podataka mora garantovati da se promjena
nikada neće izgubiti; relaciona baza podataka ne smije gubiti
podatke.
Oracle ispunjava ovaj uslov ispisujući sve vektore promjena koji
se primjenjuju na podatke za logovanje fajlova kada se izvrši
izmjena. Primjenom ovog loga izmjena rezervnih kopija koje su
ranije napravljene, moguće je ponoviti svaki urađeni posao u
slučaju da se ošteti baza podataka.
Kontrolne transakcije
Početak i kraj transakcije
Sesija počinje transaciju onog momenta kada se izda neka
od izjava INSERT, UPDATE, ili DELETE (ali ne i TRUNCATE
što je komanda DDL, a ne DML).
Transakcija se nastavlja kroz dalji niz DML komandi sve
dok sesija ne izda izjavu COMMIT ili ROLLBACK. Tek tada
će izvršene izmjene postati stalne i vidljive ostalim sesijama
(ako je izvršena (commited), prije nego ako je rolled
back(vraćena u prvobitno stanje)) Nemoguće je „ugnijezditi“
transakcije. Standard SQL ne omogućava korisniku da
započne drugu transakciju, prije nego što završi prethodnu.
Kontrolne transakcije
Izjave za kontrolu transakcije
Transakcija počinje implicitno sa izdavanjem prve DML
izjave.
Ne postoji komanda za eksplicitno započinjanje
transakcije.
Transakcija se nastavlja kroz sve naredne DML izjave koje
izda sesija.
Ove izjave mogu biti date za bilo koji broj tabela:
transakcija nije ograničena samo na jednu tabelu.
Ona se završava onda kada sesija izda komandu COMMIT
ili ROLLBACK.
Kontrolne transakcije
COMMIT

Sintaksički, COMMIT je najjednostavnija SQL kmanda.


Sintaksa je sljedeća: COMMIT;
Ovom komandom se završava tekuća transakcija, koja ima dvojni
efekat da učini izmjene stalnim i vidljivim za ostale sesije.
Dok se ne izvrši transakcija, ni jedna druga sesija je ne može
vidjeti, čak i ako su prijavljeni na bazu podataka sa isti korisničkim
imenom kao što je i ime sesije koja izvršava transakciju.
Sve dok se ne završi transakcija, ona je nevidljiva za druge sesije i
može se poništiti. Ali kada se jednom završi, postaje apsolutno
neponištiva.
Kontrolne transakcije
ROLLBACK (vraćanje u prvobitno stanje)

Dok je transakcija u toku, Oracle zadržava sliku podataka onakvih


kakvi su bili prije transakcije. Ta slika je predstavljena drugim sesijama
koje vrše upite nad podacima dok je transakcija u toku. Ona se koristi i u
slučaju da se transakcija automatski vrati u početno stanje ukoliko nešto
krene pogrešnim putem, ili namjerno ako to sama sesija zahtijeva.
Sintaksa za zahtjev za vraćanje u prvobitno stanje je sljedeća:
ROLLBACK [TO SAVEPOINT savepoint] ;
Stanje podataka prije vraćanja u prvobitno stanje je da su promijenjeni,
a informacija potrebna za vraćanje izmjena je dostupna.
Rollback će eliminisati sve izmjene vraćanjem slike podataka kakva je
bila prije izmjena; svaki red koji je umetnut putem transakcije biće
izbrisan, oni koji su izbrisani tokom transakcije biće vraćeni u tabelu, a
svaki red koji je bio ažuriran biće vraćen u prvobitno stanje.
Kontrolne transakcije
SAVEPOINT

Korišćenje savepoints predstavlja dozvoljavanje


programeru da postavi marker u transakciji koji se može
koristiti za kontrolisanje uticaja komande ROLLBACK. Da se
ne bi kompletna transakcija vraćala u prvobitno stanje,
omogućuje se da se vrate sve izmjene koje su izvršene nakon
određene tačke, a sve one koje su urađene prije te tačke ostaju
netaknute. Sama transakcija se i dalje odvija: i dalje
nezavršena, i dalje je moguće vratiti u prvobitno stanje i, još
uvije je nevidljiva za druge sesije.
Sintaksa je sljedeća: SAVEPOINT savepoint;
Kontrolne transakcije
SAVEPOINT
Kontrolne transakcije
SELECT FOR UPDATE

Oracle pruža najviši mogući nivo konkurentnosti: čitači ne


blokiraju pisače, a pisači ne blokiraju čitače.
Ipak, postoje slučajevi kada možete poželjeti da
promijenite ovakvo ponašanje i spriječite izmjene podataka
za koje se vrši upit.
Pošto je Oracle baza podataka za više korisnika, nije
nemoguće da druga sesija takođe traži iste redove.
Ako se dogodi da obje sesije pokušavaju izvršiti izmjene,
može doći do prilično neobičnih posljedica.
Kontrolne transakcije

SQL> select * from regions;


REGION_ID REGION_NAME
---------- -------------------------
5 UK
1 Europe
2 Americas
3 Asia
4 Middle East and Africa

SQL> update regions set region_name='GB' where region_id=5;


0 rows updated. 
Kontrolne transakcije
Jedan način koji se odnosi na ovaj problem je da se zaključaju oni
redovi za koje je osoba zainteresovana:

select * from regions for update;

Klauzula FOR UPDATE zaključaće sve one redove koji se dobiju.


Nijedna sesija, osim one koja je izdala komandu neće moći vršiti nikakvu
izmjenu na njima, i stoga će, sljedeće ažuriranje biće uspješno: nije
moguće mijenjati redove.
Ovo podrazumijeva da jedna sesija ima konzistentan pregled podataka
(koji se neće mijenjati), ali vodite računa o tome da će druge sesije biti
obustavljene ukoliko pokušaju ažurirati bilo koji od zaključanih redova
(naravno, moguće je slati upite vezane za njih).
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Glavni objekti baze podataka
Postoje različiti tipovi objekata koji mogu
postojati unutar baze podataka, mnogo više ih
je u ovoj verziji nego što je bilo u prethodnim.
Svi objekti imaju imena i svaki objekat je u
nečijem vlasništvu. Taj „neko“ je korisnik baze
podataka, kao što je HR, OE.
Objekti koje korisnik posjeduje predstavljaju
njihovu šemu. Ime objekta mora zadovoljiti
određene uslove.
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Glavni objekti baze podataka
Objekti od najvećeg interesovanja za SQL programera su oni
koji sadrže ili omogućuju pristup podacima.
To su:

•Tabele
•Pregledi
•Sinonimi
•Indeksi
•Sekvence
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Prostor namijenjen za ime objekta
Često se kaže da je jedinstveni identifikator nekog objekta ime objekta, čiji je
prefiks naziv šeme.
Budući da je ovo uglavnom istinito, za potpuno razumijevanje dodjeljivanja
imena neophodno je uvesti koncept prostor namijenjen za ime objekta.
Prostor namijenjen za ime objekta definiše grupu tipova objekata, u okviru koje
sva imena moraju biti jedinstveno identifikovana, pomoću šeme i imena. Objekti
u različitim prostorima namijenjenim za ime objekta mogu dijeliti isto ime.
Ovi tipovi objekata dijele isti prostor namijenjen za ime objekta:
•Tabele
•Pregledi
•Sekvence
•Privatni sinonimi
Prema tome, nemoguće je napraviti pregled pod istim imenom kao i tabela –
odnosno nemoguće je to uraditi ako se nalaze u istoj šemi.
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Često se kaže da je jedinstveni identifikator nekog objekta ime objekta, čiji je
prefiks naziv šeme.
Budući da je ovo uglavnom istinito, za potpuno razumijevanje dodjeljivanja
imena neophodno je uvesti koncept prostor namijenjen za ime objekta.
Prostor namijenjen za ime objekta definiše grupu tipova objekata, u okviru koje
sva imena moraju biti jedinstveno identifikovana, pomoću šeme i imena. Objekti
u različitim prostorima namijenjenim za ime objekta mogu dijeliti isto ime.
Ovi tipovi objekata dijele isti prostor namijenjen za ime objekta:
•Tabele
•Pregledi
•Sekvence
•Privatni sinonimi
Prema tome, nemoguće je napraviti pregled pod istim imenom kao i tabela –
odnosno nemoguće je to uraditi ako se nalaze u istoj šemi.
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Pregled strukture tabele

Svaka tabela postoji kao definicija u rječniku podataka.


Prilikom izrade, tabeli se dodjeljuje ograničena količina prostora
(poznata kao extent) unutar baze podataka.
Ona može biti mala, možda nekoliko kilobajta ili megbajta. Kako se
dodaju redovi u tu tabelu, ta količina prostora se popunjava.
Kada se potpuno popuni, baza podataka će (automatski) dodijeliti
dodatni prostor toj tabeli.
Kako se redovi brišu, prostor unutar dodijeljenog prostora postaje
dostupan za ponovno korištenje.
Čak i ako se svaki red izbriše, ti prostori ostaju dodijeljeni toj tabeli.
Samo u slučaju da je tabela uklonjena ili je izvršeno njeno skraćivanje, taj
prostor se može osloboditi i vratiti na korišćenje bazi podataka.
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Korišćenje DDL izjava za izradu i upravljanje
tabelama
Tipovi podataka koji su dostupni za kolone
• VARCHAR2 Karakterni podaci varijabilne dužine, od
1 bajta do 4KB. Podaci se čuvaju u skupu karaktera za
bazu podataka.
• NVARCHAR2 kao i VARCHAR2, ali se podaci čuvaju
u alternativnom skupu karaktera na nacionalnom
jeziku, jednom od dozvoljenih Unicode skupova
karaktera.
• CHAR karakterni podaci nepromjenljive dužine, od 1
bajta do 2KB, u skupu karaktera baze podataka. Ako
podaci nemaju istu dužinu kao i kolona, onda će biti
produženi pomoću razmaka.
Tipovi podataka koji su dostupni za kolone
• VARCHAR2 Karakterni podaci varijabilne dužine, od 1 bajta do 4KB. Podaci
se čuvaju u skupu karaktera za bazu podataka.
• NVARCHAR2 kao i VARCHAR2, ali se podaci čuvaju u alternativnom skupu
karaktera na nacionalnom jeziku, jednom od dozvoljenih Unicode skupova
karaktera.
• CHAR karakterni podaci nepromjenljive dužine, od 1 bajta do 2KB, u skupu
karaktera baze podataka. Ako podaci nemaju istu dužinu kao i kolona, onda
će biti produženi pomoću razmaka.
• RAW binarni podaci varijabilne dužine, od 1 bajta do 4 KB. Za razliku od
CHAR i VARCHAR2 tipova podataka, RAW podaci se ne konvertuju preko
Oracle Net iz skupa karaktera baze podataka u skup karaktera korisničkog
procesa preko SELECT ili na drugi način preko INSERT.
• NUMBER Numerički podaci, za koje možete odrediti preciznost i skalu.
Preciznost se može kretati u rasponu od 1 do 38, a skala u rasponu od −84 do
127.
• FLOAT Ovo je tip podataka ANSI, krajnja vrijednost (floating-point number)
sa preciznošću od 126 binarnih (ili 38 decimalnih). Oracle pruža i
BINARY_FLOAT i BINARY_DOUBLE kao alternativu.
• INTEGER Ekvivalent sa NUMBER, sa skalom 0.
Tipovi podataka koji su dostupni za kolone
• DATE Dužina je nula, ako je kolona prazna, ili 7 bajtova. Podaci All DATE
obuhvataju vijek, godinu, mjesec, dan, sat, minut i sekund. Validan niz je od
1. januara 4712 p. n. e. do 31. decembra 31, 9999 n. e.
• TIMESTAMP Dužina je nula, ako je kolona prazna, ili do 11 bajtova, zavisno
od zadate preciznosti. Slično DATE, ali sa preciznošću od maximalno 9
decimalnih mjesta za sekunde, a 6 mjesta automatski.
• TIMESTAMP WITH TIMEZONE kao i TIMESTAMP, ali podaci se čuvaju tako
što se vodi evidencija o vremenskoj zoni na koju se podaci odnose. Ovakav tip
podataka omogućava Oracle-u da odredi razliku između dvije vremenske
zone njihovom normalizacijom UTC, čak i ako se radi o vremenima za
različite vremenske zone.
• TIMESTAMP WITH LOCAL TIMEZONE kao i TIMESTAMP, ali podaci se
prilikom čuvanja normalizuju na vremensku zonu baze podataka. Kada se
vrši njihovo „pozivanje“ oni se normalizuju na vremensku zonu korisničkog
procesa koji ih je odabrao.
• INTERVAL YEAR TO MONTH Koristi se za zabilježavanje perioda u godini ili
mjesecu između dva DATEs ili TIMESTAMPs.
• INTERVAL DAY TO SECOND Koristi se za zabilježavanje perioda u danu ili
sekundi između dva DATEs ili TIMESTAMPs.
Izrada proste tabele
Tipovi podataka koji su dostupni za
kolone
• CLOB Karakterni podaci koji se čuvaju u skupu karaktera baze podataka, veličina
efektivno neograničena: 4GB pomnoženo sa veličinom bloka baze podataka.
• NCLOB kao i CLOB, ali se podaci čuvaju u alternativnom skupu karaktera na
nacionalnom jeziku, jednom od dozvoljenih Unicode skupova karaktera.
• BLOB kao i CLOB, ali binarni podaci koji neće pretrpjeti konverziju skupa podataka
putem Oracle Net.
• BFILE Lokator koji ukazuje na fajl koji se čuva u operativnom sistemu servera baze
podataka. Veličina fajlova je ograničena na 4GB.
• LONG Karakterni podaci u skupu karaktera baze podataka, do 2GB. Svu funkcionalnost
za LONG (i više) pruža CLOB; LONG ne treba koristiti u savremenim bazama
podataka, i ako vaša baza podataka ima bilo koju kolonu ovakve vrste treba je
konvertovati u CLOB. Može postojati samo jedna LONG kolona u tabeli.
• LONG RAW kao i LONG, ali sa binarnim podacima koji neće biti konvertovani putem
Oracle Net. Svaka LONG RAW kolona treba se konvertovati u BLOBs.
• ROWID Vrijednost koja je kodirana u bazi 64 koja predstavlja pokazivač lokacije reda u
tabeli. Šifrovana. Unutar nje nalazi se tačna fizička adresa. ROWID predstavlja tip
podataka specifičan za Oracle, koji nije vidljiv ako ga posebno ne odaberemo.
Izrada proste tabele
Izrada tabela preko podupita
Izmjena definicije tabele nakon njene
izrade
Uklanjanje i skraćivanje tabela
Ograničenja koja se zadaju prilikom
izrade tabele
Ograničenja zadata za tabelu predstavljaju sredstvo putem koga
baza podataka može primijeniti poslovna pravila, i garantovati da
podaci ispunjavaju model veza subjekata koji se određuje analizom
sistema koji definiše strukturu podataka u aplikaciji.
Na primjer, poslovni analitičari u vašoj organizaciji mogu
odlučiti da se omogući da svaki kupac i svaka faktura moraju biti
identifikovani brojem na jedinstven način, i da se nijedna faktura
ne može izdati prije nego što se kreira kupac, te da svaka faktura
mora imati validan datum i vrijednost veću od nule.

Kad se izvršava bilo koja DML izjava na tabeli sa definisanim


ograničenjima, a ta DML izjava narušava ograničenje, onda će se
cijela izjava vratiti u prvobitno stanje.
Ograničenja koja se zadaju prilikom
izrade tabele
Vrste ograničenja
Vrste ograničenja koje podržavaju Oracle baze
podataka su sljedeće:
UNIQUE
NOT NULL
PRIMARY KEY
FOREIGN KEY
CHECK
Vrste ograničenja
Jedinstvena ograničenja

Jedinstveno ograničenje nominuje kolonu (ili


kombinaciju kolona) za koju vrijednost mora biti
različita za svaki red u tabeli. Ukoliko je zasnovano samo
na jednoj koloni, onda je ona poznata kao ključna
kolona. Ako se ograničenje sastoji od više od jedne
kolone (poznato kao jedinstveno ograničenje složenog
ključa) kolone ne moraju imati istu vrstu podataka ili
biti vezane za definiciju tabele.
Vrste ograničenja
Nenulta ograničenja
Nenulta ograničenja tjeraju vrijednosti da budu unesene
u ključnu kolonu. Nenulta ograničenja se definišu prema
koloni: ako je poslovni zahtjev da u grupi kolona svaka
od njih ima vrijednost, ne možete definisati nenulto
ograničenje za cijelu grupu, već morate definisati
nenulto ograničenje za svaku kolonu.
Svaki pokušaj da ubacite red bez naznačavanja
vrijednosti za kolone koje imaju nenulto ograničenje za
rezultat će pokazati grešku.
Vrste ograničenja
Ograničenja primarnog ključa

Primarni ključ je sredstvo lociranja pojedinačnog reda


u tabeli. Paradigma relacione baze podataka uključuje i
uslov da svaka tabela treba imati primarni ključ, kolonu
(ili kombinaciju kolona) koja se može koristiti kako bi se
razlikovao svaki red.
Ograničenje primarnog ključa je jedinstveno
ograničenje u kombinaciji sa nenultim ograničenjem.
Vrste

ograničenja
Ograničenja stranog ključa

Ograničenje stranog ključa definisano je na primjeru odnosa


„dijete“i „roditelj“ tabela.
Ograničenjem se nominuje kolona (ili kolone) u „dijete“ tabeli
koja odgovara koloni (kolonama) primarnog ključa u „roditelj“
tabeli.
Ako „roditelj“ tabela ima jedinstvena ograničenja, kao i (ili
umjesto) ograničenja primarnog ključa, te kolone se mogu koristiti
kao osnova za ograničenja stranog ključa ili, čak i onda kada ih je
moguće nulirati.
Zapamtite da ograničenje stranog ključa u „dijete“
tabeli mora vezati kolone bilo one sa jedinstvenim
ograničenjem ili one sa ograničenjem primarnog ključa
u „roditelj“ tabeli.
Vrste ograničenja
Provjera ograničenja

Provjera ograničenja se može koristiti za provođenje


jednostavnih pravila, kao što je npr. da vrijednost unesena u kolonu
mora biti u okviru raspona vrijednosti.
Pravilo mora biti izraz koji će izvršiti evaluaciju TAČNO ili
NETAČNO.
Pravila se mogu odnositi na apsolutne vrijednosti unesene kao
literali ili na druge kolone u istom redu i mogu iskoristiti neke
funkcije.
Na jednu kolonu možete primijeniti koliko god želite
ograničenja, ali nije moguće koristiti funkciju kao što je SYSDATE
ili podupit da izvršite evaluaciju da li je vrijednost dopustiva.
Definisanje ograničenja
Izrada ostalih šematskih
objekata
SQL komanda vrši interakciju sa podacima i podaci se
pohranjuju u tabele, ali u praksi mnogi korisnici nikada ne
izdaju komandu SQL koja je adresirana na views ili
synonyms.
Pregledi i sinonimi ne čuvaju sami podatke; oni
obezbjeđuju apstraktni sloj između korisnika i podataka.
Budući da tabele, pregledi i sinonimi dijele isti prostor za
ime, korisnici nikada ne moraju znati na koje se upućuju.
Izrada prostih i složenih
pregleda
Za korisnika, pregled ima izgled tabele: dvodimenzionalna
struktura redova i kolona, u kojoj korisnik može pokrenuti
izjave SELECT i DML.
Programer zna kako zaista stvari stoje: pregled predstavlja
samo izjavu SELECT.
Svaka SELECT izjava za rezultat ima dvodimenzionalni
skup redova.
Ako se izjava SELECT sačuva kao pregled, onda se svaki put
kada korisnici traže ili ažuriraju redove u tom pregledu (pod
utiskom da se radi o tabeli), izjava pokreće i njen rezultat je
predstavljen korisnicima kao da se i radi o tabeli.
Izrada prostih i složenih
pregleda
Zašto uopšte koristit preglede?

Obično nije dobra ideja dozvoliti krajnjim korisnicima da rade na


pravim tabelama. Mogući razlozi su sljedeći:

•Bezbjednost.
•Pojednostavljivanje korisničkog SQL.
•Sprečavanje grešaka.
•Učiniti podatke razumljivim. Nazivi tabela i kolona često su dugi i
prilično besmisleni. Pregled i njegove kolone mogu biti mnogo
očigledniji.
•Učinak
Izrada prostih i složenih
pregleda
Izrada prostih i složenih
pregleda
Prosti i složeni pregledi

U praktične svrhe, klasifikacija pregleda u proste i složene odnosi se na


to da li se na njima mogu izvršiti izjave DML: prosti pregledi mogu
prihvatiti DML izjave, složeni ne mogu.

Precizne definicije su sljedeće:


•Prosti pregled izvlači podatke iz jedne tabele pojedinosti, ne koristi
nikakve funkcije i ne vrši nikakvo grupisanje
•Složeni pregled može spojiti tabele sa pojedinostima, koristiti funkcije i
vršiti grupisanje.

Primjena ovih definicija pokazuje da od navedena četiri pregleda koja


su uzeta kao primjer, prvi i treći predstavljaju proste preglede, a drugi i
četvrti složene.
Izrada prostih i složenih
pregleda
Izrada prostih i složenih
pregleda
Izrada privatnih i javnih sinonima
Sinonim predstavlja alternativni naziv za neki objekat.
Ako postoji sinonim za objekat, onda SQL izjava može
upućivati na taj objekat i putem njegovog pravog imena
ili i putem njegovog sinonima.
Upotreba sinonima znači da neka aplikacija može
funkcionisati za svakog korisnika, bez obzira na to kojoj
šemi pripadaju pregledi i tabele ili u kojoj bazi podataka
se nalazi tabela.
Izrada privatnih i javnih sinonima
Izrada i održavanje indeksa
Indeksi imaju dvije funkcie: da provode primarni ključ i jedinstvena
ograničenja i poboljšaju učinak.
Strategija izrade indeksa za aplikaciju je ključna za njen učinak.

Indeksi predstavljaju dio mehanizma ograničavanja.


Ako je kolona (ili grupa kolona) obilježena kao primarni ključ tabele,
onda svaki put kada se dodaje red u tabelu, Oracle mora provjeriti da li u
primarnom ključu.
Ako tabela nema indeks na koloni (kolonama), jedini način da se to
uradi je skeniranje cijele tabele, i provjeravanje svih redova.
Ovo može biti prihvatljivo za tabelu koja ima nekoliko redova, dok na
tabeli koja ima hiljade ili milione (ili milijarde) redova, to nije izvodljivo.
Indeks daje (blizak) neposredan pristup vrijednostima ključa, tako da
se provjera postojanja može odmah virtuelno izvršiti.
Kada se definiše ograničenje primarnog ključa, Oracle će automatski
izraditi indeks na koloni (kolonama) primarnog ključa, ukoliko ono već
ne postoji.
Izrada i održavanje indeksa
Vrste indeksa
Oracle podržava nekoliko vrsta indeksa, koji imaju nekoliko
varijanti.
Dvije vrste indeksa koje su za nas značajne su B*Tree index, koji
predstavlja automatsku vrstu indeksa, i bitmap index.
Jedina varijanta koja je vrijedna razmatranja u svrhu ispitivanja
primjenjuje se na B*Tree indekse: oni mogu biti jedinstveni i
nejedinstveni.
Jedinstveni indeks neće dozvoliti dodavanje dva reda sa istom
vrijednošću ključa;
Nejedinstveni indeks će dozvoliti koliko god redova želite sa
istom vrijednošću.
Nejedinstveni indeks je automatski.
Izrada i održavanje indeksa
B*Tree Indeksi

B*Tree indeks (“B” stoji za “izbalansiran”) predstavlja


strukturu drveta.
Korijenski element drveta pokazuje na mnoge
elemente na drugom nivou, koji pokazuju na mnoge
elemente na trećem nivou, itd.
Potrebna dubina drveta biće u mnogome određena
brojem redova u tabeli i dužinom vrijednosti indeksnog
ključa.
Izrada i održavanje indeksa
Izrada i održavanje indeksa
Indeksi bit mapa

U mnogim poslovnim aplikacijama, priroda podataka i upita je takva da


B*Tree indeksi nisu od velike koristi.
Pogledajte tabelu prodaje lanca supermarketa, koja čuva istoriju
podataka tokom jedne godine, koji se mogu analizirati u nekoliko
dimenzija.
Izrada i održavanje indeksa
Indeksi bit mapa

Ako uzmemo ravnomjernu raspodjelu podataka, samo dvije dimenzije


(PRODUCT and DATE) imaju selektivnost bolju od kriterija koji se obično
koristi, a iznosi 2 do 4 procenta, što čini indeks upotrebljivim.
Ali ukoliko upiti koriste niz predikata (poput brojanja plata u mjesecu, ili
klasa od deset i više proizvoda) onda se čak ni oni neće kvalifikovati.
Ovo je jednostavna činjenica: B*Tree indeksi su obično beskorisni u
okruženju skladišta podataka.
Tipičan upit mogao bi tražiti poređenje prodaja u dvije radnje za walk-in
kupce određene klase proizvoda tokom jednog mjeseca.
Mogu postojati i B*Tree indeksi na odgovarajućim kolonama, ali Oracle
će ih ignorisati kao nedovoljno selektivne. U tu svrhu se izrađuju bit mape.
Izrada i održavanje indeksa
Indeksi bit mapa

Indeksi bit mape čuvaju ROWIDs koji su povezani sa svakom vrijednošću ključa kao
bit mapa. Bit mapa za indeks CHANNEL može izgledati ovako:
 WALKIN 11010111000101011101011101…..
 DELIVERY 00101000111010100010100010…..

Ovo ukazuje da prve dije prodaje predstavljaju prodaju walk-in potrošačima, treća
prodaja predstavlja isporuku, četvrta walk-in, itd.

Bitmape za indeks SHOP mogu biti:


 LONDON 11001001001001101001010000…..
 OXFORD 00100010011000010001001000…..
 READING 00010001000100000100100010…..
 GLASGOW 00000100100010000010000101…..

Ovo ukazuje da su prve dvije prodaje izvršene u prodavnici u Londonu, treća u


Oksfordu, četvrta u Readingu, itd.
Izrada i održavanje indeksa
Dakle, ako se dobije sljedeći upit:

select count(*) from sales


where channel='WALKIN'and shop='OXFORD';

Oracle može povratiti dvije relevantne bit mape i dodati ih zajedno sa


Bulovim AND operatorom:

WALKIN 11010111000101011101011101…..
OXFORD 00100010011000010001001100…..
WALKIN & OXFORD 00000010000000010000000000…..
Izrada i održavanje indeksa
Izrada i održavanje indeksa

You might also like