{{predmet|Dotazovací jazyky I|Jaroslav Pokorný|DBI001}} Dotazovací jazyky, povídání o SQL.

  • zkouška: písemná – příklady

  • zápočet: referát na semináři (po dvojicích, PowerPointová prezentace), jinak psané (Word)

Odkazy

Zkoušky

Je dobré si úlohy skúsiť vyriešiť najprv samostatne, pre niektoré úlohy boli zverejnené aj .

26. 1. 2012

Nebylo tam nic, co neni na tady, velká část se kryla s písemkou co je na wiki z 10.2.2009, nebylo tam ale vůbec nic z optimalizace a na DIS tam byla tabulka věcí a rozhodnout, jestli zvyšuje P nebo R.

Bodování úloh docela mírný (třeba v OR stačí přibližná syntaxe, hlavně když je tam myšlenka), známkování naopak trošku přísnější - 22-19: 1, 18,17: 2, 16,15 (nejsem si úplně jistej): 3, 14-0: 4.

Takže umět pořádně SQL, počítat přístupy v nested loops a alespoň navrhnout OR model a je to solidní základ na projití.

10.2.2009

  • 1) Dotazovanie nad zadanou schemou (boldom su kluce)

Pobocka(meno_pivovaru, meno_pobocky, adresa)

Vari(meno_pivovaru, meno_pobocky, znacka, stupen)

Odobera(hospoda, znacka, stupen, meno_pivovaru, cena) (kluc si nepamatam)

* Q1: Pivovary, kt. pivo nikto neodobera. (cez having to ide velmi jednoducho)

* Q2: Pivovary, kt. nejaku znacku (piva) nikto neodobera.

  • 2) previest schemu do OR s pouzitim REF, kolekcii (napisat dotazy pre CREATE TYPE a odpovedajuce CREATE TABLE, pozor v SQL1999 je iba ARRAY)... Nad danou schemou spravit dotaz:

Vsetky hospody, vsetky znacky a stupne, ktore sa v nich varia? (neviem, ci je to presne ono)

  • 3) Vysvetlit, kedy je v RA mozne spravit: (E1 x E2) (selekcia) = E1(selekcia) x E2

  • 4) Pocitanie pristupov na stranky: pR = 200, bR = 10, pS = 500, bS = 5, M = 42, spojenie R[A=B]S, max 5 n-tic z S spojitelnych s kazdou n-ticou z R

    • a) nested loops, pocet pristupov

iba vzorec pR + (pR*pS)/(M-2) = 2700

  • b) nested loops, 2-urovnovy klastrovany B+ index nad B v S, pricom vsetky spojitelne n-tice z S pre vybranu n-ticu z R sa nachadzaju v 1 stranke

pR + nR(2+1) = pR + 3*nR = 200 + 6000 = 6200 Vysvetlenie: Relaciu R musim nacitat celu (pR) a pre kazdy zaznam (celkovo ich je nR = pR * bR = 2000) potrebujem 2 pristupy v indexe na najdenie pozadovanej stranky (v ktorej su vsetky zaznamy spojitelne s aktualnou n-ticou z R) + 1 pristup na nacitanie tejto stranky.

  • c) nested loops, 2-urovnovy NEklastrovany B+ index nad B v S

pR + nR(2+5) = pR + 7*nR = 200 + 14000 = 14200 Vysvetlenie: Relaciu R musim nacitat celu (pR) a pre kazdy zaznam (celkovo ich je nR = pR * bR = 2000) potrebujem 2 pristupy v indexe na najdenie pozadovanej stranky + max. 5 roznych stranok najst (pretoze max. 5 n-tic je spojitelnych a kedze ide o neklastrovany index, mozu byt kdekolvek)

  • d) spocitat pripad c), ak vieme, ze A bude zotriedena a pocet listov indexu je 16:

tusim, ze: pR + 1 + nR * ( 1/16 + 5) myslim, že je to spíš takhle: pR + 1 + 16 + nR * 5, zdůvodnění mi připadá v pořádku, možná drobné doplnění:

