Formální základy databázové technologie/Relace

Z ωικι.matfyz.cz
Přejít na: navigace, hledání
Koncepty v relačním modelu
Zážitky ze zkoušek  
  • 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×🎓)[editovat | editovat zdroj]

Zážitky ze zkoušek  
  • 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)[editovat | editovat zdroj]

př(NRK): spojení (představení * kina):
  • { x.NÁZEV_K, k.ADRESA, x.JMÉNO_F $ | $ PŘEDSTAVENÍ(x) & KINA(k) & k.NÁZEV_K $ = $ x.NÁZEV_K }
př(NRK): film, který dávají ve všech kinech, kde něco dávají (P $ = $ PŘEDSTAVENÍ)
  • {p.JMÉNO_F $ | $ P(p) & ∀x ( P(x) ⇒ ∃y ( P(y) & y.NÁZEV_K $ = $ x.NÁZEV_K & p.JMÉNO_F $ = $ x.JMÉNO_F) ) }
  • 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)[editovat | editovat zdroj]

př(DRK): spojení (P$ = $představení * k$ = $kina)
  • {f $ | $ ∀k(P(Název_kina:k) & P(Jméno_Filmu:f, Název_kina:k))}
  • 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


další zdroje  


Relační algebry (3×🎓)[editovat | editovat zdroj]

Zážitky ze zkoušek  
  • 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).


př.: herci z filmů v kině Mír
  • (Hrají(Název_k $ = $ Mír)[Jméno_f, Čas] * Film)[Herec]
př.: kdy je v RA mozne: $ \small(E_1 \times E_2)(selekce) = $ $ \small E_1(selekce) \times E_2 $ ?
  • Jestliže všechny atributy ve selekci jsou současně v E1

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í $ \cup $ (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 $ \setminus $ (set difference) - musí platit stejné předpoklady jako u sjednocení
    • kartézský součin $ \times $ (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í $ ρ $ (rename)
  • další odvozené operace
    • Průnik $ \cup $ - dá se vyjádřit: $ R_1 \cap R_2 = (R_1 \cup R_2 \setminus (R_1 \setminus R_2))\setminus (R_2 \setminus R_1) $
    • Přirozené spojení $ * $ (Natural join) - lze cca vyjádřit pomocí kartézského součinu, selekce a projekce: $ R * S = \left(\left(R \times S\right)\left(Rx = Sx\right)\right)[A \cup B] $
      • 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: $ R \div S = R[A\setminus B] \setminus ((R[A\setminus B] \times S)\setminus R)[A\setminus B] $
  • 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í $ A_{R} \{(), [ ], \cup, \setminus, \times, rename \} $
  • Pozitivní relační algebra $ A_{RP} \{(), [ ], \cup, \times, rename \} $ - 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
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: $ \small FILM \div HEREC[JMENO\_HERCE] $

NRK:$ ~ \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))\} $

DRK: $ \small\{(f) | FILM(f)\wedge \forall h (HEREC(h) \Rightarrow FILM(f, h))\} $

další zdroje  


Bezpečné výrazy (2×🎓)[editovat | editovat zdroj]

Zážitky ze zkoušek  
  • 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


bezpečné fle
  • každá bezpečná fle je doménově nezávislá
  • dá se rychle zjistit zda ze daná fle bezpečná
  • N/DRK fle vyjádřitelné realnými DJ jsou bezpečné

volne proměnné - nejsou v zadnem kvantif. (např R(x)), vázané - jsou v nejakem kvantifikátoru (např: ∃xR(x))

Definujeme: výrazy dotazu $ \{x_1,...,x_k | A(x_1,...,x_k )\} $, $ A $ je formule DRK, databáze $ R* $, dom je doména pro $ R $, aktuální doména formule $ A $ $ adom(A) $ je množina hodnot z relací v $ A $ a konstant v $ A $.

