- Atribut = Sloupec v tabulce
- Doména = Množina povolených hodnot
- Relační schéma = záhlaví tabulky;
- uspořádaná n-tice atributů,
- prázdné relační schéma není povoleno!,
- př.
r(R1) relace r mám relační schéma R1, R1 = jmeno, vek, adresa
- Relace = tabulka, skládá se z n-tic (řádků) a atribut (sloupců)
- Uspořádaná n-tice = Záznam/řádek v tabulce
- doména = Každý sloupec má definován jednoznačný název, typ a rozsah.
- hodnoty jsou atomické = dále nedělitelné
- hodnota null = značí žádnou hodnotu, je u každého atributu
relační instance = aktuální hodnoty relace v tabulce
na pořadí prvků relace nezáleží
Databáze = množina relací
- superklíč = podmnožina libovolných atributů jednoznačně určující danou n-tici
- kandidátský klíč = superklíč, kterému nemůžeme už žádný atribut odebrat, je minimální
- primární klíč = jeden z kandidátských klíčů, slouží pro praktické účely
- cizí klíč = (množina/jeden) atribut, který se objevuje v jedné relaci a je primárním klíčem v druhé
- Procedurální = co chceme udělat a jakým způsobem
- Neprocedurální (deklarativní)
- Čisté (teoretické) jazyky
- relační algebra
- n-ticový relační kalkul
- doménový relační kalkul
- Používané uživateli - SQL
- slides
- 3 typy:
- relační algebra
- n-ticový relační kalkul
- doménový relační kalkul
- Procedurální jazyk
- 6 základních operátorů:
- selekce σ
- projekce Π
- sjednocení ∪
- rozdíl –
- kartézský součin ×
- přejmenování ρ
- Operace mají vstup jednu/dvě relace a výstup jednu novou relaci
- Operace můžeme skládat dohromady
- proces odstraňování n-tic, které nesplňují podmínku
p
- podmínky můžeme
- atributy, konstanty + porovnávání
- výrazy, závorková logika
- spojovat: konjunkcí ∧, disjunkcí ∨ a negací ¬
σ p (relace)
- proces zanechání sloupců
- vrací množinu bez duplikátů
Π a1,a2,...,ak (relace)
- sjednocení dvou relací
r a s
- vrací množinu bez duplikací!
- relace musí mít stejnou aritu = stejný počet atributů a každý atribut stejnou doménu
- vrací n-tice, které v obou relacích nejsou
- relace musí mít stejnou aritu
- vše se vším
- relační schéma = relační schéma 1. relace + relační schéma 2. relace
- předpokládáme, že relace jsou disjunktní (nemají společný prvek)
- v případě, že nejsou disjunktní, musíme použít přejmenování
- Musíme použít v případě kolize jmen.
- Umožňuje více pojmenování pro jednu relaci.
- změna názvu relace:
ρ nove_jmeno_relace (stare_jmeno_relace)
- změna relačního schéma:
ρ nove_jmeno_relace(a1, a2) (stare_jmeno_relace)
- relace mají stejnou aritu
r ∩ s = r – (r – s) = s – (s – r)
- Zavedeno, protože kartézský součin produkuje obrovské množství dat –>
- asociativní, komutativní
- relace
r a s na jejich schématech R, S
- výsledné schéma
r ⋈ s je R ∪ S
- např.
r(R), kde R = (A, B, C, D)
s(S), kde S = (E, B, D)
r ⋈ s je definováno jako
Π r.A,r.B,r.C,r.D,s.E (σ r.B = s.B ∧ r.D = s.D (r × s))
- Ve výsledku mohou být i n-tice, které nejsou v podmínce
- Chybějící hodnoty se doplní
null hodnotou
LEFT vs RIGHT vs FULL
- Znamená, že hodnota je neznámá nebo neexistuje
- Výsledek jakékoliv aritmetické operace je
null
- Agregační funkce
null ignorují
| výraz | vyhodnocení |
true AND unknown | unknown |
false AND unknown | false |
unknown AND unknown | unknown |
true OR unknown | true |
false OR unknown | unknown |
unknown OR unknown | unknown |
NOT unknown | unknown |
- stejná jako projekce, ale argumenty mohou být aritmetické výrazy
Π ID, name, dept_name, salary/12 (instructor)
- Agregační funkce
- Výsledek nemá jméno: můžu použít přejmenování, nebo
as
podle_ceho_seskupit G agregacni_funkce (relace)
- ,,Neměnná“ relace
- Schéma lze určit přejmenováním
ρ moje_predmety(uco,kod) {(123, 'PB123'), (456, 'VV001')}
- Přiřazení
r ← E
E libovolný výraz relační algebry.
- Smazání
r ← r – E
- Přidání
r ← r ∪ E
- Aktualizace
r ← Π E1,E2, ... (relace)
- Čistá relační algebra odstraňuje všechny duplikáty (po projekci, atd.)
- Z praktických důvodů se, ale často duplikáty nechávají.
- selekce: má stejný počet duplikovaných n-tic jako ve vstupu
- projekce: všechny n-tice co byly duplikované jsou i ve výsledku, může se zvýšit velikost duplikace, tím, že jsem zrušil nějaký sloupec
- kartézský součin: m je počet kopií v t1, n kopií v t2. pak je
m × n kopií t1.t2 v r × s
- průnik: min(m, n)
- rozdíl: max(0, m - n)
- Jazyky neprocedurální, vysoce teoretické –> v praxi se moc neuplatňují.
- Dotazy jsou ve tvaru:
{t|P(t)}
- Chci vybrat množinu všech n-tic
t, pro které je predikát P(t) pravdivý.
- množina atributů a konstant
- množina porovnávacích operátorů (
<, >, <=, ...)
- množina logických spojek (
and ∧, or ∨ a not ¬)
- Implikace
⇒
- Množina kvantifikátorů
{t|t ∈ instruktor ∧ t[salary] > 80000}
{t| ∃ s ∈ instruktor (t[ID] = s[ID] ∧ s[salary] > 80000}
- Můžeme vygenerovat nekonečný výraz:
{t|¬t∈r}
- Každá součást výrazu, musí být v relaci, n-tici nebo konstantě v P
- Neprocedurální dotazový jazyk, silou ekvivalentní n-ticovému relačnímu kalkulu.
- Dotaz je ve tvaru
{< x1, x2, ..., xn > | P(x1, x2,..., xn)}, kde x1, x2,..., xn jsou doménové proměnné, P je formule.