Relační algebra
- Je tvořena operacemi
- průnik, sjednocení, rozdíl
- restrikce, projekce, spojení, přejmenování
- skalární typ = říká jakého typu hodnota je (text, interger, boolean atd.)
null
nemá žádný skalární typ- sloupec má záhlaví, které se skládá z názvu a skalárního typu
- z relační algebry vychází SQL, ale porušuj některé principy
- v praxi relace reprezentujeme tabulkami a pro jejich správu máme NoSQL a SQL
- relační kalkul je jazyk, který vychází z predikátové logiky
- má stejné schopnosti jako relační algebra
Operace na relacích
- značení podmínky … théta
Sjednocení
- Spojí 2 relace se stejnými sloupci
- Výsledek vrací bez duplicit
- V SQL
UNION
Průnik
- Pouze řádky v obou tabulkách
- V SQL
INTERSECTION
Rozdíl
- Řádky, které jsou v první tabulce, ale ne ve druhé
- V SQL
EXCEPT
Restrikce
- Omezení řádků (podmožina relace) v tabulce
- Jen ty řádky, které splní danou podmínku
- V SQL klauzule
WHERE
Projekce
- Výběr sloupců
- Pokud nějaké sloupce omezením může, pak tabulka působit duplicitně, přestože původní má řádky unikátní
- V SQL
SELECT name, born_year FROM ...
(to co je meziSELECT
aFROM
)
Spojení relací
- Pokud disjunktní → kartézský součin
- Jinak spojíme podle stejných sloupců
- V SQL
JOIN
- natural, left, right
Přejmenování atributů
-
Změna názvu sloupců
-
V SQL
SELCT name AS surname ...
-
Pro více účelů (lepší orientace; zabrání sloučení sloupců se stejnými hodnotami)
-
Jednotlivé operace můžeme řetězit a dostat výsledný složený zápis, případně je převádět do SQL a naopak
Relační dělení
- mám 2 tabulky a dostanu 3. s 1 sloupcem
- systém postupu
- pokud se záznam z tabulky A nachází ve všech možnostech tabulky B, bude se nacházet i ve výsledné tabulce
- používáme pro dotazy typu “Osoba P má ráda všechny filmy tvůrce C.”
- např. mějme tyto 2 tabulky (
peoples_car
acar_brands
)
| person | car |
| ------ | -------- |
| John | Audi |
| Peter | Mercedes |
| Peter | Skoda |
| Zoe | Skoda |
| Zoe | Audi |
| Jane | Mercedes |
| car |
| -------- |
| Mercedes |
| Skoda |
- Relačním podílem
peoples_car
acar_brands
bychom získali následující tabulku
| person |
| ------ |
| Peter |