Syntax highlighting of Archiv/Dotazovací jazyky I

{{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 ==
* [http://www.ksi.mff.cuni.cz/~pokorny/vyuka.html#NDBI006 info u Pokorného]

== Zkoušky ==
Je dobré si úlohy skúsiť vyriešiť najprv samostatne, pre niektoré úlohy boli zverejnené aj [[Dotazovací jazyky I - řešení|riešenia]].
=== 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: p<sub>R</sub> = 200, b<sub>R</sub> = 10, p<sub>S</sub> = 500, b<sub>S</sub> = 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 p<sub>R</sub> + (p<sub>R</sub>*p<sub>S</sub>)/(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 
 p<sub>R</sub> + n<sub>R</sub>(2+1) = p<sub>R</sub> + 3*n<sub>R</sub> = 200 + 6000 = 6200
Vysvetlenie: Relaciu R musim nacitat celu (p<sub>R</sub>) a pre kazdy zaznam (celkovo ich je n<sub>R</sub> = p<sub>R</sub> * b<sub>R</sub> = 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
 p<sub>R</sub> + n<sub>R</sub>(2+5) = p<sub>R</sub> + 7*n<sub>R</sub> = 200 + 14000 = 14200
Vysvetlenie: Relaciu R musim nacitat celu (p<sub>R</sub>) a pre kazdy zaznam (celkovo ich je n<sub>R</sub> = p<sub>R</sub> * b<sub>R</sub> = 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: p<sub>R</sub> + 1 + n<sub>R</sub> * ( 1/16 + 5)
 myslim, že je to spíš takhle: p<sub>R</sub> + 1 + 16 + n<sub>R</sub> * 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 (p<sub>R</sub>), 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: t<sub>1</sub> OR t<sub>2</sub> OR t<sub>3</sub> (kde t<sub>1</sub>, t<sub>2</sub>, t<sub>3</sub> su prislusne termy)

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

You're the grateest! JMHO

=== 28.1.2009 ===
Jen doplnění věcí:
* Spojení relací R * S pomocou hnízděných cyklů: p<sub>R</sub> = 2000, b<sub>R</sub> = 20, p<sub>S</sub> = 5000, b<sub>S</sub> = 50, počet bufferů M = 402.
** Pozn. k řešení: Jen naházet do vzorečku p<sub>R</sub> + p<sub>R</sub> * p<sub>S</sub> / (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&nbsp;R
** +&nbsp;&nbsp;- &nbsp;&nbsp;&nbsp; AND
** -&nbsp;&nbsp;+ &nbsp;&nbsp;&nbsp; OR
** -&nbsp;&nbsp;+ &nbsp;&nbsp;&nbsp; zástupné znaky
** -&nbsp;&nbsp;+ &nbsp;&nbsp;&nbsp; tezaurus (myslím)
** -&nbsp;&nbsp;+ &nbsp;&nbsp;&nbsp; lemmatizace (myslím)
** +&nbsp;&nbsp;- &nbsp;&nbsp;&nbsp; rozlišování velkých a malých písmen
** +&nbsp;&nbsp;- &nbsp;&nbsp;&nbsp; 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>
&nbsp;- vybrat všetkých hercov, ktorí hrali vo vsech filmoch režírovaných Formanom (3b)<br>
&nbsp;- vybrat všetkých režisérov, kteří nehrali v žiadnom svojom filme (3b)

*2.) Upraviť schéma z 1.) na OR model s tým, že do databáze pribudneú aj iné osoby. Bolo potreba použiť typy a referencie s cieľom odstrániť FilmId a HerecId a vo výsledku mali byť 3 relácie (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í.

*3.) Čosi z DIS - ako sa budú meniť ( - znižovať, + zvyšovať) P a R ak sa použije:
** Boolean operátor AND
** Boolean operátor OR
** zástupné znaky
** (spolu asi 11 vecí)

*4.) Definovať inverznú frekvenciu dokumentu (IDF)

*5.) Počítací príklad na spojenie relácií R * S pomocou hniezdených cyklov: p<sub>R</sub> = 2000, b<sub>R</sub> = 20, p<sub>S</sub> = 5000, b<sub>S</sub> = 50 (1b)

*7.) (3b) Napísať postup ako z:
<font style="font-family: Courier New">
 ((R[B=C]S)[D=E]T)[A] 
</font>
pomocou aspoň troch krokov vznikne:
<font style="font-family: Courier New">
 ((T[E][E=D]S[ACD])[C=B]R)[A]
</font>
*8.) Boli dané relácie:
 +----------+    +----------+    +----------+
 |  Agent   |    |  Dum_id  |    | Vybaveni |
 +----------+    +----------+    +----------+
 | Agent_id | \  | Dun_id   | -- | Dum_id   |
 | Jmeno    |  \ | Agent_id |    | Rys      |
 +----------+    +----------+    +----------+

domov je 1000, agentov 2000, vybaveni 10 000, sú známe blokovacie faktory
na tabuľke domov je klastrovany index cez ??, na vybaveni je B+ normalni index cez ??

a) Nakreslite strom dotazu 
 SELECT nazev, vybaveni_id 
   FROM dum, vybaveni, agent
  WHERE dum.dum_id = agent.dum_id 
    AND vybaveni.rys = '5+1'
    AND agent.id='007' 
    AND vybaveni.dum_id = dum_id

