Relācija (datubāze)

**Relācija** ir datu struktūra, kas sastāv no virsraksta un no nesakārtotas kortežu kopas, kuras lieto vienādus datu tipus. Relāciju datubāzes izmanto fiksēta formāta savstarpēji saistītas tabulas. Pastāv vairāki relāciju tipi (1:1 ; 1:n)
:: Kad Edgars Kods (*Edgar Codd*) izgudroja relāciju modeli, viņš ieviesa jēdzienu no binārās relācijas (matemātiskās relācijas) uz **n-āro relāciju**. Relācija ir pamatjēdziens relāciju modelī.
: Relācijai ir nulle vai vairāk kortežu (angļu: *tuples*).
: **Relācijas vērtība** ir relācijas instance.
: **Relācijas mainīgais** (*relvar*) ir mainīgais, kuram ir relācijas vērtība.

Dažos kontekstos relācija nozīmē relācijas mainīgais. Citos kontekstos relācija nozīmē relācijas vērtība.

Iekš SQL relāciju mainīgais tiek saukts par tabulu (*table*).
thumbnail|right|540px|Relācijas modeļa jēdziens

Relācijas vērtība, kas ir piešķirta noteiktam relācijas mainīgajam, ir laik-mainīga. Lietojot Datu Definīcijas Valodas (*Data Definition Language (DDL)*), ir iespējams definēt relācijas mainīgos.
: **Virsraksts** (angļu: *heading*) ir nesakārtota kopa, kas sastāv no noteiktiem atribūtiem (kolonnām)(angļu: *columns*). Virsrakstam ir nulle vai vairāk šo atribūtu.
: **Ķermenis** (angļu: *body*) ir nesakārtota kortežu kopa, kas sastāda relācijas vērtību. Citiem vārdiem sakot, relācijas vērtība sastāv no virsraksta un ķermeņa.
: **[[Kortežs]]** (angļu: *tuple*) ir datu struktūra, kas sastāv no nesakārtotas kopas, kas, savukārt, sastāv no nulle vai vairāk atribūtiem. Kortežu vienkāršoti sauc arī par rindu (angļu: *row*).
: **Atribūts** (kolonna) ir atribūta vārda un domēna vārda pāris. Domēns var tikt ņemts vērā no datu tipa, vai vienkārši, no tipa.
: Atribūtam ir atribūta vērtība, kas atbilst tā domēnam. Atribūta vērtība ir skalāra vai pat vēl sarežģītāk strukturēta vērtība.
: **Relācijas [[pakāpe]]** ir atribūtu skaits, kas atbilst virsrakstam. Relācijas vērtības pakāpe ir nulle vai cits vesels skaitlis (angļu: *integer*). *N-āra* relācija ir relācijas vērtība, kurā tās pakāpe ir *n*.
: **Relācijas kopas lielums** (no angļu: *cardinality*) ir to kortežu skaits, kas sastāda relācijas vērtību. Relācijas vērtības kopas lielums ir nulle vai cits vesels skaitlis.
Relāciju vērtībā nav divu vienādu kortežu. Kandidātatslēga ir noteikta minimālā kopa, kas sastāv no viena vai vairākiem atribūtiem, kuri var unikāli identificēt relācijas vērtībai raksturīgos kortežus.

## Piemēri

Šis ir piemērs virsrakstam, kas sastāv no trīs atribūtiem:

Šis ir piemērs relāciju vērtībai, kas sastāv no iepriekšminētā virsraksta un kortežiem (rindām), kas, savukārt, atbilst virsrakstam. Šis piemērs parāda relācijas vērtību pārskatāmas tabulas formā.

Iepriekšminētā relāciju vērtība iekļauj sevī četras rindas, kas lieto vienādus datu tipus. Kā jau iepriekš tika noskaidrots atribūti (kolonnas) ir nesakārtoti. Citiem vārdiem sakot, ir nepareizi teikt, ka kolonna ‘Adrese’ ir pa labi no kolonnas ‘Vārds’, kā arī nepareizi ir teikt, ka kolonna ‘Adrese’ ir trešais atribūts. Arī korteži (rindas) ir nesakārtoti. Tātad ir nepareizi teikt, ka rinda ‘MURATA Makoto’ ir augstāk par rindu ‘MATSUMOTO Yukihiro’, kā arī ir nepareizi teikt, ka rinda ‘YONEZAWA Akinori’ ir pirmā.

## Bāzes relācijas mainīgais un atvasināts relācijas mainīgais (view)
Relāciju mainīgie (relvars) ir klasificēti divās klasēs, kuras ir — bāzes relāciju mainīgie un atvasinātie relāciju mainīgie.
 
**Bāzes relācijas mainīgais** ir relācijas mainīgā avots, kas nav atvasināts no neviena cita relācijas mainīgā. Iekš SQL termins bāzes tabula var tikt rupji uzskatīts par to pašu bāzes relāciju mainīgo. Lietojot DDL ir iespējams definēt bāzes relācijas mainīgos. Lietojot SQL un komandas CREATE TABLE sintaksi, arī ir iespējams definēt bāzes relācijas mainīgos.

