Soubor:Relational model concepts.png {{Zkazky|

  • Relačí algebra + kalkuly + SQL (Mlýnková) - Stačilo vědět nástřel definice a hlavně, jak to přirovnat k SQL (prvky jsou tabulky/řádky/atributy ... algebra/n-ticový/doménový). U popisu algebry a kalkulu ukázat nějaké příklady. Vědět že je to ekvivalentní (kalkuly a algebra), ale že SQL je silnější protože má navíc agregačí funkce.

  • Relacni kalkuly a algebry (Knap) - Kalkuly jsou zalozene na predikatove logice 1. radu, mohou obsahovat nebezpecna pravidla atd. Algebra muze byt pozitivni (bez mnozinoveho rozdilu), nema nebezpecna pravidla. Pak jsem byl dotazan na to, jak se v relacni algebre zapise prunik - pomoci sjednoceni a selekce.

}} Relační kalkul a relační algebra jsou prostředky relačního modelu dat pro manipulaci s daty

Relační kalkuly (7×🎓)

{{Zkazky|

  • DRK (Riha) - kde sa vyuziva prakticky - QBE, Oracle - dake formulare ci co

  • Relační kalkuly (?) - Popsal jsem NRK, DRK, jak se v nich dotazuje (na příkladu), dále jsem zmínil doménově závislé dotazy, neomezené, problémy a jak je řešit a bezpečné formule (eliminace všeobecného kvantifikátoru, omezení volných proměnných atd.). To stačilo.

  • Doménový kalkul (Říha) - Na papier som napísal väčšinu informácii z Pokorného skrípt, definícia, bezpečné výrazy, 1-2 príklady, použitie - to som našiel na inej diskusii - a to Říhu potešilo, že som tam mal. Bohužiaľ otázky Říhu smerovali k logike, ktorú som si už nepamätal a neopakoval. Takže najprv som z dvoch možností skúšal uhádnuť správnu, ale trafil stále špatne. Naviac som sa do toho začínal zamotávať a akosi som už nedokázal racionálne premýšľať. Červenal som sa i za ušami, ale nakoniec to Říha zhodnotil tak, že všetko podstatné bolo na papieri a tie otázky boli nad požadovaný rámec a prepustil ma. Odporúčam ujasniť si základy a spoľahlivo vedieť, čo znamená PRL 1.řádu, 2.řádu, čo je term, funkč. symbol, formula, pred. symbol, voľná premenná atp.

  • Relacne kalkuly (Skopal) - Toto uz islo lepsie. Chcel odo mna pocut ako by som naivne implmementoval relacny kalkul v nej, programovacom jazyku - odpoved: dosadzujem prvky z domeny a skusam kedy bude podmienka true. Este chcel rozirenie kalkulu o agreg. operacie - ako by som implemetoval trebars AVG - odpoved: mam predikat AVGZAM(x) a hadam priemerny plat a ten predikat mi niekedy povie true.

  • N-ticovy kalkul (Riha) - (priklad relacie, dotaz, realne pouzitie) Napisal som zakladne veci, ze je to rozsirenie jazyka logiky 1. radu. A uviedol som priklad na filmoch a hercoch. Realne pouzitie som nevedel. Zacali sme to rozoberat, presli sme ake veci su v jazyku logiky a ako si odpovedaju s NDK. Ked chcel to pouzitie a ja som to nevedel, tak mi napomohol poznamkou, aby som si ukazany dotaz napisal v SQL. Realne pouzitie je SQL :) Aj ked som sa dost tazko nechytal na niektore otazky, tak to uzavrel tym, ze som vlastne vsetko podstatne napisal. Celkovo velmi prijemne skusanie.

}} *neprocedurální jazyky

*relačně úplné, mohou obsahovat nebezpečná pravidla (⇒ silnější než RA) *vychází z predikátové logiky 1. řádu (při dotazování) relační algebra ne

n-ticový relační kalkul (NRK)

{{zarovka

|

  • { x.NÁZEV_K, k.ADRESA, x.JMÉNO_F <math>|</math> PŘEDSTAVENÍ(x) & KINA(k) & k.NÁZEV_K <math>=</math> x.NÁZEV_K }

| př(NRK): spojení (představení * kina): }}

