You are on page 1of 12

Spajanje tabela

Svi SQL upiti koje smo do sada razmatrali su koristili podatke iz samo jedne
tabele.
Često se javlja situacija da se tražena informacija nalazi u većem broju tabela.
U takvim situacijama potrebno je izvršiti spajanje vrsta iz različitih tabela i
generisanje rezultujuće tabele.
Za pribavljanje podataka iz većeg broja tabela dovoljno je u klauzuli FROM
navesti imena tabela iz kojih želimo da pribavimo podatke.
Da bi spajanje tabela bilo uspešno, osim u nekim specijalnim slučajevima,
potrebno je da navedemo uslov spoja, odnosno da navedemo kolone na osnovu
čijih vrednosti se vrši spajanje vrsta iz različitih tabela.

Spajanje tabela se vrši tako što se najčešće uparuje strani ključ iz jedne tabele sa
primarnim ključem koji referencira u drugoj tabeli.

Uslov spajanja može da se zada u okviru WHERE klauzule ili korišćenjem ključne
reči JOIN u okviru FROM klauzule.

Spoj na jednakost (equi-join) obezbeđuje spajanje podataka iz dve ili više
tabela na osnovu jednakosti odgovarajućih atributa, obično na osnovu primarnih i
spoljnih ključeva.

Najjednostavniji slučaj navođenja spoja je kada se u WHERE klauzuli specificira
uslov spoja po jednakosti.

Dekartov proizvod je slučaj kada u WHERE klauzuli ne postoji uslov spoja, a u
FROM klauzuli je navedeno više tabela.

U tom slučaju nema spajanja vrsta po vrednosti nekog atributa, već se pravi
kombinacija svake vrste iz jedne tabele sa svakom vrstom iz druge tabele (u
slučaju Dekartovog proizvoda dve tabele)

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

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

Potrebno je obezbediti mehanizam koji će DBMS-u precizno specificirati kolonu koju želite da referencirate.Broj i RADNIK1.IME_KOLONE. SELECT * FROM SEKTOR1 CROSS JOIN RADNIK1. Isti pristup treba primeniti i za klauzulu SELECT ukoliko se javi sličan problem. SELECT * FROM SEKTOR1. RADNIK1.Sektor mada nije bilo neophodno jer kolone imaju različita imena.Modifikovane tabele RADNIK i SEKTOR Dekartov proizvod (cross-join) Dekartov proizvod dve tabele (A CROSS JOIN B) se dobija tako što se svaka vrsta iz jedne tabele kombinuje sa svakom vrstom iz druge tabele. Prilikom spajanja tabela treba voditi računa o tome da kolone u različitim tabelama mogu imati ista imena. U takvim situacijama se koristi sintaksa IME_TABELE. . U SQL upitima koji su dati u nastavku taj pristup je iskorišćen za kolone SEKTOR1. Prilikom korišćenja Dekartovog proizvoda tabela treba voditi računa da sintaksa CROSS JOIN nije podržana od strane MS Access-a.

Ukoliko vrsta iz tabele A nema odgovarajuću vrstu u tabeli B ne uključuje se u rezultat. RADNIK1 WHERE SEKTOR1. SELECT * FROM SEKTOR1 LEFT OUTER JOIN RADNIK1 ON SEKTOR1.Sektor.Sektor. SELECT * FROM SEKTOR1.Broj = RADNIK1.Sektor. . Kolone iz tabele B u ovom slučaju imaju vrednost NULL. u osnovi. Ovaj tip spoja pred vrsta koje uključuje unutrašnji spoj i vrste iz tabele A (leve tabele) koje nemaju odgovarajuću vrstu u tabeli B (desnoj tabeli).Unutrašnji spoj (inner-join) Inner join predstavlja najčešće korišćeni tip spoja. Ukoliko vrsti iz tabele A odgovara više vrsta tabele B ona se u rezultatu ponavlja više puta (po jednom za svaku odgovarajuću vrstu u tabeli B). Levi spoljašnji spoj (left-outer join) Left-outer join u osnovi predstavlja prošireni inner-join. Ovaj tip spoja.Broj = RADNIK1. Prilikom spajanja dve tabele (A INNER JOIN B) uzimaju se sve vrste iz tabele A i pronalazi im se odgovarajuća vrsta u tabeli B. SELECT * FROM SEKTOR1 INNER JOIN RADNIK1 ON SEKTOR1. definiše presek vrsta iz tabela koje učestvuju u spoju.Broj = RADNIK1.

