Relacijska baza podataka

Izvor: Wikipedia

Relaciona baza podataka je poseban tip baze podataka kod kojeg se organizacija podataka zasniva na relacionom modelu. Podaci se u ovakvim bazama organizuju u skup relacija između kojih se definišu određene veze. Relacija se definiše kao skup n-torki sa istim atributima, definisanih nad istim domenima iz kojih mogu da uzimaju vrednosti. U relacionim bazama podataka, svaka relacija mora da ima definisan primarni ključ, koji predstavlja atribut pomoću kojeg se jedinstveno identifikuje svaka n-torka. Relacija opciono može da poseduje i spoljni ključ, preko kojeg ostvaruje vezu sa drugim relacijama.

Upravljanje ovakvim bazama podataka se realizuje preko sistema za upravljanje relacionim bazama podataka. Među najpopularnijim takvim sistemima danas su: Microsoft SQL Server, Oracle Database, MySQL i drugi. Većina tih sistema koristi upitni jezik SQL za manipulaciju podacima.

Kratak istorijat[uredi - уреди]

Pojam relacionog modela počinje da se javlja sedamdesetih godina prošlog veka, a za njegovog osnivača se smatra Edgar Kod. On je bio rukovodilac u jednom od sektora IBM-a, zaduženog za proizvodnju računarskih hard diskova. U to vreme, baze podataka su se zasnivale na navigacionom modelu, kojeg je Edgar Kod smatrao neefikasnim, pre svega zbog slabih mogućnosti pretraživanja podataka u njima. Stoga je, 1970. godine, objavio veliki broj kratkih dela o relacionom modelu organizacije podataka, koja su predstavljala uvod u njegovo prvo veliko delo te tematike „Relacioni model za organizaciju velike količine podataka“. U tom delu je predstavio model, po kojem bi se podaci skladištili u tabele umesto u povezane liste, koje su predstavljale osnovu navigacionog modela. Navigacioni model je bio neefikasan i prilikom čuvanja podataka u kojima bi neki slog morao biti ostavljen prazan. Relacioni model bi to rešavao smeštanjem podataka u određeni broj normalizovanih tabela, s ‘tim da bi se ti opcioni podaci koji ne moraju imati vrednost smeštali van glavne tabele. Takođe, Kod je u svom delu naveo i velike prednosti relacionog modela u odnosu na navigacioni, koje se odnose na smeštanje, brisanje i čitanje podataka iz baze, jer ne bi postojala potreba za konstantnim prepravljanjem lnkova i pokazivača u čvorovima navigacionog modela. Za manipulaciju podacima u ovakvim bazama, Kod je predložio jezik koji se kasnije razvio u SQL. IBM je kasnije, na osnovu Kodove knjige, razvio prve sisteme za upravljanje relacionim bazama podataka, PRTV i IBM Business Systems 12.

Relacija[uredi - уреди]

Svaka relacija može bez ikakvih problema da se predstavi u tabelarnom obliku, ali i pored toga, relacija i tabela nisu isto. To je iz razloga što je kod tabela bitan redosled redova i kolona, dok kod relacija nije bitan redosled atributa i n-torki. Na primer, tabela 1 ima kolone sa redosledom: ime, prezime, jmbg. Tabela 2 ima kolone sa redosledom: jmbg, prezime, ime. Te dve tabele se ne smatraju istim, bez obzira što imaju iste nazive kolona. I pored toga što relacija i tabela nisu sinonimi, danas se uglavnom svaka relacija naziva tabelom, tj. njeni elementi se poistovećuju sa elementima koji čine jednu tabelu. Iz tog razloga su u sledećoj tabeli dati pojmovi iz relacionog i tabelarnog modela koji se odnose na isto.

Tabela Relacija
Red tabele N-torka
Kolona, naziv kolone, vrednost kolone Atribut, naziv atributa, vrednost atributa
Tabela Bazna relacija
Skup naziva kolona Relaciona šema
Pogled, rezultat upita Izvedena relacija

Osnovni pojmovi[uredi - уреди]

 (4,3,6,2,1)
  • Atribut predstavlja ime kojim se u relacionom modelu, identifikuje svaki od elemenata jedne n-torke. U donjem primeru atributi su "student", "status" i "prosek" a elementi n-torke su "Marko", "Budžet" i "8.2".
 (Student: "Marko", Status: "Budžet", Prosek: 8.2)
  • Relacija se definiše kao skup n-torki koji imaju iste atribute kojima su identifikovani njihovi elementi, i koji uzimaju vrednosti iz istih domena. Primer relacije:
 (Student: "Marko", Status: "Budžet", Prosek: 8.2)
 (Student: "Jovan", Status: "Budžet", Prosek: 9.1)
 (Student: "Bojan", Status: "Samof", Prosek: 7.8)