Piemērs:
```sql
CREATE TABLE List_of_people (
 ID INTEGER,
 Name CHAR(40),
 Address CHAR(200),
 PRIMARY KEY (ID)
)
```


**Atvasināts relācijas mainīgais** ir relācijas mainīgais, kas ir atvasināts no viena vai vairākiem relāciju mainīgajiem atsaucoties uz relācijas algebras izteiksmēm vai relācijas aprēķināšanas izteiksmēm. Skats ir uzskatāms par atvasinātu relāciju mainīgo. Lietojot DDL, ir iespējams definēt atvasinātus relāciju mainīgos. Lietojot SQL, precīzāk, komandas CREATE VIEW sintaksi, arī ir iespējams definēt atvasinātus relāciju mainīgos.

Piemērs:
```sql
CREATE VIEW List_of_Okinawa_people AS (
 SELECT ID, Name, Address
  FROM List_of_people
  WHERE Address LIKE '%, Okinawa'
)
```


## Primārās atslēgas
Primārā atslēga unikāli definē attiecības ar ierakstiem datu bāzē. Lai raksturlielums tiktu uzskatīts par labu, primārā atslēga nedrīkst atkārtoties. Lai gan naturālie atribūti ir labas primārās atslēgas, aizvietotājpases taustiņus var bieži izmantot to vietā. Aizvietotājpases taustiņš ir mākslīgi piešķirts atribūts objektam, kurš unikāli to identificē, piemēram, tabulas ar informāciju par studentiem augstskolā, viņiem visiem varētu tikt piešķirti studenta ID, lai atšķirtu studentus vienu no otra. Aizvietotājpases taustiņam nav raksturīga nozīme, bet drīzāk tas ir noderīgs ar savu spēju identificēt ierakstu.

## Ārējās atslēgas
Ārējā atslēga ir lauks relāciju tabulas, kas atbilst primārajai atslēgai citā kolonnas tabulā. Ārējā atslēga var tikt izmantota starpnozaru atsauces tabulās. Ārējajām atslēgām nav jābūt unikālām vērtībām saistībā ar atsaucēm. Ārējās atslēgas efektīvi izmanto vērtību atribūtus attiecībā uz domēna viena vai vairākiem raksturlielumiem, kas saistās ar atsaucēm.

## Domēns
Domēns apraksta iespējamo vērtību kopumu konkrētam atribūtam, un to var uzskatīt par atribūtu vērtību ierobežojumu. Matemātiski, pievienojot domēnu atribūtam nozīmē, ka jebkura vērtība ko piešķir atribūtam ir jābūt elementam no nodefinētās kopas. Simbolu datu vērtība "ABC", piemēram, nav veselo skaitļu domēnī. Veselais skaitlis 123, atbilst domēna ierobežojumam.

## Ierobežojumi
Ar Ierobežojumiem ir iespējams vēl vairāk ierobežot domēna atribūtu. Piemēram, ierobežojums var ierobežot konkrētā veselo skaitļu atribūtu vērtību starp 1 un 10. Ierobežojumi sniedz vienu metodi kā īstenot biznesa noteikumus datu bāzē. SQL ievieš ierobežojumu funkcionalitāti ar pārbaudes ierobežojumiem.

Ierobežojumi nosaka datus, ko var uzglabāt relācijā. Tie parasti tiek definēti izmantojot izteiksmes, kuru rezultāts ir Būla vērtība, norādot, vai dati atbilst ierobežojumam. Ierobežojumi var attiekties uz atribūtiem, uz kortedžu (ierobežojoša atribūtu kombinācija), vai uz visu relāciju.

Tā kā katram atribūtam ir attiecīgais domēns, pastāv ierobežojumi (domēnu ierobežojumi). Divi galvenie principi par relāciju modeli ir pazīstami kā entītiju integritāte un references integritātes.
(""References integritāte ir stāvoklis, kad visas vērtības no visām ārējām atslēgām ir derīgas. References integritāte ir balstīta uz entītiju integritātes. Entītiju integritāte nosaka, ka katrai entītijai ir unikāla atslēga.
Piemēram, ja katra tabulas rinda atspoguļo attiecības uz unikālu entītiju, tad tabulai jābūt vienai kolonnai vai kolonnu kopai, kas nodrošina unikālu identifikatoru tabulas rindām.
Šo kolonna (vai kolonnu kopumu) sauc par mātes atslēgu tabulā. Lai nodrošinātu, ka mātes atslēga nesatur atkārtotas vērtības, jādefinē unikāls indekss kolonnai vai kolonnām, kam ir mātes atslēga. Mates atslēgas definēšana ir entītiju integritāte "")

## Relāciju datubāzes
Datu bāze, kurā viena tipa ierakstos ir norādes uz cita tipa ierakstiem. Relāciju datu bāze dod iespēju lietotājam saistīt informāciju, kas tiek glabāta dažādās datnēs, kā arī veidot noteiktas attiecības starp dažāda tipa ierakstiem. Relāciju datubāzes veido savstarpēji saistītas tabulas. Relāciju datubāzes pamatvienība ir tabula.

**Datu tabulas uzbūve**