.Broj = RADNIK1. Desni spolja[nji spoj u rezultat uključuje vrste iz tabele B (desne tabele) koje nemaju odgovarajuću vrstu u tabeli A (levoj tabeli).Sektor. Potpuni spoljašnji spoj (full-outer join) Full outer join predstavlja kombinaciju rezultata koje vraćaju left outer i right outer join. Poptpuni spoljašnji spoj sadrži vrste iz obe tabele (i iz A i iz B) koje nemaju odgovarajuće slogove u drugoj tabeli.Sektor. SELECT * FROM SEKTOR1 FULL OUTER JOIN RADNIK1 ON SEKTOR1. SELECT * FROM SEKTOR1 RIGHT OUTER JOIN RADNIK1 ON SEKTOR1.Desni spoljašnji spoj (right-outer join) Right outer join funkcioniše kao i left outer join samo je sada uloga tabela promenjena. MS Access ne podržava FULL OUTER JOIN sintaksu koja je korišćena u narednom SQL upitu.Broj = RADNIK1.

Sve normalne forme se baziraju na funkcionalnim zavisnostima između atributa tabele. Normalizacija sadrži pravila koja se mogu upotrebiti za testiranje tabela. Tabela koja ne ispunjava zahteve normalizacije mora se rastaviti na dve ili više tabela od kojih svaka pojedinačno ispunjava zahteve normalizacije. Inicijalno su promovisane tri normalne forme. Važno je napomenuti da je za kreiranje tabela u relacionom modelu podataka kritična samo 1NF. ove forme se bave situacijama koje su vrlo retke. uzimajući u obzir zahteve okruženja za čije potrebe se projektuje baza. Drugim rečima. njihove veze i odnose. Ipak. mora biti moguće rekonstruisati prethodne relacija na osnovu novodobijenih. prva (1NF). Da bi se postigao ovaj cilj. i to su četvrta (4NF) i peta (5NF) normalna forma. što rezultuje minimalnim ponavljanjem podataka i smanjenjem prostora potrebnog za skladištenje fajlova u kojima se čuvaju podaci. Ponavljanje podataka je pojava da se isti podaci koji se odnose na neki entitet nepotrebno pojavljuju u dve ili više tabela. preporučuje se normalizacija najmanje do 3NF. Sve ostale forme su opcione. Redundansa (ponavljanje) podataka i anomalije ažuriranja Jedan od najvažnijih ciljeva prilikom projektovanja relacione baze podataka je pravilno grupisanje atributa po tabelama. druga (2NF) i treća (3NF) normalna forma. da bi se izbegle anomalije ažuriranja. normalizacija je postupak kojim se proizvoljna nenormalizovana relacija transformiše u skup manjih normalizovanih relacija. a metoda koja se za to koristi naziva se normalizacija.F. Normalizacija je tehnika za kreiranje tabela sa odgovarajućim svojstvima. Normalizacija omogućava projektantu baze da izvrši optimalno grupisanje atributa po tabelama.Codd promovisali strožu defi niciju treće normalne forme koja se naziva Boyce-Codd normalna forma (BCNF). Proces normalizacije identifi kuje tabele na osnovu primarnih ključeva ili ključeva kandidata i na osnovu funkcionalnih zavisnosti koje postoje između atributa. U najopštijem smislu. moraju se pravilno uočiti odgovarajuće tabele. Kasnije su R. Ipak. tako da baza može da se normalizuje do bilo kog stepena. kao i ograničenja.Relacije loše structure Glavni cilj u procesu razvoja baze podataka je da se kreira sistem koji verno reprezentuje podatke. U tabelama koje sadrže .Boyce i E. Normalizacija se često realizuje tako što se vrši serija testova nad tabelom da bi se utvrdilo da li ona zadovoljava zahteve određene normalne forme ili ne. U okviru normalizacije ne sme doći do gubitaka informacija sadržanih u relaciji. Promovisane su i više normalne forme koje prevazilaze BCNF.

Anomalije unosa podataka Prilikom unosa novih podataka koji se odnose na jedan entitet. Anomalije promene podataka Prilikom promene vrednosti atributa koji se odnosi na jedan entitet. što može dovesti do nekonzistentnosti ako se načini greška prilikom unosa. Verovatno najvažnije ograničenje za očuvanje integriteta je uočavanje ključeva kandidata. U procesu njihovog definisanja. Anomalije ažuriranja mogu biti anomalije unosa. Anomalije brisanja podataka Brisanje poslednjeg zapisa koji se odnosi na jedan entitet iz tabele koja sadrži podatke koji se ponavljaju može dovesti do kompletnog gubitka podataka o drugom entitetu čiji se podaci nalaze u istoj tabeli. u tabeli koja sadrži podatke koji se ponavljaju moraju se promeniti i svi zapisi koji sadrže taj promenjeni atribut. U svakom koraku normalizacije: 1. Uočava se jedna takva zavisnost (XY) . u tabelu koja sadrži podatke koji se ponavljaju moraju se uneti i podaci koji se odnose na druge entitete čiji se podaci nalaze u istoj tabeli. Takođe je značajno ignorisati tzv.podatke koji se ponavljaju mogu da se jave problemi poznati kao anomalije ažuriranja. Postupak normalizacije Neka polazna šema relacije nije u određenoj normalnoj formi ako u skupu funkcijskih zavisnosti F postoji bar jedna koja narušava definiciju normalne forme. u istom zapisu. anomalije brisanja ili anomalije promene podataka. Osnovni razlog zbog koga se pristupa definisanju funkcionalnih zavisnosti za tabelu je potreba određivanja ograničenja za očuvanje integriteta (integrity constraints). a koji stoje u direktnoj vezi sa promenjenim atributom. jer one predstavljaju tipove ograničenja za očuvanje integriteta. pa stoga nisu od značaja. trivijalne funkcionalne zavisnosti. Funkcionalna zavisnost Funkcionalna zavisnost opisuje odnose između atributa u tabeli i predstavlja jedan od glavnih koncepata vezanih za normalizaciju. jer za njih važi da su uvek zadovoljene. kao i podaci koji se odnose na druge entitete. baza postaje nekonzistentna. od kojih se jedan bira za primarni ključ tabele. naročito je značajno pronaći one funkcionalne zavisnosti koje važe za sve moguće vrednosti atributa jedne tabele. Tipovi ograničenja za očuvanje integriteta definišu vrednosti koje tabela može legitimno da primi. Ako se ne izvrše sve ove promene.

2. a oni se tokom sledećih. viših faza procesa normalizacije uklanjaju iz tabele. Prva normalna forma (1NF) Tabela koja sadrži podatke koji se ponavljaju nalazi se u nenormalizovanoj formi (NNF) i naziva se nenormalizovana tabela. Ako je u polaznoj važilo XY. podaci koji se ponavljaju se. Normalne forme pomažu projektantu baze podataka da ostvari željeni kvalitet relacione baze podataka. pa je stoga u 1NF. Da bi se nenormalizovana tabela transformisala u 1NF. a druga nastaje nad atributima X i Y. Po drugom pristupu. vrednost svakog atributa je jednostruka i nedeljiva. tamo gde je to potrebno. Za novu tabelu se defi niše primarni ključ. odgovarajući podaci se ubacuju u prazne kolone redova koji sadrže podatke koji se ponavljaju. Svi nivoi normalizacije su kumulativni što znači da baza koja se nalazi u 2NF takođe mora da ispunjava i sve uslove zadate prvom normalnom formom. izmeštaju u posebnu tabelu. Rezultujuća tabela sadrži atomične (pojedinačne) vrednosti u preseku svakog reda i kolone. Proces analize šeme relacije je proces primene serije testova na šemu relacije da bi se proverilo da li ispunjava sva pravila defi nisana za određenu normalnu formu. Po prvom pristupu. . ako je svaki njen atribut skalarnog tipa. Ne dozvoljava se gubitak podataka Krajnji je cilj normalizacije najverovatnije treća normalna forma. Postoje dva uobičajena pristupa za uklanjanje podataka koji se ponavljaju iz nenormalizovanih tabela: 1. Šema relacije R je u prvoj normalnoj formi ako i samo ako domeni relacije R sadrže samo proste (“atomic”) vrednosti (proste vrednosti su vrednosti koje se ne mogu dalje deliti ili ako u konkretnoj situaciji nisu rastavljene na komponente Šema relacije je u 1NF. zajedno sa kopijom originalne vrednosti atributa ključa (ili originalne vrednosti više atributa ključeva). Dakle.U većini slučajeva ona predstavlja najbolji kompromis između ekstrema koji se odnose na funkcionalnost i lakoću implementacije. u ovom postupku se u tabelu namerno unose podaci koji se ponavljaju. tj. 4.U prvoj se gube atributi Y. Ponekad nenormalizovana tabela sadrži više od jedne grupe podataka koji se ponavljaju ili čak grupe unutar grupe. prazna polja se popunjavaju dupliranim podacima koji se ne ponavljaju. Drugim rečima. 2. U takvim slučajevima postupak izmeštanja se ponavlja sve dok se ne ukloni i poslednja grupa podataka koji se ponavljaju. Za grupu tabela se kaže da je u 1NF ako ne sadrže podatke koji se ponavljaju. Nivoi iznad 3FN u praksi mogu da iskomplikuju dizajn baze podataka do tačke da smetaju funkcionalnosti.dekompozicijom nastaju dve relacije. Vrši se dekompozicija u cilju uklanjanja takve zavisnosti 3. Tabela je u 1NF ako presek svakog njenog reda i kolone sadrži jednu i samo jednu vrednost. moraju se identifi kovati i ukloniti podaci koji se ponavljaju.

potrebno je da se ugnježdena relacija formira kao nezavisna relacija. koja će najpre biti defi nisana.Sati). Ime. I prvi pristup daje tabele koje su u 1NF. Sati): Druga normalna forma (2NF) Druga normalna forma se bazira na konceptu potpune funkcionalne zavisnosti. Primer: Šema relacije RADPROJ(JMBG. može se zaključiti da je drugi pristup direktniji i praktičniji. Funkcionalna . tj. {ŠifP. pri čemu su A i B atributi tabele. Šeme relacija sada imaju oblik: RADNIK(JMBG. ŠifP. mada drugi pristup direktno daje tabele koje su u najmanje 1NF. ali koje se tek u kasnijim fazama normalizacije razlažu na iste one tabele koje nastaju kao rezultat primene drugog pristupa.Oba pristupa su ispravna. Da bi ova šema relacije bila u 1NF nad njom se definiše sledeća relacija (sa nekim trenutnim sadržajem) Da bi se relacija RADPROJ prevela u bolju 1NF.Ime) i PROJEKAT(JMBG. Dakle. Sati}) sadrži ugnježdenu relaciju PROJEKAT(ŠifP. Potpuna funkcionalna zavisnost Funkcionalna zavisnost A B (čita se B je funkcionalno zavisno od A) je potpuna funkcionalna zavisnost ako uklanjanje bilo kog atributa iz A rezultuje time što zavisnost prestaje da važi. zajedno sa atributom JMBG čini njegov primarni ključ. Atribut ŠifP je parcijalni primarni ključ relacije RADPROJ.

ako A B (B je funkcionalno zavisno od A) i B C (C je funkcionalno zavisno od B). onda je C tranzitivno zavisno od A preko B (pod uslovom da A nije funkcionalno zavisno od B ili C).zavisnost A B je delimično zavisna ako postoje neki atributi koji se mogu ukloniti iz A. Defi nicija treće normalne forme Tabela je u 3NF ako je u 1NF i u 2NF i ako u njoj ne postoje atributi ne-primarni- ključevi koji su tranzitivno zavisni od primarnog ključa. tranzitivno zavisni atributi se izmeštaju u novu tabelu zajedno sa kopijom njihovih determinanti (ključeva). u tabeli mogu da se pojave anomalije ažuriranja zbog tranzitivnih zavisnosti. Tranzitivna zavisnost Tranzitivna zavisnost je stanje u kome su A. Tabela čiji primarni ključ sadrži samo jedan atribut je automatski u najmanje 2NF. koje se moraju ukloniti iz tabele postupkom normalizacije do 3NF. Normalizacija tabela iz 2NF u 3NF se vrši uklanjanjem tranzitivnih zavisnosti. a zavisnost i dalje važi. Treća normalna forma (3NF) Čak iako je u 2NF. funkcionalno zavisni atributi se izmeštaju u novu tabelu zajedno sa kopijom njihovih determinanti (ključeva). tj. Boyce-Codd normalna forma (BCNF) Druga i treća normalna forma eliminišu delimične i tranzitivne zavisnosti za primarne ključeve. tj. ali one ne razmatraju da li takve zavisnosti postoje i za . tabele čiji se primarni ključevi sastoje iz dva ili više atributa. tj. Normalizacija tabele iz 1NF u 2NF se vrši uklanjanjem delimičnih zavisnosti. U tabeli koja nije u 2NF mogu da se pojave anomalije ažuriranja. Tabela je u 2NF ako je u 1NF i ako je svaki atribut koji nije primarni ključ potpuno funkcionalno zavisan od primarnog ključa. Defi nicija druge normalne forme Druga normalna forma se odnosi na tabele sa složenim ključevima. B i C atributi tabele takvi da.

BCNF se bazira na funkcionalnim zavisnostima koje uzimaju u obzir sve ključeve kandidate u tabeli. koja uvek čuva sve funkcionalne zavisnosti. ako ih ima u tabeli. Tabela je u BCNF ako i samo ako je svaka determinanta ključ kandidat. Dakle. Zavisnost višestruke vrednosti biće objašnjena na primeru tabele EkspozituraZaposleniVlasnik iz baze podataka agencije za prodaju i izdavanje nekretnina. da se ostane na 3NF. Podsetićemo se da je determinanta atribut ili grupa atributa od kojih je neki drugi atribut potpuno funkcionalno zavisan. tj. Četvrta normalna forma (4NF) Iako BCNF eliminiše sve anomalije koje proističu iz funkcionalnih zavisnosti. Tabela se transformiše u BCNF tako što se vrši njena dekompozicija na dve ili više novih tabela. i u 3NF mogu da postoje delimične i tranzitivne zavisnosti za ključeve kandidate. Da bi se odredilo da li je tabela u BCNF. može se desiti da se prilikom dekompozicije tabele izgubi jedna ili više funkcionalnih zavisnosti zbog toga što se determinanta i od nje zavisni atributi izmeste u različite tabele. . Odluku da li normalizovati tabelu do BCNF ili stati kod 3NF treba doneti na osnovu sledeće analize:  Da li će značajni podaci biti izgubljeni u slučaju dekompozicije tabele i gubitka jedne ili više funkcionalnih zavisnosti  Kolika će biti količina redundantnih podataka (podataka koji se ponavljaju) u slučaju da se dekompozicija ne izvrši. pa je stoga promovisana stroža normalna forma poznata kao Boyce-Codd normalna forma (BCNF). potrebno je uočiti determinante i proveriti da li su sve one ključevi kandidati.ključeve kandidate. dalja istraživanja su dovela do uočavanja još jednog tipa zavisnosti koji se naziva zavisnost višestruke vrednosti koji takođe može da prouzrokuje redundatnost podataka. U ovakvoj situaciji treba proceniti da li je bolje stati kod 3NF. Međutim. tj. da se sastoji iz više podataka. Naime. Zavisnost višestruke vrednosti Pojava zavisnosti višestruke vrednosti u tabeli može da se desi zbog 1NF koja ne dozvoljava da atribut ima više vrednosti. ponekad nije poželjno normalizovati tabelu do BCNF. a sadrži i još neka ograničenja u poređenju sa 3NF.

zavisnost postoji zato što su u tabeli predstavljene dve nezavisne 1:* veze. B i C u tabeli. 4NF eliminiše redundantnost podataka (podatke koji se ponavljaju) i mogućnost pojave anomalija ažuriranja. a vlasnici nekretnina Jelena Janković i Predrag Stefanović su registrovani u istoj ekspozituri. pri čemu su vrednosti B i C nezavisne jedna od druge. mora se kreirati zapis za sve kombinacije zaposlenih i vlasnika da bi se obezbedila konzistentnost.U ovom primeru zaposleni Zoran Petrović i Miodrag Aleksić rade u ekspozituri B003. Tabela EkspozituraZaposleniVlasnik iz prethodnog pasusa se dekomponuje na tabele EkspozituraZaposleni i EkspozituraVlasnik. jer ne dozvoljava da tabele imaju zavisnost višestruke vrednosti. Defi nicija četvrte normalne forme Tabela je u 4NF ako je u BCNF i ako ne sadrži zavisnosti višestruke vrednosti. Peta normalna forma (5NF) Uvek kada se vrši dekompozicija tabele na dve nove. Drugim rečima. dakle B003. Normalizacija iz BCNF u 4NF se vrši dekompozicijom tabele i izmeštanjem atributa zajedno sa njihovim determinantama u novu tabelu. rezultujuće tabele imaju svojstvo poznato kao postojanost spajanja (lossless-join). Ovo svojstvo se odnosi na činjenicu da se tabele nastale dekompozicijom mogu ponovo spojiti u . takvu da za svaku vrednost A postoji više vrednosti B i više vrednosti C. 4NF je jača normalna forma od BCNF. Pošto ne postoji direktna veza između zaposlenih i vlasnika u datoj ekspozituri. Zavisnost višestruke vrednosti predstavlja zavisnost između atributa A. Ova situacija predstavlja zavisnost višestruke vrednosti u tabeli EkspozituraZaposleniVlasnik. a samim tim i redundantne podatke (podatke koji se ponavljaju).

prilikom ponovnog spajanja dve tabele u onu čijom su dekompozicijom nastale. . ovakvi slučajevi se rešavaju primenom pete normalne forme (5NF). postojanost spajanja osigurava da se. generišu samo oni podaci koji su postojali u originalnoj tabeli pre dekompozicije. Defi nicija pete normalne forme Tabela je u 5NF ako nema zavisnosti spajanja. Međutim. Postojanost spajanja (lossless-join) Postojanost spajanja je svojstvo dekompozicije koje omogućava da se. Važno je napomenuti da će ponovno spajanje bilo koje dve od novonastalih tabela generisati “lažne” podatke. prilikom ponovnog spajanja tabela. ali će zato ponovno spajanje svih novonastalih tabela verno rekonstruisati originalnu tabelu. što znači da je zagarantovana potpuna rekonstrukcija originalne tabele.originalnu tabelu. Normalizacija do 5NF se vrši dekompozicijom tabele u kojoj se uoče zavisnosti spajanja na više od dve nove tabele. Dakle. Iako se u praksi prilično retko sreću. generišu samo originalni podaci. postoje slučajevi kada je potrebno izvršiti dekompoziciju originalne tabele na više od dve nove tabele.