U relacionim bazama podataka postoje dve vrste relacija: bazne i izvedene. Bazne relacije su relacije koje se već nalaze u bazi podataka, tj. skladištene su na hard disku ili nekom drugom medijumu za čuvanje podataka. Izvedene relacije(ili pogledi) su relacije koje se dobijaju čitanjem i kombinovanjem podataka iz jedne ili više baznih relacija postavljanjem uslova upitnim jezikom, o kojem će biti reči kasnije.

  • Domen predstavlja skup vrednosti koje može da ima konkretni element n-torke. Domeni mogu biti semantički i predefinisani. Predefinisani domeni već postoje u jeziku baze podataka i neki primeri tih domena su Integer koji predstavlja skup celih brojeva, Float koji predstavlja skup realnih brojeva, DateTime za predstavljanje datuma i vremena u različitim formatima, i drugi. Semantičke domene definiše sam korisnik.

Primarni ključ[uredi - уреди]

U svakoj relaciji mora da postoji jedan ili više atributa zajedno, čije vrednosti jedinstveno identifikuju svaku n-torku u toj relaciji. Taj atribut, ili grupa atributa se naziva primarnim ključem relacije. U slučaju kada jedan atribut jedinstveno identifikuje svaku n-torku u relaciji imamo prost primarni ključ, a ako je identifikuju dva ili više atributa, onda je u pitanju složeni primarni ključ. Primarni ključ je dakle skup od K elemenata neke relacije, koji moraju da zadovoljavaju sledeća dva uslova: osobinu jedinstvenosti i osobinu neredudantnosti. Osobina jedinstvenosti podrazumeva da ne mogu da postoje bilo koje dve n-torke sa istom vrednošću atributa „K“. Osobina neredudantnosti podrazumeva da ako se izostavi bilo koji atribut iz K, gubi se osobina jedinstvenosti. U donjem primeru, atribut "Šifra" predstavlja prost primarni ključ relacije.

 (Šifra: 432, Student: "Marko", Status: "Budžet", Prosek: 8.2)
 (Šifra: 436, Student: "Jovan", Status: "Budžet", Prosek: 9.1)
 (Šifra: 527, Student: "Bojan", Status: "Samof", Prosek: 7.8)

Spoljni ključ[uredi - уреди]

Spoljni ključ predstavlja atribut (ili grupu atributa) neke relacije R1, koji u njoj nije primarni ključ, ali jeste u nekoj drugoj relaciji R2. S tim u vezi, relacija R1 se povezuje sa relacijom R2 preko spoljnog ključa. Da bi veza između te dve relacije bila ispravna, moraju se zadovoljiti pravila referencijalnog integriteta. Ukratko, pod referencijalnim integritetom se podrazumeva da sve vrednosti koje uzima atribut koji predstavlja spoljni ključ, moraju da postoje i u relaciji u kojoj je taj atribut primarni ključ. U primeru koji sledi, atribut "ŠifraSmera" predstavlja spoljni ključ u prvoj relaciji, i u ovom slučaju su zadovoljena pravila referencijalnog integriteta.

SpoljniKljuc.PNG


Manipulisanje nad podacima u relacionom modelu[uredi - уреди]

Formalizmi za manipulisanje podacima, koji su sastavni deo relacionog modela su : relaciona algebra i relacioni račun. Upitni jezici koji su u sastavu konkretnog sistema za upravljanje relacionim bazama podataka se zasnivaju na jednom od ova dva formalizma, ili na njihovoj kombinaciji.

Relaciona algebra[uredi - уреди]

Prema Kodovoj definiciji, relacionu algebru čini devet operacija nad relacijama, kojima se može pristupiti svakom podatku u datoj relaciji. Skup nekih relacija, i operacija koje se nad njima izvršavaju se naziva izraz relacione algebre, i njegov rezultat je uvek relacija. Operacije relacione algebre predstavljaju operacije analogne skupovnim operacijama unije, preseka, razlike i Dekartovog proizvoda. U njih još spadaju i specifične relacione operacije koje se dele u dve grupe: unarne i binarne. Unarne operacije se izvršavaju nad samo jednom relacijom, i u njih spadaju: projekcija i restrikcija. U binarne operacije spadaju: prirodno spajanje, slobodno spajanje i relaciono deljenje.