{{zarovka

|

  • {p.JMÉNO_F <math>|</math> P(p) & ∀x ( P(x) ⇒ ∃y ( P(y) & y.NÁZEV_K <math>=</math> x.NÁZEV_K & p.JMÉNO_F <math>=</math> x.JMÉNO_F) ) }

| př(NRK): film, který dávají ve všech kinech, kde něco dávají (P <math>=</math> PŘEDSTAVENÍ) }}

  • pracuje s daty na úrovni n-tic (prvků relace/řádků)

  • Termy - n-ticové proměnné, jejich komponenty a konstanty

  • Predikáty - jména relací a binární porovnávací predikáty θ (>, <, >=, <=, <>, =)

  • Atomické formule R(x), x.A θ y.B, x.C θ 'konstanta', (θ je bin. porov. Predikát), R(t1,....tn) (R predikát, ti je term)

    • Atomické formule NRK jsou formule NRK a formule složené z formuli pomocí &, ∨, ¬, ⇒, ⇔ jsou také NRK fle

  • Kvantifikátory: ∃, ∀

doménový relační kalkul (DRK)

{{zarovka |

  • {f <math>|</math> ∀k(P(Název_kina:k) & P(Jméno_Filmu:f, Název_kina:k))}

| př(DRK): spojení (P<math>=</math>představení * k<math>=</math>kina) }}

  • Místo n-tic používá doménové proměnné (tj. atributy = sloupce), místo R.u se používá R(A:x, B:y,...), atribut:typ

  • Termy - jednoduché proměnné, konstanty

  • Atomické formule R(A1:T1, A2:T2, ...) - stejné jako u NRK

{{Zdroje|

}}

Relační algebry (3×🎓)

{{Zkazky|

*Relační algebra a její použití (?) - popsal jsem základní operace, odvozené operace, relační úplnost, základ k tomu, jak se díky ní optimalizuje v SQL a Datalogu (ten jsem spíš jen zmínil). }}

{{zarovka |

  • (Hrají(Název_k <math>=</math> Mír)[Jméno_f, Čas] * Film)[Herec]

| př.: herci z filmů v kině Mír }}

{{zarovka |

  • Jestliže všechny atributy ve selekci jsou současně v E1

| př.: kdy je v RA mozne: <math>\small(E_1 \times E_2)(selekce) =</math> <math>\small E_1(selekce) \times E_2</math> ? }}

je neprocedurální jazyk vysoké úrovně pro práci s relacemi v relačním datovém modelu :💡 neprocedurální, nicméně struktura výrazu navádí na pořadí a způsob vyhodnocení

:💡 nemá nebezpečné výrazy

  • Relace - má schema (atributy + domény, na pořadí atributů nezáleží ), obsahuje množinu n-tic (duplicity jsou eliminovány)

  • Operace - vytvoří z vstupní relace/í výsledek jako novou relaci

  • Minimálni množina 6 operací (tvoří rel.algebru AR):

**výběr () (select): - vrací relaci jejíž hodnoty atributů splňují danou podmínku, která může obsahovat jména atributů, konstanty, operátory prorovnávání a logické spojky **projekce [] (project) - vrací relaci obsahující vybrané sloupce (duplicity jsou eliminovány)

**sjednocení <math>\cup</math> (union) - vstupní relace musí mít shodnou aritu (stejný počet atributů) a domény atributů musí být stejného typu (duplicity jsou eliminovány) **množinový rozdíl <math>\setminus</math> (set difference) - musí platit stejné předpoklady jako u sjednocení

**kartézský součin <math>\times</math> (Cartesian product) - předpokládá se, že atributy vstupních relací jsou disjunktní (v opačném případě musí být provedeno přejmenování), v praxi mnohdy neproveditelné kvůli vysoké režii **přejmenování <math>ρ</math> (rename)

*další odvozené operace

  • Průnik <math>\cup</math> - dá se vyjádřit: <math>R_1 \cap R_2 = (R_1 \cup R_2 \setminus (R_1 \setminus R_2))\setminus (R_2 \setminus R_1)</math>

  • Přirozené spojení <math>*</math> (Natural join) - lze cca vyjádřit pomocí kartézského součinu, selekce a projekce: <math>R * S = \left(\left(R \times S\right)\left(Rx = Sx\right)\right)[A \cup B]</math>

    • Spojení přes výraz (normální je přes atributy) = inner join (zobecnění vnitřního spojení)

    • Polospojení R <* S. Spojení s projekcí na schema relace, které je menší tj. R

    • Levé/Pravé vnější spojení - ve spojení jsou zachovány všechny n-tice z levé/pravé/obou relací, pokud řádky vyhovují podmínkám spojení (v SQL jsou doplněné null, RA toto neumožňuje, jelikož je relačně úplná)

    • 💡 Rozdíly mezi Joiny

  • Dělení (÷) : Dělíme všechny představení Filmy(režisér=čáp).[jmeno_f]. Vrátí to ntici odpovídajícím všechem kinům, kde všechny filmy režíroval čáp (defakto to vydělí všechny stejný kina čápem a pokud je to jedna tak to vypíše)

    • lze vyjádřit pomocí projekce, rozdílu a kartézského součinu: <math>R \div S = R[A\setminus B] \setminus ((R[A\setminus B] \times S)\setminus R)[A\setminus B]</math>

  • Dotazovací jazyk Relační algebry - jeden dotaz lze zapsat mnoha způsoby, toho se vyžívá v alg. optimalizaci dotazu

    • Jednoduchý dotaz - lze vyjádřit pouze pomocí selekce, projekce a spojení (až 80%) - nejvíc optimalizovány

  • Relační úplnost - pokud lze prostředky jazyka lze vyjádřit min.množinou operací <math>A_{R} \{(), [ ], \cup, \setminus, \times, rename \}</math>

  • Pozitivní relační algebra <math>A_{RP} \{(), [ ], \cup, \times, rename \}</math> - je fragment RA vzniklý odstraněním množinového rozdílu

    • 💡odpovídá nerekurzivnímu DATALOGu (bez negace)

  • Konstantní relace (relace co se nemění po dobu života DB) - např Číselník

