Relácie

Pri tvorbe relácii sa v databázových systémoch používa clauzula JOIN Rozlišujeme tieto typy:


1) INNER JOIN
INNER JOIN vytvorí výslednú tabuľku kombináciou stĺpcov dvoch tabuliek (tab1 a tab2) Dopyt porovnáva každý riadok tabuľky "tab1" s každým riadkom tabuľky "tab2" aby našiel všetky páry riadkov, ktoré spĺňajú podmienku. Ak je podmienka splnená výsledok sa vypíše vo výpise všetkých zhodných záznamov z "tab1" a "tab2".
INNER JOIN je najbežnejší typ join-u a je prednastavený pre prípad, ak sa klauzula JOIN použije bez slova INNER.

2) CROSS JOIN
CROSS JOIN spája každý riadok "tab1" s každým riadkom "tab2", ak majú "tab1" x stĺpcov a "tab2" y stĺpcov, potom výsledok bude mať x+y stĺpcov. Z čoho vyplýva, že takýto spôsob generuje extrémne veľké tabuľky. Použitie sa odporúča len vtedy ak je to potrebné.

3) LEFT OUTER JOIN
OUTER JOIN je rozšírenie INNER JOIN-u. SQL štandard definuje tieto typy: LEFT, RIGHT, FULL. V prípade LEFT OUTER JOIN-u sa INNER JOIN vykoná ako prvý, potom pre každý riadok "tab1", ktorý nespĺňa podmienku sa vypíše do výsledku s hodnotamu NULL v nezhodnujúcich sa záznamoch.

4) RIGHT OUTER JOIN
INNER JOIN sa vykoná ako prvý, potom pre každý riadok "tab2", ktorý nespĺňa podmienku sa vypíše do výsledku s hodnotamu NULL v nezhodnujúcich sa záznamoch.

5) FULL OUTER JOIN
INNER JOIN sa vykoná ako prvý, potom pre každý riadok "tab1" a "tab2" ktorý nespĺňa podmienku sa vypíše do výsledku s hodnotamu NULL v nezhodnujúcich sa záznamoch.

/* príklad výberu údajov z dvoch atribútových tabuliek klienti (meno, priezvisko, rodne_cislo) a karty (rodne_cislo, cislo_karty) pomocou klauzule JOIN: */

SELECT meno, priezvisko, a.rodne_cislo, cislo_karty FROM schema.klienti a
INNER JOIN schema.karty b ON (a.rodne_cislo = b.rodne_cislo);

-- Druhý spôsob prepojenia tabuliek prostredníctvom klauzule WHERE:

SELECT meno, priezvisko, a.rodne_cislo, cislo_karty FROM schema.klienti a, schema.karty b
WHERE (a.rodne_cislo = b.rodne_cislo);


Index

Použitie indexov nám pomáha zrýchliť dopytovanie sa na údaje cez SELECT a klauzulu WHERE. Na druhej strane spomaľuje vkladanie údajov pri UPDATE a INSERT klauzule. Indexy možno vytvárať a mazať bez vplyvu na údaje uložené v atribútových tabuľkách.

Tvorba jednoduchého indexu:
CREATE INDEX meno_indexu ON meno_tab (meno_stĺpca_tab);

Tvorba viacstĺpcového indexu:
CREATE INDEX meno_indexu ON meno_tab (meno_stĺpca_jeden, meno_stĺpca_dva);

Tvorba indexu konkrétneho typu, bez udania typu indexu sa vytvorí B-Tree
CREATE INDEX idx_geometria ON meno_tab USING gist (geom);

Mazanie indexu:
DROP INDEX meno_indexu;

Typy indexov

Index Popis
B-tree B-Tree index sa používa pri testovaní dopytov rovnosti " =, != " a rozsahov " <,<=, >,>= ". Možno ich aplikovať na všetky údajové typy a nulové hodnoty "NULL". Dizajnované tak aby pracovali pri "Cache-i" (ukladanie do vyrovnávacej pamäti)
Hash Hash index sa používa iba pri testovaní dopytov rovnosti " =, != ", veľmi malá výhoda oproti použitiu B-Tree indexu
GiST GIST index umožňuje vytvoriť všeobecne vyváženú stromovú štruktúru, preto je rozsah jeho použitia viac než testovanie rovnosti, alebo rozsahov. Používa sa na indexovanie geometrických údajových typov a pri "full-textových" vyhľadávaniach.
SP-GiST SP - skratka pre for priestorovo rozdelený index GiST. SP-GiST podporuje vyhľadávanie v stromovej štruktúre po častiach.
GIN Používa sa v prípade, ak záznam v riadku má viac ako jednu hodnotu, zatiaľčo B-Tree index je optimalizovaný pre jeden záznam v riadku. GIN index je preto vhodný na indexovanie polí "arrays" a rovnako pri "full-textových" vyhľadávaniach.


Obmedzenia (Constraints)

Údajové typy nám slúžia na obmedzenie typov údajov, ktoré ukladáme do atribútovej tabuľky. Takéto ukladanie je však tiež veľmi široké > napr. chceme vložiť údaje o cene produktu, ktorá môže byť iba kladná. Databázový systém však nemá údajový typ iba pre kladné hodnoty. SQL preto umožňuje atribútovým stĺpcom definovať obmedzenia (constraints), ktoré poskytujú vyššiu kontrolu ukladaných údajov.



Typy obmedzenia Popis
PRIMARY KEY Primárny kľúč je kombináciou dvoch obmedzení: UNIQUE a NOT NULL, väčinou sa jednej tabuľke definuje iba jeden primárny kľúč.
FOREIGN KEY Cudzí kľúč špecifikuje, že hodnoty v stĺpci alebo množine stĺpcov sa musia zhodovať s hodnotami riadkov inej tabuľky. Toto udržiava referenčnú integritu medzi dvoma príbuznými tabuľkami napr.:
ALTER TABLE produkty ADD CONSTRAINT fk FOREIGN KEY (cislo_produktu) REFERENCES objednavky (cislo_produktu)
UNIQUE Zabezpečí podmienku zachovania jedinečnosti hodnôt v každom riadku.
NOT NULL Zabezpečí, že stĺpec nebude obsahovať žiadne nulové hodnoty.
CHECK Umožňuje nám zachovať nami definovanú podmienku pre stĺpec napr.: CHECK (cena > 0)