|  |  |
| --- | --- |
|    | **Šiam straipsniui ar jo daliai trūksta išnašų į šaltinius.**Jūs galite padėti Vikipedijai pridėdami tinkamas išnašas su šaltiniais. |

**Reliacinis modelis** – duomenų aprašymo modelis, kuris remiasi predikatų logika ir aibių teorija. Modelį aprašė Edgaras Kodas (Edgar F. Codd) 1970 metais. Šio modelio pagrindinis elementas yra reliacinė lentelė. Kiti, anksčiau naudoti, duomenų aprašymo modeliai – hierarchinis ir tinklinis, o naujausias naudojamas modelis – objektinis. Reliacinis modelis buvo pirmas formaliai aprašytas modelis, anksčiau naudotieji modeliai buvo aprašyti tik po reliacinio modelio aprašymo. Modelio pagrindas – prielaida, jog visi duomenys gali būti pavaizduoti matematiniais ryšiais, tai yra kaip *N* aibių Dekarto sandaugos poaibis.

Reliacinė lentelė
-----------------

|  |
| --- |
| *Pirma lentelė* |
| **Vardas** | **Pavardė** | **Svoris** | **Moka plaukti** |
| Jonas | Petraitis | 70 | taip |
| Petras | Jonaitis | 75 | ne |
| Vardenis | Pavardenis | 92 | taip |

|  |
| --- |
| *Antra lentelė* |
| **Vardas** | **Pavardė** | **Mėgiamas skaičius** |
| Jonas | Petraitis | 5 |
|  |  | 6 |
|  |  | 7 |
|  |  | 17 |
| Vardenis | Pavardenis | 9 |

**Reliacinė lentelė** (angl. *relational table*) – turinti vardą, dviejų matavimų lentelė duomenims saugoti. Tokios lentelės **stulpelių** skaičius yra žinomas ir kiekvienas stulpelis turi vardą. Kiekviena **eilutė** yra duomenų bazės įrašas, kurio stulpeliai pateikia informaciją apie objektą. Eilučių skaičius iš anksto nežinomas ir gali būti bet koks (taip pat ir nulis).

Atributai
---------

Lentelės stulpeliai dar vadinami atributais. Atributai gali būti įvairaus tipo (tekstas, skaičiai, datos, loginiai (taip/ne), taip pat ir duomenų bazėje neapibrėžtos struktūros dvejetainės sekos (angl. *blob – binary large object* – didelis dvejetainis objektas). Kaip tokie objektai saugomi vaizdai, garsai ir pan.

Raktai
------

Lentelės **pirminis raktas** (angl. *primary key*) yra stulpelis (ar kelių stulpelių derinys), kurį žinodami galime vienareikšmiškai pasakyti, iš kurios eilutės jis paimtas. Pateikiamame pavyzdyje vidutiniškai patikimu pirminiu raktu galėtų būti pavardės stulpelis. Raktas, kuris yra stulpelių derinys, vadinamas sudėtiniu raktu (angl. *composite key*). Pavyzdyje sudėtiniu raktu galėtų būti vardo ir pavardės stulpelių derinys. Tai patikimiau, nes didelėje duomenų bazėje pasitaiko žmonių vienodomis pavardėmis.

Jei lentelėje galimi keli pirminio rakto variantai, kitos alternatyvos vadinamos kandidatiniais raktais (angl. *candidate key*).

Normalizacija
-------------

Jei lentelės stulpelis (atributas) turi keletą reikšmių tai pačiai eilutei, jis vadinamas daugiareikšmiu atributu (angl. *multivalue attribute*). Antroji lentelė turi daugiareikšmių atributų, ir jos tiesiogiai į daugelį duomenų bazių perkelti nepatartina ar išvis neįmanoma. Daugiareikšmių atributų galima atsikratyti tiesiog sukuriant papildomas likusių duomenų kopijas, po vieną kiekvienai atributo reikšmei.

|  |
| --- |
| *Antra lentelė be daugiareikšmių atributų* |
| **Vardas** | **Pavardė** | **Mėgiamas skaičius** |
| Jonas | Petraitis | 5 |
| Jonas | Petraitis | 6 |
| Jonas | Petraitis | 7 |
| Jonas | Petraitis | 17 |
| Vardenis | Pavardenis | 9 |

Tokia lentelė nebeturi daugiareikšmių atributų, tačiau ji turi vadinamų **funkcinių priklausomybių** – kai kurių gretimų lentelės stulpelių reikšmės priklauso viena nuo kitos. Šiame pavyzdyje vardas ir pavardė yra logiškai tarpusavyje susiję ir be reikalo kartojasi kiekvienai mėgiamo skaičiaus reikšmei. Norint tokią lentelę papildyti nauju Jono Petraičio mėgiamu skaičiumi, teks dar kartą iš naujo įvesti ir saugoti tuos pačius vardą ir pavardę. Tai nepatogu ir neekonomiška, todėl gerai padarytoje duomenų bazėje funkcinių priklausomybių turi nebūti.

Darbas, kurio metu lentelė keičiama keliomis tarpusavyje susijusiomis lentelėmis be funkcinių priklausomybių vadinamas duomenų bazės **normalizacija**.

|  |
| --- |
| *Sudentų kodai* |
| **Vardas** | **Pavardė** | **Studento kodas** |
| Jonas | Petraitis | 12456 |
| Vardenis | Pavardenis | 12345 |

|  |
| --- |
| *Mėgiami skaičiai* |
| **Studento kodas** | **Mėgiamas skaičius** |
| 12456 | 5 |
| 12456 | 6 |
| 12456 | 7 |
| 12346 | 17 |
| 12345 | 9 |

Dviejų lentelių susiejimo diagrama (sukurta su Umbrello). „Šakutės" ženklas reiškia „vienas su daug"
Normalizacijos metu šią lentelę reikia keisti dviem, iš kurių viena saugo kiekvienam studentui priskirtą kodą o kita – bet kokį kiekį kodo ir tą kodą turinčio studento mėgiamo skaičiaus įrašų. Kodas gali būti generuojamas iš vardo ir pavardės ar bet kuriuo kitu būdu. Svarbu jog jis kiekvienam studentui būtų unikalus ir jo gyvenime nesikeistų. Pavyzdžiui, paso numeris netinka kaip kodas nes keičiasi pakeitus pasą.

Vardų lentelėje studento kodas šiuo atveju gali būti pirminis raktas. Jis saugomas ir mėgiamų skaičių lentelėje. Stulpelis ar stulpelių derinys, kuri yra kitos lentelės pirminis raktas, vadinamas **išoriniu raktu** (angl. *foreign key*).

Lentelių sukūrimui, jų susiejimui svetimaisiais raktais ir duomenų paieškoms yra sukurta speciali programavimo kalba (SQL). Tačiau kai kada tenka programuoti panašias duomenų struktūras ir kitokiomis programavimo kalbomis.

Taip pat skaitykite
-------------------

* Reliacinė duomenų bazė
* Duomenų bazių valdymo sistema