{{Collapse|Příklad(srovnání RA, DRK, NRK)|

definujeme rel.schémata:

   FILM(JMENO_FILMU, JMENO_HERCE)    HEREC(JMENO_HERCE, ROK_NAROZENI)
Dotaz: Ve kterých filmech hráli všichni herci?

RA: <math>\small FILM \div HEREC[JMENO\_HERCE]</math>

NRK:<math>~ \small\{f.JMENO\_FILMU \;|\; \forall herec(HEREC(herec) \Rightarrow f(FILM(f) \wedge\; f.JMENO\_HERCE = herec.JMENO\_HERCE \;\wedge f.JMENO\_FILMU = film.JMENO\_FILMU))\}</math>

DRK: <math>\small\{(f) | FILM(f)\wedge \forall h (HEREC(h) \Rightarrow FILM(f, h))\}</math>

}} {{Zdroje|

}}

Bezpečné výrazy (2×🎓)

{{Zkazky|

  • Bezpečné výrazy (Skopal) - problémem u relačních kalkulů jsou nekonečné domény, takže je potřeba výrazy nějak omezit (aktuální doménou), kromě toho je dobré znát (resp. umět pohotově vymyslet) výrazy, na kterých jsou ty problémy relačních kalkulů vidět

}}

{{:Formální_základy_databázové_technologie/Bezpečné_výrazy}}

Ekvivalence dotazovacích jazyků

Soubor:Dalalog.jpg

NRK omezený na bezpečné výrazy je ekvivalentní <math>A_{R}</math> (relační algebře)
  • Z toho plyne, že kalkulové jazyky lze realizovat pomocí <math>A_{R}</math>, která je relativně dost silná (ale nemá na logiku 1. řádu - Datalog)

DRK omezený na bezpečné výrazy je ekvivalentní <math>A_{R}</math>

💡 DRK s doménově nezávislými výrazy je silnější než <math>A_{R}</math>

NRK omezený na bezpečné výrazy je ekvivalentní DRK omezenému na bezpečné výrazy
Datalog je silnější než <math>A_{RP}</math> (pozitivní RA)
  • Tranzitivní uzávěr (rekurze)

  • V datalogu nelze vyjádřit rozdíl, proto není silnější než obyč RA

Stratifikovaný Datalog¬ je silnější než <math>A_{R}</math>
  • tranzitivní uzávěr (rekurze)

  • rozdíl lze vyjádřit pomocí negace

💡 Stratifikovaný nerekurzivní Datalog¬ je ekvivaletní <math>A_{R}</math>

Relační úplnost (2×🎓)

{{Zkazky|

  • Relační úplnost (?) - bylo 30.5.2012

}}

relačně úplný jazyk - má prostředky přímo realizovat všechny operace <math>A_R</math> ( tj. "minimalne tak silny jako RA" )

Relačně úplný je: *NRK, DRK (s bezpecnymi vyrazy jsou ekvivalentní <math>A_{R}</math>)

*SQL (silnější, protože má navíc agregační fce, aritmetiku, null...) 💡 Datalog¬ (Stratifikovaný nerekurzivní Datalog¬ je ekvivaletní <math>A_{R}</math>)

{{Zdroje|1 =

  • Anglicky relational completeness

  • DJ2-2-vyjadrovaci-sila.pdf 10. slide

  • zapisky

}}

Věta o tranzitivním uzávěru relace (2×🎓)

{{:Formální_základy_databázové_technologie/TransitiveClosure}}