b) dotaz optimalizujte a spočítajte IO.

c) nakreslite strom optimalizovaného dotazu (ak je rozdielny od Vášho prvého stromu)

The genius store called, they're rnninug out of you.

=== 7.2.2005 ===
*1)-6) byly selecty nad danou databazi napsane prostredky SQL89:
**databaze Studio
**Dava(nazef_f,nazev_k);
**Film(nazev_f,reziser);
**Kino(nazev_k,adresa);
**D1(1 bod) Filmy, co davaji nekde. 
**D2(3 body) Filmy, co davaji vsude. 
**D3(2 body) Filmy, co nedavaji nikde. 
**D4(3 body) Kina, kde davaji vsechny filmy. 
**D5(2 body) Kina, kde davaji jen Kolju. 
**D6(3 body) Kina, kde davaji vsechny filmy rezisera Sveraka a nic jineho. 
**D7(1 bod) vyjadrit D3 pomoci SQL92 

*8) (3 body) popiste pojeti ADT v SQL99 

*9) (2 body) vyjadrete NATURAL JOIN prostredky SQL89, konkretne mame tabulky R(A,B,C) a S(D,A,C) a mame vyjadrit pomoci sql89 prikaz "SELECT B FROM R NATURAL JOIN S" 

*10) (1+2body) uvazujeme dva texty a vektorovy model dat:
**A Rano, rano, ranicko. Bude prset. Bude hodne prset. 
**B Rano bude prset. Kazde rano bude prset. 
**a) definujte TF a IDF 
**b) zkonstrujte matici dokumenty*termy zalozenou na TF*IDF 
**Uvazujte pouze vyznamova slova, nehledte na koncovky podstatnych jmen. Eventualne symbolicke logaritmy vyjadrete pouze symbolicky. 
**// slova rano a ranicko se daly brat jako jeden term, slovo "bude" zrejme neni vyznamove slovo 

*11) (2 body) K databazi Studio navrhnete DTD tak, aby byla zachovana referencni integrita mezi strukturou Dava a strukturami Film a Kino. 
Hodnocení: 16-18 bodu 3, 19-22 bodu 2, 23-26 bodu 1
zda se mi ze vetsina z vas ipnhoe (4) nema napr to s tou antenou neni problem rozhodne ne v evrope zatim jsem nezaznamenal vypadek signalu(krom metra) obcas to akorat ukazuje  carky  jak chce ale kurv4 to nened proble9m de1le fm?     k cemu?(krom toho ze muzete o chvilku dele poslouchat) mate net ste snad socky ze na nej nemate radia vam pobezi kdekoliv pres net  dokonce ocko a ct24 muzete sledovat s obrazem (zere to strasne moc dat) .dale stabilizace pri nataceni videa     dalsi vysmech natacel si video iP4kou evidentne ne pac stabilizace obrazu tam neni treba pokud nejsi kripl nebo nenatacis pri epiletickym soku    ..pochybuju ze pristi (taky nemusi byt   ) ipnhoe bude mit mass storage nebo micro USB konektorco si MYSLIM ze novy ipnhoe prinese je lepsi baterie a spousty a spousty softwareovfdch vylepsenich jako jak tady nekdo psal ten multitasking