**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
----------------

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
--------

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

* **N-torka** se definiše kao uređeni skup od „n" elemenata. Na primer, ovaj podskup celih brojeva predstavlja jednu petorku:

```
 {\displaystyle (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č
--------------

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č
-------------

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.

Manipulisanje nad podacima u relacionom modelu
----------------------------------------------

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

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

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**.

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

#### Restrikcija

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:

{\displaystyle R[A\_{i}\;\ominus \;A\_{j}]=\{x\vert x\in R\land x[A\_{i}]\;\ominus \;x[A\_{j}]\}}
  

#### Relaciona unija, presek, razlika i Dekartov proizvod

**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:

{\displaystyle 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

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:

{\displaystyle R[A\_{i}\ominus B\_{j}]S=\{(r,s)\vert r\in R\land s\in S\land r[A\_{i}]\ominus s[B\_{j}]\}}
  

#### Prirodno spajanje

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:

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

#### Relaciono deljenje

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:

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

### Relacioni račun

**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

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

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
-------------

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)

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)

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)

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
-------------------------------------------------

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:

* Oracle Database - 70%
* Microsoft SQL Server - 68%
* MySQL (Oracle Corporation) - 50%
* IBM DB2 - 39%
* IBM Informix - 18%
* SAP Sybase Adaptive Server Enterprise - 15%
* Sybase IQ - 14%
* Teradata - 11%

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

* Oracle - 48,8 %
* IBM - 20,2 %
* Microsoft - 17%
* SAP Sybase - 4,6 %
* Teradata - 3,7 %
* Ostali - 5,8 %

Literatura
----------

* Gordana Pavlović-Lažetić - Uvod u relacione baze podataka.
* Hugh Darwen - An introduction to relational database theory --. ISBN 978-87-7681-500-4.
* Branislav Lazarević, Zoran Marjanović, Nenad Aničić, Slađan Babarogić - Baze podataka --. ISBN 978-86-7680-144-2.

Vidi još
--------

* Model objekti-veze
* IDEF1X
* ANSI-SPARC arhitektura
* Normalizacija baza podataka
* Transakcija