Problém RK jsou nekonečné domény, které je potřeba omezit (aktuální doménou - adom), aby nedocházelo k nežádoucím jevům:

  • Nekonečná odpověď v případě nekonečné $ dom $ (např. $ \{ x,y | x=y \} $ )
  • situace, kdy TRUE ohodnocení volných proměnných není v DB (např. $ \{ x | ¬Employee(Name: x)\} $ )
  • nekonečný výpočet (impl. vyhodnoceni kvantifikace na nekonečné $ dom $) (např. $ \{ x | ∀y R(x,...,y) \} $ kde y má nekon.doménu )

řešením jsou doménově nezávislé (definitní, určité) dotazy $ DRK^{ind} $

  • tj.: nejsou definitní pokud pod ruznymi $ dom $ davaji ruzne vysledky
  • bezpečná formule ⇒ je také doménově nezávislá (opačně to neplatí, dom.nezávislé jsou nadmnožinou bezpečných)
další info  

další sémantiky (stejně silné), které uvedené problémy řeší:

  • neomezená interpretace s omezeným výstupem $ DRK^{out} $ (výsledek je definová jako průnik s $ adom^k $)
  • omezená interpretace $ DRK^{lim} $ (vyhodnocení dotazu probíhá pouze přes hodnoty z $ adom $)
    • každou proměnnou (volné i vázanou) omezíme doménu - přidáme $ R(x) $ a tím omezíme doménu $ x $ na $ adom(R) $ vzhledem k relaci $ R* $
    • konkrétněji:
      • Omezené kvantifikátory:
        • místo $ ∃x(φ(x)) $ se používá $ ∃x(R(x) \and φ(x)) $ - tedy $ (∃x ∈ R) φ(x) $
        • místo $ ∀x(φ(x)) $ se používá $ ∀x(R(x) ⇒ φ(x)) $ - tedy $ (∀x ∈ R) φ(x) $
      • volné proměnné ve φ(x) můžeme také omezit – konjunkcí $ R(x) \and φ(x) $

$ DRK^{out}≅DRK^{lim}≅DRK^{ind} $

zjistit, zda je DRK výraz dom.nezávislý je nerozhodnutelný problém (∄program co zjisti jestli je dom.nezávislý) a tedy $ DRK^{ind} $ není rek.spočetný jazyk

máme ale jednoduchá syntaktická pravidla (třídu) která nám určují bezpečné formule (jsou podmnožinou dom.nezávislých):

Bezpečné formule DRK[editovat | editovat zdroj]

př: bezpečná pravidla DRK:
  • ¬R(x,y) NENÍ bezpečný (dle 3.a)
  • x = y NENÍ bezpečný (3.a)
  • x = y ∨ R(x,y) NENÍ bezpečný (2,3.a)
  • x = y ∧ R(x,y) JE bezpečný
př: nebezpečná pravidla NRK
  • pomoci ¬: {S $ | $ ¬(S ∈ Sailors)}
  • pozn.: RA neobsahuje nebezpecna pravidla (nema ¬) a je doménově nezávislá
  1. nemají ∀
    • ( $ ∀x~ φ(x) $ můžeme nahradit $ ¬∃x (¬φ(x)) $ )
  2. každá disjunkce $ \varphi_1 \or \varphi_2 \or ... $obsahuje stejné volné proměnné
    • ( $ \varphi_1 \Rightarrow \varphi_2 $ tranformujeme na $ ¬\varphi_1\or\varphi_2 $ )
  3. každá konjunkce (maximální), $ φ \equiv φ_1∧...∧φ_r $má všechny volné proměnné omezené, tj. platí pro ni alespoň 1 z podmínek:
    (a) proměnná je volná v $ \varphi_i $co není negace ani binární porovnání
    (b) ∃$ \varphi_i\equiv x=a $, kde $ a $ je konstanta nebo omezená proměnná
  4. ¬ smí být pouze v konjunkcích z bodu 3