když načítam další stránku R, ponechávám si aktuální stránku indexu a pokračuji z toho místa, není třeba procházet stránky indexu víc jak 1x, tzn 16 přístupů. Jookyn

Vysvetlenie: Relaciu R musim nacitat celu (pR), 1 stranka na pristup do 1.urovne indexu nad B a pre kazdy zaznam v A hladam n-tice z S, ale vyuzivam to, ze A je zotriedena a index je B+ - teda nemusim vzdy pristupovat na 1.uroven indexu, ale posuvam sa iba po listoch, tych je 16. No a este pristup na stranky, kde su n-tice z S (tych je max. 5))

  • 5) Sim(Q,Di) zadana skalarnym sucinom, kde q1, q2 a q3 su nenulove. Ako to bude vyzerat v boolskom modeli?

Odpoved: t1 OR t2 OR t3 (kde t1, t2, t3 su prislusne termy)

Ak tam su nejake nejasnosti, sorry, snazil som sa napisat vsetko, co som si zapamatal.

3.2.2009

Tak co se objevilo v dnešní zkoušce, jedná se jen o doplnění předchozích příkladů:

  • 1) máme počty stránek pR, pS a blokovací faktory bR bS a počet stránek paměti M, spojení je R[A=B]S, přičemž ke každé n-tici z R je max. 5 n-tic z S

    • a) spočtěte počet čtení přes hnízděné cykly (2 body)

      • řešení: pR + pR*pS/(M-2)

    • b) spočtěte počet čtení přes hnízděné cykly když nad B je 2-úrovňový klastrovaný index, a ke každé n-ticy z R jsou n-tice z S uloženy v jedné stránce (3 body)

      • řešení: pR + nR*I(B,S)*1 (za správnost neručím)

      • řešení: pR + nR*(I(B,S)+1) ... a neni to spis takhle? Lukas

    • c) spočtěte počet čtení přes hnízděné cykly když nad B je 2-úrovňový obyčejný index (3 body)

      • řešení: pR + nR*I(B,S)*5, kde nR = pR*bR (za správnost neručím)

      • řešení: pR + nR*(I(B,S)+5) ... a neni to spis takhle? Lukas

    • upozornění: spočtěte znamená napsat číslo, ne jen vzoreček;

  • 2) DIS - jaké bude qk (viz. vzoreček ze slajdů) když v dotazu budou pouze klíčová slova

    • řešení: qk = IDFk protože TFk = 1 a maxTFk = 1

  • 3) DIS - spočítat vektor D = TFk*IDFk, když TFk,m a DFk byly zadány

  • 4) Schéma: viz to schema nize s tabulkami Herec, Hraje_v a Film

    • vybrat všetkých hercov, ktorí hrali vo vsech filmoch režírovaných Formanom (3b)

  • 5) Upravit schéma ze 4) na OR model s tim, že do databáze pribudou i jiné osoby. Narozdil od kteresi minule pisemky se tu pozadovalo ponechani HerecId a FilmId a pouziti typu kolekce. Ve výsledku mely byt 2 relace (3b).

    • Napísať v tomto novom shémate dotaz D3: Pre každého herca zistiť počet Formanových filmov (režírovaných Formanom) do ktorých boli obsadení.

28.1.2009

Jen doplnění věcí:

  • Spojení relací R * S pomocou hnízděných cyklů: pR = 2000, bR = 20, pS = 5000, bS = 50, počet bufferů M = 402.

    • Pozn. k řešení: Jen naházet do vzorečku pR + pR * pS / (M - 2).

  • Byla tam tabulka a pro každý řádek určit, zda zvyšuje či snižuje P (přesnost) a R (úplnost)

    • P R

    • +  -     AND

    • -  +     OR

    • -  +     zástupné znaky

    • -  +     tezaurus (myslím)

    • -  +     lemmatizace (myslím)

    • +  -     rozlišování velkých a malých písmen

    • +  -     rozlišování frází

    • ... nějaké další

  • V otázce udělat dotaz nad OO modelem byl dotaz: Vyberte všechny herce a k nim počet Formanových filmů, ve kterých měli roli.

