Při práci s relačním modelem máme 2 skupiny operací, které můžeme použít.
První se nazývá relační algebra a je to procedurální jazyk .
Na tom je založen SQL a jako takový je velmi důležité se naučit – protože SQL je de-facto standardem pro práci s relačními databázemi.
Druhý se nazývá relační kalkul a místo toho, aby to bylo procedurální, je to deklarativní jazyk . Je to zásadní rozdíl v tom, jak komunikujeme s databázemi, protože neříkáte databázovému softwaru, co má dělat , stačí mu říct co chcete , a nechte ho vyřešit podrobnosti, jak to udělat.
Toto je běžný rozdíl mezi programovacími jazyky. V moderním frontendu říkáme, že interakce s DOM v Reactu je deklarativní. Použití vanilkového JavaScriptu k úpravě DOM je procedurální.
Jazyky jako Datalog, QBE a QUEL mají jako základ relační kalkul. Nebudu o tom mluvit, protože si myslím, že je to mnohem specializovanější způsob, jak dělat věci ve srovnání s praktičtějším přístupem, který následuje SQL, ale můžete se na to podívat, pokud chcete.
Po tomto úvodu pojďme pokračovat s relační algebrou .
Máme 2 typy operací:
- primární operace
- připojit se k operacím
Primární operace v relační algebře
Primární operace jsou:
- spojení získat data ze dvou tabulek a vygenerovat součet n-tic, pokud tyto dvě tabulky mají stejné sloupce a typy atributů (doména).
- rozdíl získat data obsažená v první tabulce, ale ne ve druhé tabulce, čímž se vygeneruje rozdíl n-tic, pokud mají dvě tabulky stejné sloupce a typy atributů (doména).
- kartézský součin získat data ze dvou tabulek a vygenerovat jednu jedinou tabulku, která kombinuje data z nich na základě hodnoty atributu.
- vyberte extrahovat pouze některé n-tice (řádky) obsažené v tabulce na základě určitých kritérií.
- projekt vygenerovat novou tabulku obsahující pouze jeden nebo více atributů (sloupců) existující tabulky
- přejmenovat používá se k přejmenování atributu, používá se k zabránění konfliktům, když má více tabulek stejný název pro různá data
Sloučení operací v relační algebře
Spojení jsou pravděpodobně nejvýkonnější operace, které můžete s relační algebrou provádět. Staví na primárních operacích a umožňují vám korelovat data obsažená v různých relacích (tabulkách).
Poznámka:Brzy budu mluvit o spojení v praxi v DBMS, to je většinou teorie.
Máme 2 hlavní verze připojení:přirozené připojení a připojení theta . Všechny ostatní verze jsou extrahovány z těchto 2.
Přirozené připojení
Přirozené připojení koreluje dva vztahy (tabulky) a vytvoří novou tabulku založenou na stejných hodnotách atributu.
Nejprve potřebujeme dva vztahy se stejným názvem atributu (sloupec). Pokud se pak hodnoty v atributech v relaci A neshodují v atributech v relaci B, řádek není součástí výsledku a je ignorován.
Příklad:
Vztah A
ID zaměstnance | Jméno |
---|---|
1 | Označit |
2 | Tony |
3 | Rick |
Vztah B
Jméno správce | ID zaměstnance |
---|---|
Todd | 1 |
Albert | 2 |
Můžeme provést přirozené spojení, abychom získali jméno šéfa pro každého zaměstnance:
ID zaměstnance | Jméno | Jméno správce |
---|---|---|
1 | Označit | Todd |
2 | Tony | Albert |
Vzhledem k tomu, že vztahy mají společný atribut ID zaměstnance, je ve výsledku přítomen pouze jednou, nikoli dvakrát.
Zaměstnanec č. 3 přítomný ve vztahu A, Rick, není zahrnut v této tabulce, protože neexistuje žádná odpovídající položka ve vztahu B.
Theta-join
Theta-spojení umožňuje provést spojení na základě libovolných kritérií pro porovnání dvou sloupců ve dvou různých vztazích, nejen rovnost jako přirozené spojení.
Provádí kartézský součin dvou tabulek a filtruje výsledky na základě výběru, který chceme provést.
Equi-join
Equi-join je theta spojení, kde je výběr založen na rovnosti mezi hodnotami atributů ve dvou různých tabulkách.
Rozdíl oproti přirozenému spojení je v tom, že si můžeme vybrat, které názvy atributů (sloupce) chceme porovnávat.
O spojeních si povíme mnohem více později, až bude SQL představeno, abychom je mohli použít v praxi.