další zdroje  
Bezpečné (safe) formule NRK[editovat | editovat zdroj]
syntaktická pravidla pro bezpečné výrazy v NRK (nebylo na přednášce)  
  1. nemají ∀
  2. každá disjunkce $ \varphi_1 \or \varphi_2 $obsahuje pouze 1 stejnou volnou proměnnou
  3. každá konjunkce (maximální), $ φ \equiv φ_1∧...∧φ_r $má všechny volné proměnné omezené, tj. platí pro ni alespoň 1 z podmínek:
    (a) $ \varphi_i $ není negace ani binární porovnání ( $ \varphi_i $ obsahuje $ x $v ni volnou ⇒ každá komponenta $ x $ je omezená)
    (b) $ \varphi_i\equiv x.A=a $, kde $ a $ je konstanta nebo komponenta omezené proměnné
  4. ¬ smí být pouze v konjunkcích z bodu 3
př: nebezpečná pravidla Datalog

z přednášky:

  • GREATER(x,y) :- x > y (není bezpečné)
  • FRIEND(x,y) :- M(x) (není bezpečné)
  • S1(y,w) :- F(x,y), F(x,w), y ≠ w (je bezpečné, ≠ se bere jako =)

z media:Datalog-unsafe_rules.PNG:

  • s(X) :- r(Y) (není bezpečné)
  • s(X) :- r(Y) AND NOT r(X) (není bezpečné)
  • s(X) :- r(Y) AND X < Y (není bezpečné)

(ve všech připadech nekonečnost X splni pravidlo i když je R konečná relace)

Bezpečné pravidla v Datalogu[editovat | editovat zdroj]

  • Omezená proměnná x v Datalogu je taková, která se vyskytuje v těle literálu L a pro jehož tělo platí:
    • L je dán pravým predikátem, nebo
      • pravý predikát - jméno zákl.db relace nebo jméno virtuální relace (prakticky EDB nebo levá strana IDB pravidla)
    • L je x = a nebo a = x , kde a je konstanta nebo omezená proměnná

Pravidlo je bezpečné pokud jsou ∀proměnné omezené.

Datalog má povolená pouze bezpečná pravidla a dále platí, že v hlavách jsou pouze jména virtuálních relací

💡 (ktere nejsou v EDB), tzn odvozováním nevytvářím další základní data

Ekvivalence dotazovacích jazyků[editovat | editovat zdroj]

vyjadřovací síla relačních dotazovacích jazyků
NRK omezený na bezpečné výrazy je ekvivalentní $ A_{R} $ (relační algebře)
  • Z toho plyne, že kalkulové jazyky lze realizovat pomocí $ A_{R} $, která je relativně dost silná (ale nemá na logiku 1. řádu - Datalog)
DRK omezený na bezpečné výrazy je ekvivalentní $ A_{R} $

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