Projekcija[uredi - уреди]

Uzmimo npr. neku relaciju R sa njenim atributima {A1, A2, …, An}. Neka X predstavlja podskup skupa atributa {A1, A2, …, An}, a Y razliku između skupa X i skupa {A1, A2, …, An}. Tada se relacija R može predstaviti kao R(X,Y). Dakle, rezultat projekcije relacije R na skup atributa X je relacija koja uključuje samo atribute iz skupa X.

R[X]=\{x \vert x \in X \and \exists y \in Y, (x,y) \in R(X,Y)\}

Restrikcija[uredi - уреди]

Operacijom restrikcije se biraju n-torke u celosti koje zadovoljavaju logički izraz naveden u oznaci operacije. Argumenti logičkog izraza mogu biti: poređenje vrednosti dva atributa zadate relacije i poređenje vrednosti jednog atributa zadate relacije sa nekom konstantom. Operacije logičkog izraza su logičke operacije: AND, OR, NOT. Neka je, npr., θ relacijska operacija iz skupa {<,>,≤,≥,≠}, i neka su {Ai, Aj} atributi neke relacije R koji su definisani nad istim domenom. Restrikcija se tada predstavlja sledećim izrazom:

R[A_i\;\ominus\;A_j]=\{x \vert x \in R \and x[A_i]\;\ominus\;x[A_j]\}

Relaciona unija, presek, razlika i Dekartov proizvod[uredi - уреди]

Relacionom unijom se sve n-torke iz dve odabrane relacije predstavljaju jednom relacijom, pod uslovom da su n-torke u tim relacijama iste vrste(npr. n-torke u obema relacijama predstavljaju knjige). Predstavlja se sledećim izrazom:

R \cup S=\{x \vert x \in R \text{ ili } x \in S\}

Pod istim uslovima se realizuju i presek i razlika.
Dekartov proizvod relacija R1 i R2 koje imaju n1 i n2 atributa se definiše kao relacija R1xR2 sa n1+n2 atributa, što praktično znači da su samo na atribute prve relacije dopisani atributi druge relacije.

Slobodno spajanje[uredi - уреди]

Operacija slobodnog spajanja koja se primenjuje na dve relacije R i S koje imaju m i n atributa, daje kao rezultat relaciju sa m+n atributa. Neka je θ relacijska operacija iz skupa {<,>,≤,≥,≠}. Tada se operacija slobodnog spajanja relacija R i S po atributima Ai i Bj realizuje po sledećoj formuli:

R[A_i \ominus B_j]S=\{(r,s) \vert r \in R \and s \in S \and r[A_i] \ominus s[B_j]\}

Prirodno spajanje[uredi - уреди]

Pod prirodnim spajanjem se podrazumeva spajanje po jednakosti, i može se izvesti po jednakosti pojedinačnih atributa dve relacije, ili po jednakosti podskupova određenih atributa. Neka imamo relacije R i S sa skupovima atributa {A1, A2, …, An} i {B1, B2, …, Bm}. Neka je X podskup atributa relacije R, a Y podskup atributa relacije S. Neka je Z razlika između X i skupa atributa prve relacije R, a W razlika između Y i skupa atributa druge relacije S. Relacije R i S se tada mogu predstaviti kao R[X,Z] i S[Y,W]. Tada se operacija spajanja relacija R i S po skupovima atributa X,Y definiše na sledeći način:

R[X*Y]S=\{(z,x,w)\vert(z,x) \in R \and (y,w) \in S \and x=y\}

Relaciono deljenje[uredi - уреди]

Operacija deljenja relacije R(X; Y) po zadatom skupu atributa Y drugom relacijom T daje rezultat koji se sastoji od projekcija n-torki relacije R na atribute X i to samo onih projekcija n-torke koje se dekartovski pomnožene sa svakom vrstom relacije T sadrže u relaciji R. Neka je R relacija sa atributima {A1, A2, …, An}, Y podskup skupa {A1, A2, …, An}, a X = {A1, A2, …, An} \ Y. Neka relacija T(Z1, Z2, ..., Zk) ima isti broj atributa kao skup Y pri čemu su parovi odgovarajućih atributa definisani nad istim domenima. Operacija deljenja relacije R po skupu atributa Y sa relacijom T definiše kao:

R[Y \div Z]T=\{x \vert x \in R[X] \and \{x\} \times T(Z) \subseteq R(X,Y)\}

Relacioni račun[uredi - уреди]

Relacioni račun je drugi formalizam za manipulisanje podacima. Relaciona algebra daje skup operacija za izgradnju relacije rezultata, a relacioni račun pruža notaciju za opisivanje svojstava te relacije rezultata. Relacioni račun se bazira na predikatskom računu prvog reda. Edgar Kod je dao dve varijante: relacioni račun n-torki i relacioni račun domena.

Relacioni račun n-torki[uredi - уреди]

Relacioni račun n-torki predstavlja formalizam za izradu izraza relacionog računa. Najvažnije njegovo svojstvo je n-torna promenljiva. To je promenljiva koja je vezana za određenu relaciju, i kao vrednosti uzima samo njene n-torke. Relacija za koju je vezana n-torna promenljiva se naziva dijapazon n-torne promeljive.

Izraz relacionog računa n-torki je oblika { (t1,t2,…,tk) : f }, pri čemu važi sledeće:

  1. t1,t2,…,tk su n-torne promenljive, i njihov skup se naziva „ciljna lista“.
  2. f je formula, odnosno kvalifikacioni izraz koji se gradi od „atoma“ i operacija na sl. način:
    1. Slobodne promenljive u formuli f su one koje se nalaze u ciljnoj listi.
    2. Ako je R relacija a s n-torna promenljiva vezana za nju, to vezivanje se označava sa R(S)
    3. Ako su S i U n-torne promenljive, a konstanta, θ operacija poređenja {<,>,≤,≥,≠} onda oznaka „S[i] θ U[j]“ označava poređenje i-te promenljive komponente S sa j-tom promenljivom komponente U, i naziva se atom poređenja.
    4. Svaki atom je formula. Sve n-torne promenljive atoma su slobodne promenljive u toj formuli.
    5. Ako su f i g formule, onda su formule i: f AND g, f OR g i NOT f, (Es)(f) i (Es)(f). Pojavljivanje promenljive je vezano u (Es)(f) i (Es)(f).


Primer: Imamo relacije: P koja predstavlja pesmu, I koja predstavlja izvođača i KI koja definiše koji izvođač izvodi koju pesmu. Neka su r, s, t imena n-tornih promenljivih, i P(r), I(t), KI(s) atomi njihovih pripadnosti relacijama. Označimo sa r[i] i-ti atribut promenljive r. Tada su primeri izraza relacionog računa:

fr[2] : K(r)g (nazivi svih pesama)

fr[2] : K(r) AND r[3] =’ROCK’g (naslovi svih rok pesama)

Relacioni račun domena[uredi - уреди]

Kod relacionog računa domena, promenljiva je definisana nad domenom atributa(domenska promenljiva), a ne nad relacijom. Izraz relacionog računa domena ima sledeći oblik:
{X1, X2, …, XK | f}

Pri čemu važi:

  1. x1, x2, … , xk su domenske promenljive.
  2. F je formula relacionog računa domena čije su slobodne promenljive x1, x2, … ,xk. Ta formula se definiše na isti način kao i kod relacionog računa n-torki, sa malo modifikovanim oblikom.
    1. Ako je R relacija stepena n, a y1, y2, … , yn konstante ili domenske promenljive nad domenima atributa relacije, onda je R(y1, y2, … ,yn) atom. Vrednosti yi moraju biti izabrane tako da y1, y2, …, yn predstavlja n-torku relacije R.
    2. Ako su x, y domenske promenljive, „a“ konstanta, a θ operacija poređenja, onda su x θ a, x θ y atomi. NJihovo značenje je da par vrednosti x,y mora biti izabran tako da je poređenje θ tačno.


Upitni jezici[uredi - уреди]

Upitni jezici su namenjeni za komunikaciju sa relacionom bazom podataka, tj. za kreiranje relacionih šema i ažuriranje i čitanje podataka iz relacija. Mogu se najopštije klasifikovati na: jezike dobijene nadgradnjom proceduralnih programskih jezika, jezike zasnovane na relacionom računu domena ili n-torki, jezike zasnovane na relacionoj algebri i jezike koji se zasnivaju na kombinaciji relacione algebre i relacionog računa. Najzastupljeniji upitni jezik danas je SQL(Structured Query Language), razvijen 80-ih godina prošlog veka od strane istraživačke IBM laboratorije u San Hozeu u Kaliforniji. Podržavaju ga gotovo svi sistemi za upravljanje relacionim bazama podataka. I pored njegove velike rasprostranjenosti, veliki značaj se pridaje i upitnom jeziku QUEL(QUEry Language), koji je razvijen takođe u Kaliforniji, na univerzitetu u Berkliju.