Datu tabula raksturo kādu noteiktu realitāšu (entity) jeb objektu klasi.
* Rindas
: Katra rinda atbilst noteiktai realitātei vai objektam
: Rindu mēdz dēvēt par ierakstu

* Datu tabulas ailes
: Tabulas ailēs tiek atspoguļoti attiecīgās relalitātes vai objekta atribūti jeb īpašības
: Tabulas ailes mēdz dēvēt par laukiem

Tabulas struktūra paredz, ka rindu (ierakstu) skaits ir praktiski neierobežots, bet aiļu (lauku) skaits ir ierobežots. Iepriekš jāparedz kāda veida dati katrā laukā tiks ievadīti.

**Lauku veidi**

## Relāciju datubāžu pārvaldības sistēmas
Relāciju datubāzes, ir kļuvušas par galveno izvēli informācijas uzglabāšanai jaunās datubāzes, ko izmanto finanšu uzskaitei, ražošanas un loģistikas informācijai, personāla datiem un daudz kam citam. Relāciju datubāzes bieži aizstāj hierarhiskās datubāzes un tīkla datubāzes, jo tās ir vieglāk saprast un izmantot, pat ja tās ir mazāk efektīvas. Līdz ar datoru veiktspējas palielināšanos , nepilnības relāciju datubāzēs, kuru dēļ tās nebija lietderīgas agrākos laikos, tagad ir pirmajā vietā ar to lietošanas ērtumu. Tomēr relāciju datu bāzēs ir izaicinājušas Objektu datubāzes, kas tika ieviestas, lai mēģinātu risināt objektu relāciju pretestības nesakritību relāciju datu bāzē, un XML datu bāzēs.

Trīs no vadošajiem tirdzniecības relāciju datubāzes pārdevējiem ir Oracle, Microsoft un IBM. Savukārt no vadošajiem atklātā koda pārdevējiem ir MySQL, PostgreSQL, un SQLite.

## Digitālās ūdenszīmes relāciju datu bāzēs
Digitālās ūdenszīmes relāciju datu bāzēs parādījās kā kandidāta risinājums, lai nodrošinātu autortiesību aizsardzību, viltojumu notveršanu, nodevēju izsekošanu, saglabājot relāciju datu viengabalainību. Daudzas ūdenszīmju tehnoloģijas literatūrā šiem mērķiem ir ierosinātas risināt .
Digitālās ūdenszīmes parasti izmanto bilžu aizsargāšanas , kā arī tiešsaistē pieejamo dokumentu piemēru aizsargāšanai.

## Relāciju operācijas

Vaicājumus, kuri tiek veikti pret relāciju datu bāzi izsaka kā relāciju kalkulu vai relāciju algebru. Kods savā sākotnējajā relāciju algebrā ieviesa astoņus relāciju operatorus, sadalot tos divās grupās, katrā pa četriem operatoriem. Pirmie četri operatori pamatojās uz noteiktajām tradicionālajām matemātiskajām darbībām:

Savienības operators apvieno divas ierakstu attiecības un likvidē visus ierakstu dublikātus no rezultāta. Relāciju savienības operators atbilst SQL UNION operatoru.
Krustojuma operators ražo ierakstu kopumu, ko divas attiecības koplieto kopīgi. Krustojums tiek īstenots SQL formā ar INTERSECT operatoru.
Atšķirības operators darbojas uz divām attiecībām un rada ierakstu kopumu no pirmās attiecības otrajā, ja vien otrajā tās jau neeksistē. Atšķirība ir ieviesta SQL formā ar EXCEPT vai MINUS operatoriem.
Dekarta produkts divu attiecībās ir savienojums, kas neierobežo nevienu kritēriju, kā rezultātā katrā ieraksta pirmās saistības ir jāsaskaņo ar katru otrā ieraksta attiecībām. Dekarta produkts tiek īstenota SQL kā CROSS JOIN pievienošanas operators.

Atlikušos četrus operatorus Kods ietvēra īpašajās darbībās raksturīgajām relāciju datu bāzēm:
Atlases vai ierobežojuma operators iegūst ierakstus no relācijas, ierobežojot rezultātus tikai tiem, kas izpildīs īpašos kritērijus, tas ir apakškopu attiecības kopu teorijai. SQL ekvivalents izvēlei ir SELECT vaicājuma paziņojums ar WHERE klauzulā.
Projekcijas operators iegūst tikai norādītos atribūtus no ierakstiem vai to kopumu ierakstiem.
Pievienošanas operators savieno divas attiecības ar kopīgām īpašībām. SQL šis operators tiek īstenots ar INNER JOIN pievienošanas operatoru.
Relāciju sadalīšana ir nedaudz sarežģītāka operācija, faktiski pretēja Dekarta reizinājumam.

Ieviesti arī citi operatori kopš Koda sākotnēji ieviestajiem astoņiem operatoriem, šie ieviestie operatori ir salīdzinājuma un paplašinājuma operatori, kas atbalsta ligzdošanu un hierarhiskus datus, kā arī citus.

## Daži relāciju datu bāzu piemēri

* DB2
* MySQL
* Oracle
* PostgreSQL
* SQL Server