NRK omezený na bezpečné výrazy je ekvivalentní DRK omezenému na bezpečné výrazy
Datalog je silnější než $ A_{RP} $ (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ž $ A_{R} $
  • tranzitivní uzávěr (rekurze)
  • rozdíl lze vyjádřit pomocí negace

💡 Stratifikovaný nerekurzivní Datalog¬ je ekvivaletní $ A_{R} $

Relační úplnost (2×🎓)[editovat | editovat zdroj]

Zážitky ze zkoušek  
  • Relační úplnost (?) - bylo 30.5.2012


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

Relačně úplný je:

  • NRK, DRK (s bezpecnymi vyrazy jsou ekvivalentní $ A_{R} $)
  • SQL (silnější, protože má navíc agregační fce, aritmetiku, null...)

💡 Datalog¬ (Stratifikovaný nerekurzivní Datalog¬ je ekvivaletní $ A_{R} $)


další zdroje  
  • Anglicky relational completeness
  • DJ2-2-vyjadrovaci-sila.pdf 10. slide
  • zapisky

Věta o tranzitivním uzávěru relace (2×🎓)[editovat | editovat zdroj]

Zážitky ze zkoušek  
  • Věta o tranzitivním uzávěru relace (2012) - Napsal jsem definici tranzitivního uzávěru, znění věty a důkaz podle slidů prof. Pokorného. Až na drobnou chybu v definici tranzitivního úzávěru, kterou jsem opravil, to stačilo.
  • Veta o tranzitivnim uzaveru relace (2009, Galambos) - jeste ze jsem si tu otazku nechal az na konec, jinak bych tam sedel asi az do vecera. Nebyl jsem jedinej, koho otazka tohoto zkousejiciho dost zdrzela, spis to bylo pravidlo. Styl zkouseni podobny tomu pana Skopala s tim rozdilem, ze "se teda hezky snazte, vas necham chvili uzrat" a takhle se to opakuje nekolikrat..si osobne myslim, ze tenhle styl zkouseni je pro matfyz potrebnej, ale nikoliv u statnic, kde ma clovek dalsi ctyri otazky. Uz takhle tam nektery lidi sedeli a "zrali" u tech statnic celkem pres pet hodin (nebo i dyl-vyhlaseni melo bejt ve tri, ale ve trictvrte prisla pani Dejmkova, at prej mame strpeni, ze dva lidi jsou jeste zkouseny. Zacinali vsichni v devet..) Vubec si neumim predstavit, ze by v jedny komisi bylo takovejchhle zkousejicich vic. Navic nutit lidi na fleku (navic u statnic pod takovym tlakem) vymejslet veci, ktery treba nikdy neslyseli, protoze v doporucenejch kurzech ke statnicim se neberou, ale podle nazoru zkousejiciho se "do toho tematu daj zahrnout" (abych nekrivdil - to nebyl zrovna muj pripad, ale u nekterejch kolegu jo) podle me neni uplne stastnej pristup..


Binární relace R je tranzitivní, jestliže ∀abc: (a,b)∈R ∧ (b,c)∈R ⇒ (a,c)∈R.

Tranzitivní uzávěr Rₛ⁺ relace R, je nejmenší tranzitivní relace obsahující R.

  • v praxi užitečný – např. hledání spojení s přestupy v dopravě, nebo hledání nejkratší cesty v grafu, apod.

Věta (TC nemůže být vyjádřen v RA )Pro schéma binární relace R v AR neexistuje výraz, který ∀ relaci R počítá její tranzitivní uzávěr R⁺.

Pozn: 💡 Nestačí ani rozšíření o aritmetické výrazy, agregační fce a ano/ne dotazy, částečné řešení poskytuje Datalog

Rₛ = {a₁a₂, a₂a₃,...,aₛ₋₁aₛ}
Lemma E(Rₛ):

lze se na to dívat tak, že:

E(Rₛ) = {(aᵢ,aⱼ):
(aᵢ,aⱼ) ∈ Rₛ ∨
(aᵢ,x) ∈ Rₛ ∧ (x, aⱼ) ∈ Rₛ ∨
(aᵢ,x) ∈ Rₛ ∧ (x, y) ∈ Rₛ ∧ (y, aⱼ) ∈ Rₛ ∨
...}

Dk (sporem, nechť takové E existuje (je konečné), pak dokážu zvýšit d natolik, že aₘaₘ₊d ∉ E(Rₛ) nebo aₘ₊daₘ ∈ E(Rₛ) a nemělo by být)[editovat | editovat zdroj]

  • uvažujme binární relaci Rₛ = { aᵢaⱼ | 1 ≤ i < s } ⇒ jejím tranzitivním uzávěrem je Rₛ⁺ = {aᵢaⱼ: i < j}
  • ukážeme, že ∄ výraz E(Rₛ) = Rₛ⁺, ∀s
  • Lemma: každý RA výraz E můžeme pro dost.velké s vyjádřit jako: E(Rₛ) ≅ { b₁,...,bₖ | Γ(b₁,...,bₖ) }, kde Γ je v DNF
    • bᵢ = aⱼ , bᵢ ≠ aⱼ ,
    • bᵢ = bⱼ + c nebo bᵢ ≠ bⱼ + c, kde c je (ne nutně kladná) konstanta,
    • Dk: indukcí dle počtu operátorů v E
  • sporem, nechť takové E existuje, pak můžeme d zvýšit natolik že:
    • díky konečnému počtu atomických formulí v Γ: aₘaₘ₊d ∉ E(Rₛ) nebo
    • pomocí ≠: aₘ₊daₘ ∈ E(Rₛ) (💡 obojí je spor se definicí TC)
  • Tedy: Pro jakýkoliv výraz E vždy existuje s pro něž E(Rₛ) ≠ Rₛ⁺
Dk (detailně z přednášky s poznámkami - NEvyžaduje se ke zkoušce)  
 
  1. Nechť ∑ₛ = {a₁,a₂,...,aₛ}, s ≥ 1, je množina konstant, na které neexistuje uspořádání a
    Rₛ = {a₁a₂, a₂a₃,...,aₛ₋₁aₛ} = { aᵢaⱼ $ | $ 1 ≤ i < s }
    Pozn.: Rₛ odpovídá grafu a₁ → a₂ → ... → aₛ , tj. transitivita je definovaná pomocí konektivity v orientovaném grafu.
    Pozn.: je-li na ∑ₛ definováno uspořádání <, pak Rₛ⁺ ≅ (Rₛ [1] × Rₛ [2])(1 < 2)
  2. Ukážeme, že pro libovolný výraz E(R) existuje s takové, že E(Rₛ) ≠ Rₛ⁺.
  3. Lemma: Je-li E výraz relační algebry, pak pro dostatečně velké s
    E(Rₛ) ≅ { b₁,...,bₖ $ | $ Γ(b₁,...,bₖ) } (💡 tedy výsledek je množina k-tic)
    kde k ≥ 1 a Γ je formule v DNF (disjunktivní normální formě).
    Atomické formule v Γ mají speciální tvar:
    • bᵢ = aⱼ , bᵢ ≠ aⱼ ,
    • bᵢ = bⱼ + c nebo bᵢ ≠ bⱼ + c, kde c je (ne nutně kladná) konstanta,
      • přičemž bⱼ + c je zkratka pro “takové aₘ , pro které bⱼ = aₘ₋c
      • bⱼ ∈ ∑ₛ (💡 tedy doména interpretace pro ohodnocení proměnných bⱼ je ∑ₛ )
    💡 Lemma říká že počet atomických formulí v Γ závisí na E a ne na s.
    Pozn.: bᵢ = bⱼ + c znamená: bᵢ je za bⱼ ve vzdálenosti c uzlů.
  4. Dk( sporem, nechť takové E existuje (je konečné), pak dokážu zvýšit d natolik, že aₘaₘ₊d ∉ E(Rₛ) nebo aₘ₊daₘ ∈ E(Rₛ) a nemělo by být ):
    • existuje E tak, že E(R) = R⁺ a jakoukoliv relaci R, tj. i E(Rₛ) = Rₛ⁺ pro dostatečně velká s
    • dle lemmatu, Rₛ⁺ ≅ { b₁,b₂ $ | $ Γ(b₁,b₂)}
    Nastávají dva (disjunktní) případy:
    1. každá klauzule z Γ obsahuje atom tvaru
      b₁ = aᵢ , b₂ = aᵢ nebo b₁ = b₂ + c (💡 tedy b₂ = b₁ - c)
      Nechť b₁b₂ = aₘaₘ₊d , kde m > libovolné i a d > libovolné c
      ⇒ b₁ = aₘ a b₂ = aₘ₊d nevyhovuje žádné klauzuli z Γ.
      ⇒ aₘaₘ₊d ∉ E(Rₛ) ⇒ aₘaₘ₊d ∉ Rₛ⁺ (💡 což je špatně, aₘaₘ₊d by z definice TC mělo být v Rₛ⁺ )
      spor
    2. v Γ existuje klauzule s atomy obsahujícími jen ≠ .
      Nechť b₁b₂ = aₘ₊daₘ ,
      kde ani bᵢ ≠ aₘ ani bᵢ ≠ aₘ₊d není obsaženo v Γ a
      d > 0 je větší než libovolné c v b₁ ≠ b₂ + c nebo b₂ ≠ b₁ + c v Γ (viz konstrukce Γ)
      ⇒ aₘ₊daₘ ∈ E(Rₛ) pro postačující s, a tedy by mělo být i v Rₛ⁺ což ale je v rozporu s definicí TC
      spor
    Tedy: Pro jakýkoliv výraz E vždy existuje s pro něž E(Rₛ) ≠ Rₛ⁺
  5. Dk lemmatu (indukcí přes počet operátorů v E):
    1. krok: ∅ operátorů ⇒ E ≡ Rₛ nebo E je relační konstanta stupně 1
      ⇒ E ≡ { b₁ , b₂ $ | $ b₂ = b₁ + 1 }, resp.
      ⇒ E ≡ { b₁ $ | $ b₁ = c₁ ∨ b₁ = c₂ ∨ ... ∨ b₁ = cₘ },
    2. indukční krok (vše mimo projekce je jednoduché):
      a)  E ≡ E₁ ∪ E₂ , E₁ - E₂ , E₁ × E₂ , definujme:
      E₁ ≅ {b₁,...,bₖ $ | $ Γ₁(b₁,...,bₖ) }
      E₂ ≅ {b₁,...,bₘ $ | $ Γ₂(b₁,...,bₘ) }
      ⇒ pro ∪ k = m a tedy
      E ≅ {b₁,...,bₖ $ | $ Γ₁(b₁,...,bₖ) ∨ Γ₂(b₁,...,bₖ)} ,
      ⇒ pro mínus (je také k = m)
      E ≅ {b₁,...,bₖ $ | $ Γ₁(b₁,...,bₖ) ∧¬Γ₂(b₁,...,bₖ)},
      ⇒ pro ×
      E ≅ {b₁,...,bₖ bₖ₊₁,...,bₖ₊ₘ $ | $ Γ₁(b₁,...,bₖ) ∧ Γ₂(bₖ₊₁,...,bₖ₊ₘ)}
      💡! pro ∧ pak následuje transformace do DNF.
      b)  E ≡ E₁(φ) a φ obsahuje buď = nebo ≠
      ⇒ E ≅ {b₁,...,bₖ $ | $ Γ₁(b₁,...,bₖ) ∧ φ(b₁,...,bₖ)}
      c)  E ≡ E₁[S] budeme uvažovat projekci odstraňující jeden atribut
      ⇒ jde o posloupnost permutací proměnných a eliminaci poslední komponenty
      eliminace bₖ vede k {b₁,...,bₖ₋₁ $ | $ ∃bₖ Γ(b₁,...,bₖ)} , kde Γ je v DNF
      ⇒ podle a) : ∪ᵢ₌₁..ₘ{b₁,...,bₖ₋₁ $ | $ ∃bₖ Γᵢ(b₁,...,bₖ)}
      ⇒ budeme eliminovat ∃ z jednoho konjunktu
      • v Γᵢ není bₖ = aᵢ, bᵢ = bₖ + c, bₖ = bᵢ + c
      ⇒ {b₁,...,bₖ₋₁ $ | $ Γᵢ(b₁,...,bₖ₋₁)}
      kde Γᵢ neobsahuje bₖ ≠ aᵢ , bᵢ ≠ bₖ + c, bₖ ≠ bᵢ + c
      • v Γᵢ je buď bₖ = aᵢ, bᵢ = bₖ + c, bₖ = bᵢ + c
      ⇒ provedou se substituce za bₖ
      výsledky se upraví na TRUE
      nebo FALSE
      nebo bₜ = bⱼ + g
      a přidají se: bᵢ ≠ aⱼ pro s-c < j ≤ s, resp.
      bᵢ ≠ aⱼ pro 1 < j ≤ c
další zdroje  
  • Zdroj (znění a důkaz věty):
    • Věta: For an arbitrary binary relation R, there is no expression E(R) in relational algebra equivalent to R+, the transitive closure of R.
    • Článek: Alfred V. Aho and Jeffrey D. Ullman: Universality of data retrieval languages. In POPL '79: Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages, San Antonio, Texas, 1979, strany 110--119
    • link

V češtině u Prof. Pokorného na slajdech.

A pokud to někdo náhodou stále nechápe, tak jako já, tak doporučuji materiály z jedné nizozemské univerzity, kde je dopodrobna rozebrán jak důkaz lemmatu, tak hlavního teorému: Lemma1 MainTheorem