21.1.2009

Většinou se příklady opakují z minulých roků. *1.) Schéma:

<span style="line-height: 100%"> <font style="font-family: Courier New">

+---------+ +-------------+ +----------+ | Agent | | Dum | | Vybaveni |

+---------+ +-------------+ +----------+ | A_Id | - | Adresa | -- | Adresa |

| A_Jmeno | \ | Vlastnik_jm | | Rys | +---------+ -| A_Id | +----------+

+-------------+ </font>

</span>

  • Napsat dotaz, který vypíše jména těch vlastníků domů, jejichž domy spravuje pouze jeden agent (přes having to jde hezky)

*2.) Vytvořit OO model, nesmí se ztratit žádná informace, mělo se využít systémově generovaných OID. *3.) Dotaz nad vzniklých OO schématem.

*4.) TFxIDF na dvou větách, pouze s podstatnými jmény. *5.) Spočítat Similarity pro dva dotazy a seřadit je podle relevantnosti (dotazem se tady myslí nějaká věta, podle toho jestli obsahuje slovo nebo ne se dává váha 0 nebo 1)

*6.) Nakreslit strom dotazu viz písemka z 17.1.2008 př. 8a) *7.) Pro schéma nahoře spočítat IO operací.

  • Agent: 200 záznamů, blokovací faktor 10, jednoúrovňový index nad A_ID

  • Dům: 1000 záznamů, blokovací faktor 4, klastrovaný dvouúrovňový index nad Adresou => 250 stránek

  • Rys: 10 000 záznamů, blokovací faktor 10, klastrovaný dvouúrovňový index nad Adresou

  • Pozn. k řešení: Protože agentů je 200 a domů 1000, tak připadá na agenta cca 5 domů. Protože domů je 1000 a vybavení 10 000, tak na dům připadá cca 10 rysů. Agenta 007 lze si vyhledat na (1 + 1) přístupů (jeden za zalezení do indexu a pak načtení jednoho agenta). Pak lze projít domy a vybrat ty, které mají agenta 007 (nad A_ID nebyl u domů index) -je tedy potřeba načíst 250 stránek. Při tom k nim jde lepit zároveň agenty. Na výsledek joinu agentů s domy provedeme join, který veme 5*(2 + 2) IO operací (po joinu nám zbylo cca 5 domů - záznamů, které měli agenta 007; pro každý dům musíme načíst vybavení, tzn. 2 IO pro zalezení do indexu a pak ještě načíst cca 10 záznamů vybavení - protože jsou kvůli klastrovanému indexu záznamy jedné adresy u sebe, stačí je sekvenčně načíst ... 10 záznamů veme max 2 stránky - blokovací faktor je totiž 10 a na jeden se asi netrefíme). Výsledek teda mohl být: (1 + 1) + 250 + 5 * (2 + 2) = 272. (Toto bylo moje řešení, které prošlo - když tak mě opravte, jestli je něco špatně).

*8.) Nakreslit optimalizovaný strom. *9.) Kolik bude potřeba IO operací, když u domů bude klastrovaný index i nad A_Id.

  • Pozn. k řešení: V tomto případě načteme domy agenta 007 rychleji ... místo 250 stačí (2 + 2) IO operací (dvě na zalezení do indexu a pak načtení cca 5 domů - ty se při blokovacím faktoru 4 vlezou do 2 stránek).

17.1.2008

Stupnica 24-21 - 1; 20-19 - 2; 18-17 - 3 *1.) Schéma:

<span style="line-height: 100%"> <font style="font-family: Courier New">

+---------+ +---------+ +---------+ | Herec | | Hraje_v | | Film |

+---------+ +---------+ +---------+ | HerecId | -- | HerecId | / | FilmId |

| Jméno | | FilmId | / | Titul | | Adresa | +---------+ | Režisér |

+---------+ +---------+ </font>

</span>  - vybrat všetkých hercov, ktorí hrali vo vsech filmoch režírovaných Formanom (3b)

31.1.2007

19.1.2006

10.2.2005

7.2.2005

22.1.2005