Relacione baze podataka
Relacione baze podataka su i danas izuzetno zastupljene u informacionim sistemima. Zasnovane su na relacionom modelu, prema kome se podaci smeštaju unutar relacija (tabela) koje predstavljaju skupove slogova (redova) koji poseduju atribute (kolone). Relacije (tabele) mogu biti bazične (koje sadrže same podatke) ili izvedene (rezultati kreirani na osnovu bazičnih). Operacije nad relacionom bazom podataka nazivaju se relaciona algebra i njen dobar deo potiče iz matematičke teorije skupova. To znači da se nad skupovima podataka mogu kreirati unije i preseci, kao i da se pronalaze podskupovi.[1]
Kod relacionih baza, podaci se beleže u obliku tabela, što nas na prvi pogled može asocirati na programe za tabelarne kalkulacije, međutim, postoje neke suštinske razlike.
Tabele u spreadsheet programima | Tabele u bazama podataka |
---|---|
Iako veoma velik, broj redova i kolona je unapred ograničen | Broj kolona je ograničen, ali broj redova zavisi samo od količine dostupne memorije na disku |
Osnovni podatak je ćelija, a podaci su raspoređeni u niz – za svaku ćeliju se tačno zna „adresa“ i bitno je u kojoj ćeliji se nalazi koji podatak | Osnovni podatak je red (slog, zapis), a podaci su raspoređeni u skup – ne postoji „prvi“ ili „poslednji“ podatak – svi su ravnopravni, a kasnije se mogu sortirati prema nekom kriterijumu |
Bilo koja ćelija može sadržati bilo koji podatak, bilo kog tipa (tekstualni, numerički i sl.) | Podaci imaju strukturu – svaka kolona sadrži istorodne podatke (npr. kolona za imena, kolona za datume rođenja i sl.) |
Ćelije mogu sadržati podatke ali i formule za izračunavanja | U tabelama se beleže isključivo podaci |
Uporedni pregled karakteristika tabela u spreadsheet programima i bazama podataka
Osnovni koncepti sa kojima se susrećemo u radu sa bazama podataka su:
- tipovi podataka;
- normalizacija;
- primarni i strani ključevi;
- veze među tabelama i
- indeksi.
Tipovi podataka
Kako bi rad bio efikasniji, podaci u tabelama se moraju „tipizirati“ prema svom sadržaju. Tako baze podataka prepoznaju različite tipove podataka (tekstualni, celobrojni, brojevi sa decimalama, logički, datumski i sl).
Numerički podaci | Tekstualni podaci |
---|---|
1 | 1 |
5 | 1125 |
6 | 12 |
12 | 32 |
32 | 5 |
579 | 579 |
1125 | 6 |
Sortiranje numeričkih i tekstualnih podataka
Istina je da bi svaki podatak mogao da se predstavi u obliku teksta, međutim, rad sa takvim podacima bi narušio performanse celog sistema – sortiranje, pretraga, izračunavanje rezultata bilo bi veoma usporeno pošto bi podaci morali stalno da se pretvaraju iz teksta u odgovarajuće tipove. U priloženoj tabeli možemo videti kako se razlikuje sortiranje brojeva, od brojeva predstavljenih u tekstualnom obliku. Brojevi koji su dati u numeričkom obliku sortiraju se po vrednosti, dok se brojevi dati u tekstualnom obliku sortiraju prema ciframa.
Normalizacija
U sledećem primeru vidimo tabelu u kojoj su dati podaci o studentima i njihovim položenim ispitima.
INDEKS | GODINA | IME | PREZIME | ISPIT | PROFESOR | OCENA | POENI |
---|---|---|---|---|---|---|---|
5/2010 | 2010 | Milan | Jovanović | INF | 55 | 9 | 87 |
49/2010 | 2010 | Saša | Arsenić | INF | 55 | 6 | 55 |
156/2009 | 2009 | Ana | Stojanović | PRA | 19 | 7 | 66 |
5/2010 | 2010 | Milan | Jovanović | STA | 24 | 10 | 100 |
170/2010 | 2010 | Jasna | Gajić | INF | 4 | 6 | 55 |
170/2010 | 2010 | Jasna | Gajić | PRA | 19 | 7 | 65 |
5/2010 | 2010 | Milan | Jovanović | PRA | 19 | 6 | 59 |
Ono što primećujemo jeste da se jedan broj podataka ponavlja (za svaki ispit koji je neki student položio ponavljaju se svi podaci vezani za tog studenta). Mane su višestruke i očigledne – bespotrebno zauzimanje memorije, gubljenje vremena prilikom unosa podataka, veća mogućnost greške. Ovakva situacija je česta prilikom projektovanja baze podataka i rešava se kroz proces koji se naziva normalizacija. Normalizacija se na najjednostavniji način može definisati kao proces razdvajanja podataka na više tabela, tako da:
- ne postoje nepotrebna ponavljanja podataka (prva normalna forma);
- svi podaci budu direktno zavisni od primarnog ključa (druga normalna forma);
- svi podaci budu direktno zavisni od svih delova primarnog ključa, ako se primarni ključ sastoji iz više polja (treća normalna forma).[2]
Suštinski, najvažniji rezultat normalizacije je uklanjanje nepotrebnih ponavljanja u podacima. Osim toga, svako polje bi trebalo da bude nezavisno – uz mogućnost da se promeni bez menjanja drugih polja. Takođe, polja ne bi trebalo da sadrže podatke koji se izračunavaju na osnovu već postojećih polja.
Najjednostavniji primer normalizacije u ovom slučaju jeste razdvajanje na dve tabele – u jednoj se nalaze samo podaci o studentima, a u drugoj podaci o položenim ispitima.
INDEKS | GODINA | IME | PREZIME |
---|---|---|---|
5/2010 | 2010 | Milan | Jovanović |
49/2010 | 2010 | Saša | Arsenić |
156/2009 | 2009 | Ana | Stojanović |
170/2010 | 2010 | Jasna | Gajić |
STUDENT | ISPIT | PROFESOR | OCENA | POENI |
---|---|---|---|---|
5/2010 | INF | 55 | 9 | 87 |
49/2010 | INF | 55 | 6 | 55 |
156/2009 | PRA | 19 | 7 | 66 |
5/2010 | STA | 24 | 10 | 100 |
170/2010 | INF | 4 | 6 | 55 |
170/2010 | PRA | 19 | 7 | 65 |
5/2010 | PRA | 19 | 6 | 59 |
Ključevi
Već je rečeno da jedan red podataka u tabeli predstavlja jedan element skupa. Kao što je poznato, svaki element skupa je jedinstven (ne mogu postojati dva ista), što znači da je u tabeli zabranjeno da se pojave dva potpuno ista reda podataka. Međutim, neki podaci se zbog svoje prirode moraju ponavljati (npr. sasvim je moguće imati dva studenta sa istim imenom). Zbog toga svaka tabela mora imati bar jednu kolonu (ili kombinaciju kolona) u kojoj će svi podaci garantovano uvek biti različiti – tzv. primarni ključ. Primarni ključ predstavlja podatak koji jedinstveno identifikuje svaki red tabele.
Ukoliko među podacima ne postoji podatak koji bi bio prihvatljiv kao primarni ključ (matični brojevi građana, broj indeksa...), moramo kreirati neki nov podatak – veštački primarni ključ (npr. ako uvedemo neku novu šifru kao podatak).
U gornjem primeru, za studente je broj indeksa sasvim prihvatljiv kao primarni ključ. Sa druge strane, u tabeli položenih ispita primećujemo da ne postoji kolona u kojoj će podaci biti uvek različiti. Međutim, ako pažljivije osmotrimo, vidimo da je svaki student mogao samo jednom da položi jedan predmet, pa tako kombinacija kolona student+ispit predstavlja primarni ključ.
Da bi se uspostavila veza između dve tabele potrebno je da postoje kolone u kojima se nalaze odgovarajući podaci. Polje koje služi za povezivanje sa drugom tabelom naziva se strani ključ. U primeru, polje student iz tabele o ispitima služi za povezivanje sa tabelom o studentima i samim tim predstavlja strani ključ.
Veze među tabelama
Razdvojene tabele se mogu povezivati kako bi se dobili kompleksni rezultati prilikom upita. Postoje tri tipa veze koje se mogu uspostaviti među tabelama.
- Jedan-prema-jedan. Jednom podatku iz jedne tabele odgovara tačno jedan podatak iz druge tabele. Ova veza se ostvaruje povezivanjem dva primarna ključa. Npr. možemo imati dve tabele sa podacima o studentima – u jednoj se mogu naći podaci iz dosijea studenta, a u drugoj podaci o njegovom uspehu na prijemnom ispitu. Jednom studentu odgovara tačno jedan podatak iz tabele prijemnog ispita.
- Jedan-prema-više. Jednom podatku iz jedne tabele odgovara jedan ili više podataka iz druge tabele. Ova veza nastaje povezivanjem primarnog i stranog ključa. Npr. jedan student može imati više položenih ispita koji se beleže u tabeli ispiti.
- Više-prema-više. Ova veza nastaje kada za više podataka iz jedne tabele postoji više odgovarajućih podataka iz druge tabele. Veze više-prema-više u stvari predstavljaju dve uzajamne veze jedan-prema-više. Primer bi bila situacija kada jedan profesor može držati više različitih predmeta u školi, a istovremeno na jednom predmetu može biti više profesora. Ovakve veze se obično ne kreiraju direktno među tabelama, već postoji jedna posrednička tabela koja služi za povezivanje.
Indeksi
Jedan od osnovnih zadataka baze podataka je njihovo pretraživanje. Međutim, što ima više podataka, proces pretraživanja i sortiranja postaje sve sporiji. Ovaj problem se rešava uvođenjem indeksa. Indeksi su „interne“ tabele kojima manipuliše sama baza podataka. U njima se nalaze podaci koji su već sortirani, tako da je pretraživanje veoma ubrzano. Sa druge strane, unos, brisanje i promena podataka postaje sporija, pošto za svaku promenu treba osvežavati i sam indeks.
- Ambler, S.W. (2011), AgileData, On Relational Theory: Questioning the Dogma
- Ambler, S.W. (2010), AgileData, Introduction to Data Normalization: A Database "Best" Practice