Structured Query Language (SQL)[uredi - уреди]

SQL predstavlja poslednju fazu razvoja upitnih jezika od strane istraživačke IBM laboratorije. NJegovi prethodnici razvijeni od strane te IBM laboratorije su bili upitni jezici SQUARE i SEQUEL. SQL standard je objavljen 1989. godine i odmah je bio široko prihvaćen na tržištu. Neki od bitnih svojstava su mu: jezik za definisanje podataka(Data Definition Language), jezik za manipulaciju podacima(Data Manipulation Language), spoljašnje i unutrašnje spajanje, kaskadno ažuriranje i brisanje, skupovne operacije (unija, presek i razlika) spajanje itd. Prikazaćemo neke najosnovnije pojmove vezane za ovaj upitni jezik.

Jezik za definisanje podataka (Data Definition Language)[uredi - уреди]

Ovaj deo upitnog jezika služi za kreiranje i ažuriranje objekata koji čine relacionu bazu podataka, a tu spadaju bazne relacije, relacione šeme, semantički domeni, indeksi itd.

Generički DDL upit za kreiranje bazne relacije(tabele):

    CREATE TABLE <naziv tabele> 
(<naziv kolone1> <tip podataka> [not null],
<naziv kolone2> <tip podataka> [not null],
... )

Generički DDL upit za kreiranje semantičkog domena:

    CREATE DOMAIN <naziv domena> [AS] <predefinisani tip>
    [DEFAULT <vrednost>]
    [[CONSTRAINT <naziv ogranicenja>] CHECK (<ogranicenje>)]
     ...

Generički DDL upit za izmenu definicije relacije(tabele):

    ALTER TABLE <naziv tabele>
    ADD [COLUMN] <definicija kolone>

Jezik za manipulaciju podacima (Data Manipulation Language)[uredi - уреди]

Ovaj deo upitnog jezika služi za manipulaciju podacima u bazi, tj. za prikazivanje, brisanje, ubacivanje i ažuriranje podataka. S tim u vezi, sastoji se od četiri osnovne komande: SELECT, INSERT, UPDATE, DELETE.

Generički upit za čitanje podataka iz baze, koji se oslanja na operacije restrikcije i projekcije iz relacione algebre.

    SELECT < lista atributa >
    FROM < lista relacija >
    WHERE < kvalifikacioni izraz >

Generički upit za ubacivanje podataka u bazu:

    INSERT INTO naziv_tabele
    VALUES (vrednost_atr1, vrednost_atr2,. .. )

Generički upit za brisanje podataka iz baze:

    DELETE FROM naziv_tabele
    WHERE [kriterijum selekcije n-torki]

Generički upit za ažuriranje podataka u bazi:

    UPDATE naziv_tabele
    SET(atribut1, atribut2, ...)=(nove vrednosti)
    WHERE [kriterijum selekcije n-torki]

Operatori unije, preseka i razlike Ove operacije se oslanjaju na istoimene operacije u relacionoj algebri. Primer preseka:

    SELECT atribut_1
    FROM tabela_1
    EXCEPT 
    SELECT atribut_2 
    FROM tabela_2;

Sistemi za upravljanje relacionim bazama podataka[uredi - уреди]

Prema podacima američke kompanije za istraživanje Gartner, pet vodećih proizvođača sistema za upravljanje relacionim bazama podataka u 2011. godini po prihodu su bili: Oracle, IBM, Microsoft, SAP i Teradata. Trenutno, tri najzastupljenija besplatna sistema za upravljanje relacionim bazama podataka su: MySQL, PostgreSQL, i SQLite. Po istraživanju iste kompanije u 2008. godini je procenat korišćenja sistema za upravljanje relacionim bazama na veb-sajtova bio sledeći[1]:

Udeo na tržištu proizvođača sistema za upravljanje relacionim bazama podataka 2012. godine je bio[2]:

Reference[uredi - уреди]

Literatura[uredi - уреди]

Vidi još[uredi - уреди]