Agregácie a rekurzia Flashcards
Ako vieme zrátať iba unikátne hodnoty?
COUNT(DISTINCT x)
Ako vieme robiť selekciu na už agregovaných a grupovaných výrazoch?
na konci HAVING HAVING SUM(v.Mnozstvo) >= 5
Ako funguje agregácia a relačný kalkul?
Za <3 vypíšeme voľné premenné a agregácie. Zvyšné sa použijú na grupovanie.
Ako funguje subtotal v datalogu?
subtotal(nieco, nieco2, nieco3)
nieco - množiny argumentov, vstupné dáta na ktorých robíme agregáciu
nieco2 - grupovacie argumenty
nieco3 - agregácie
subtotal(vypite_alkoholy(K, A), [K], [Pocet = count(A)]).
Ako preložiť datalog do rel. algebry?
Najprv preložíme nezávislé dotazy.
Negácia je rozdiel, or je zjednotenie a pod.
Čo vieme použiť namiesto rozdielu?
Antijoin
Prečo je antijoin lepší ako rozdiel?
Pri rozdiele môžeme stratiť atribúty, ktoré treba potom znova najoinovať, pri antijoine ale nestrácame.
Ako robíme rekurziu v rel. algebre?
fixpoint (fí)
fí(postupnosť priradení), pokiaľ sa mení tak sa opakuje, ak sa nezmení máme výsledok. napr.
ancestor := parent
fí(ancestor := ancestor \/ X, A(ancestor ⋈ parent))
Ako robíme rekurziu v rel. kalkule?
Nijak špeci, spravíme len definície v rámci tej množiny (slide 28)
Ako robíme rekurziu v sql?
WITH RECURSIVe, potom v tele dávame triviálny prípad a UNION
Čo hovorí Tarskeho veta o pevnom bode pre úplné zväzy?
iteratívny výpočet konverguje k pevnému bodu pre “obvyklé“ (aj rekurzívne) dotazy, keďže kartézsky súčin, join, zjednotenie, projekcia a premenovanie sú „neklesajúce“ operácie
Čo je stratifikácia?
program je stratifikovaný, keď existuje priradenie S(.), ktoré každému predikátu priradí celé číslo, tzv. stratum (vrstva) tak, že platí:
• Ak p je definovaný pomocou q, tak S(p) >= S(q)
• Ak p je definovaný pomocou not q, tak S(p) > S(q)
Aký je alg. stratifikácie?
- Všetkým predikátom priraď stratum 1
- Ak niektoré pravidlo porušuje podmienku stratifikácie, tak zvýš stratum predikátu tak kde je najmenšie celé číslo, ktoré tú podmienku spĺňa
- Ak je niektoré stratum väčšie ako počet predikátov, tak program sa nedá stratifikovať
Aká je naivná evaluácia v datalogu?
- pre všetky predikáty pi = prázdna množina
- priraďuj pokiaľ sa nejaká mn. zmenila
- máme výsledok (niekedy ale krok 2 neskončí)
Aká je seminaivná evaluácia?
Nepridávať vždy všetko znova ale len rozdiel (nejaká delta, nové záznamy)