Michal Rjaško

Kontakt:

Úvod do databázových systémov - Cvičenia 2016/2017 ZS

Ján Mazák, M255, mazak at dcs.fmph.uniba.sk
Michal Rjaško, rjasko at dcs.fmph.uniba.sk

Výsledky rozcvičiek

Zobraziť výsledky.

2. Bonusová DÚ

1. Bonusová DÚ

Zadania rozvičiek

  1. 30.11.2016
    V relácii r(A, B, C, D, E, F, G, H) platia funkčné závislosti ACDH → CE, ACDF → EG, C → H, EF → BEG. Najdite minimalne pokrytie a bezstratovu dekompoziciu r do 3NF.
  2. 28.11.2016
    V relácii r(A, B, C, D, E, F, G) platia funkčné závislosti ABCD → EF; ABE → FG; ABDG → CF; G → BD. Nájdite min. pokrytie a dekomponujte r do 3NF bezstratovo a so zachovaním funkčných závislostí.
  3. 21.11.2016
    Uvažujme reláciu r(A,B,C,D,E,F,G,H) s funkčnými závislosťami
    F = {A→D, A→G, E→B, AC→B, A→D, AC→E, BG→C, BG→F, E→D, BH→E, BCD→G, BCD→H, BDG→A}
    Nájdite minimálne pokrytie danej množiny funkčných závislostí.
  4. 16.11.2016
    EDB={lubi(Pijan, Alkohol), capuje(Krcma, Alkohol), navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    Nájdite všetkých pijanov, ktorí navštevujú len krčmy, ktoré čapujú len alkoholy, ktoré majú radi (nie nutne všetky) a navštívili krčmu aspoň raz.
  5. 14.11.2016
    EDB={lubi(Pijan, Alkohol), capuje(Krcma, Alkohol), navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    Nájdite všetky dvojice [K, R], kde K je krcma, ktorú niekto navštívil, a R je podiel sklamaných pijanov, ciže podiel poctu pijanov, ktorí K navštívili, ale nelúbia žiaden alkohol, ktorý K capuje, k celkovému poctu pijanov, ktorí K navštívili.
  6. 7.11.2016
    EDB={lubi(Pijan, Alkohol), capuje(Krcma, Alkohol), navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    Nájdite trojice [P, K, Pocet], ktoré hovoria pri koľkých (Pocet) návštevách vypil pijan P v krčme K aspoň 5 borovičiek na jedno posedenie.
  7. 24.10.2016
    EDB={lubi(Pijan, Alkohol), capuje(Krcma, Alkohol), navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    Nájdite alkoholy, ktoré čapuje krčma Stein, ale nikdy ich tam nik nepil
  8. 19.10.2016
    EDB={lubi(Pijan, Alkohol), capuje(Krcma, Alkohol), navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    Nájdite všetky dvojice P, K také, že P pil v K aspoň raz a každý alkohol, ktorý vypil P v K, bol vypitý v presne jednej inej krčme.
  9. 17.10.2016
    EBD={Kurz(ID, Ucitel, Predmet); Navstevuje(Student, KurzID); Hodnotenie(Student, KurzID, Znamka);}
    Nájdite všetky dvojice [U, S], kde S je študent, ktorý má na všetkych kurzoch s učiteľom U len známky horšie ako 2, ale na všetkých ostatných kurzoch ma samé 1 (t.j. akoby si učitel U "zasadol" na študentovi S).
  10. 12.10.2016
    EDB={lubi(Pijan, Alkohol), capuje(Krcma, Alkohol), navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    nájdite všetky alkoholy, ktoré majú radi pijani, ktorí nikdy nenavštívili "Slovak pub". (pijani su tí, čo majú radi nejaký alkohol)
  11. 10.10.2016
    EDB={lubi(Pijan, Alkohol), capuje(Krcma, Alkohol), navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    Nájdite dvojice [K, A] také, že krčma K čapuje alkohol A, a zároveň každý pijan, ktorý ľúbi alkohol A, ho vypil pri niektorej návšteve krčmy K (čiže tú krčmu aj navštívil) (datalog)
  12. 5.10.2016
    EDB: {subordinate(Employee, Superior); emp(Employee)}
    Find all employees X that are direct superiors of precisely one ordinary employee (i.e. employee without subordinates); we do not care about non-ordinary or non-employee subordinates of X.
  13. 3.10.2016
    EDB: {Part(Name); Component(Item, Subitem, AttachementType)}
    Nájdite súčiastky, ktoré pozostávajú z najviac jednej atomickej súčiastky (t.j. vo výsledku budú len atomické súčiastky, alebo súčiastky pozostávajúce z práve jednej atomickej súčiastky a žiadnej inej). Atomická súčiastka je taká, ktorá nemá žiadne podsúčiastky v tabuľke Component.
  14. 26.9.2016
    EDB: {Objednavka(Osoba, Vec, Mnozstvo)}
    Napíšte dotaz v relačnom kalkule, ktorý vráti osoby, ktoré si objednali práve 2 rôzne veci v akomkoľvek množstve

Cvičenia

  1. EDB:
    {Lubi(Kto, Koho)}
    (ak KTO lubi KOHO, neznamená to, že KOHO ľúbi KTO).
    1. nájdite všetkých, čo ľúbia jožka
    2. všetkých, čo sú ľúbený
    3. všetkých, ktorí ľúbia iba jožka
    4. všetkých, ktorí ľúbia iba jožka alebo ferka
    5. všetkých, ktorých ľúbia všetky ich lásky
    6. všetkých, ktorých láska je neopätovaná (t.j. nikto koho ľúbia ich neľúbi späť)
  2. EDB:
    {Zamestnanec(Meno, Plat); Oddelenie(Nazov, MenoVeduceho); ZamestnanecVOddeleni(Meno, Nazov)}
    1. Nájdite dvojice [Meno, Plat] zamestnancov, ktorí sú vedúci
    2. Nájdite zamestnancov, ktorí sú vedúci aspoň 2 oddelení
    3. Nájdite všetkých zamestnancov, ktorí nie sú vedúci
    4. Nájdite zamestnancov, ktorí sú vedúci práve 2 oddelení
    5. Nájdite zamestnancov, ktorí majú vyšší plat ako ich šéfovia
    6. Nájdite zamestnancov s najvyšším platom v rámci ich oddelia
  3. EDB:
    {Objednávka(ID, Osoba, Vec, Mnozstvo), Kamarati(Osoba1, Osoba2)}
    (ID objednávky je jednoznačný číselný identifikátor objednávky - číslo s každou ďalšou objednávkov rastie o 1 - neskoršie objednávky majú väčšie číslo)
    1. ľudí, čo si objednávajú len vo veľkom množstve
    2. dvojice [Vec1, Vec2], ktoré si objednali aspoň 2 ľudia
    3. osoba, ktorá po istom čase ostala verná len jednej veci (t.j. od nejakého času si objednáva len tú istú vec - aspoň 2x)
    4. osoby, ktoré si objednali aspoň 2 veci rovnaké ako ich nejaký kamarát
    5. osoby, ktoré si objednali len to, čo ich kamaráti (t.j. neexistuje vec, ktorú si objednali a žiaden ich kamarát si ju neobjednal)
    6. osoby, čo si objednali všetky veci iné ako ich kamaráti (t.j. žiaden kamarát si neobjednal ani jednu rovnakú vec)
    7. trojice [O, V, M] také, že osoba O si objednala vec V v najväčšom množstve M zo svojich kamarátov (t.j. žiaden kamarát si neobjednal v rámci jednej objednávky z danej veci viac)
  4. EDB:
    {Part(Name); Component(Item, Subitem, AttachmentType)}
    1. nájdite iba atomické súčiastky (súčiastky bez podsúčiastok)
    2. súčiastky (aj nie atomické), z ktorých sa skladá motor
    3. atomické súčiastky potrebné na stavbu motora
    4. komponenty, ktoré sa skladajú iba zo súčiastok, z ktorých sa skladá motor (t.j. čo všetko vieme postaviť, ak máme motor)
    5. súčiastky, ktoré sú priskrutkované k motoru alebo spojke
  5. EDB:
    {lubi(Pijan, Alkohol), capuje(Krcma, Alkohol),navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    1. krčmy, kde sa čapuje pivo a nič iné
    2. krčmy, kde sa pije pivo a nič iné
    3. pijani, ktorí ľúbia len rum
    4. pijani, ktorí ľúbia práve jeden alkohol
    5. pijani-štamgasti, ktorí doteraz navštívili jedinú krčmu
    6. pijani, ktorí niekedy niekde vypili viac ako pol litra jedného alkoholu
    7. pijani, ktorí nikdy neodolali rumu (pili ho pri každej návšteve krčmy, v ktorej ho čapujú)
    8. pijani, ktorí ľúbia aspoň jeden taký alkohol, ktorý čapuje každá krčma, v ktorej ten pijan niečo vypil
    9. pijani, ktorí pri niektorej svojej návšteve krčmy vytvorili doteraz platný rekord v pití vodky v danej krčme
    10. pijanov, ktorí vypili len tie alkoholy, ktoré vypil pijan Felix (t.j. hľadaní pijani vypili nejakú neprázdnu podmnožinu alkoholov, ktoré vypil pijan Felix; a okrem tých alkoholov nevypili žiadne iné)
    11. alkoholy, pre ktoré platí, že ak ten alkohol niektorý pijan niekedy vypil, tak ho ten pijan vypil pri každej svojej návšteve krčmy (vo výsledku majú byť aj alkoholy, ktoré nikto nikdy nevypil)
    12. krčmy, pre ktoré platí: hľadanú krčmu nenavštívil žiaden pijan, ktorý ľúbi všetky alkoholy, ktoré tá krčma čapuje (predpokladajte, že každá krčma čapuje nejaký alkohol)
    13. všetkých takých pijanov, ktorí neľúbia pivo ani borovičku; a zároveň sa dôsledne vyhýbajú návštevám takým krčiem, v ktorých sa čapuje len pivo alebo borovička; a zároveň nikdy pivo ani borovičku nevypili
    14. alkoholy, ktoré ľúbia len tí pijani, ktorí nikdy nenavštívili krčmu Wasa
    15. dvojice [P, K] také, že pijan P pri každej návšteve krčmy K vypil niektorý z alkoholov, ktoré ľúbi (pri rôznych návštevách mohol vypiť rôzne obľúbené alkoholy, chceme len dvojice, kde P niekedy navštívil K)
    16. dvojice [P, A], ktoré hovoria, ktoré alkoholy A pijan P vypil pri každej svojej návšteve krčmy (abstinenti nemajú byť vo výsledku)
    17. dvojice [P, A] také, že pijan P ľúbi alkohol A, a zároveň každá krčma, v ktorej P vypil A, čapuje alkohol A lacnejšie než ktorákoľvek iná krčma, ktorá čapuje A
    18. dvojice [K, A] také, že krčma K čapuje alkohol A, a zároveň každý pijan, ktorý ľúbi alkohol A, ho vypil pri niektorej návšteve krčmy K
    19. dvojice [P, A] také, že pijan P ľúbi alkohol A a ešte také dva ďalšie (navzájom rôzne) alkoholy, že pri každej návšteve krčmy, pri ktorej P vypil A, vypil aj niektorý z týchto dvoch ďalších alkoholov
    20. dvojice [A, K] také, že alkohol A čapovaný v krčme K vypil (pri aspoň jednej návšteve) každý pijan, ktorý K niekedy navštívil
    21. dvojice [P, A] také, že pijan P ľúbi alkohol A; a v každej krčme, ktorá čapuje alkohol A, vypil P počas niektorej návštevy viacej alkoholu A než ktorýkoľvek iný pijan počas jednej návštevy (teda P je rekordérom v pití A na jedno posedenie v každej krčme, ktorá A čapuje)
    22. pijanov, ktorí každý akt vypitia alkoholu urobili v jednej z krčiem, kde je ten alkohol najlacnejší (abstinenti nemajú byť vo výsledku)
  6. EDB:
    {Kurz(ID, Ucitel, Predmet); Navstevuje(Student, KurzID); Hodnotenie(Student, KurzID, Znamka);}
    1. Nájdite všetky dvojice [U, S], kde S je študent, ktorý má na všetkych kurzoch s učiteľom U len známky horšie ako 2, ale na všetkých ostatných kurzoch ma samé 1 (t.j. akoby si učitel U "zasadol" na študentovi S).
    2. Trojice [S, P, Z] také, že študent S má samé jednotky okrem predmetu P a Z je jeho známka z tohto predmetu.
    3. Dvojice [U, P] také, že učiteľ U z predmetu P neudelil hodnotenie horšie ako 2.
    4. Učiteľov U, ktorí učia 2 kurzy rovnakého predmetu a všetci študenti z jedného kurzku majú horšiu známku ako všetci študenti z druhého kurzu.
  7. Agregácia:
    EDB:
    {lubi(Pijan, Alkohol), capuje(Krcma, Alkohol),navstivil(Id, Pijan, Krcma), vypil(Id, Alkohol, Mnozstvo)}
    1. pijani, ktorí ľúbia aspoň 10 rôznych alkoholov
    2. alkoholy, ktoré boli vypité v krčme Stein v celkovom množstve väčšom ako 20
    3. dvojice [A, Suma], ktoré popisujú množstvo alkoholu A vypitého v krčme Carlton (vo výsledku len tie, čo sa niekedy pili)
    4. dvojice [P, Pocet], ktoré hovoria, v koľkých krčmách prepil pijan P aspoň 10 EUR počas niektorej (jednej) návštevy
    5. trojice [P, A, Pocet], ktoré hovoria, pri koľkých návštevách pijan P vypil alkohol A (netreba nájsť trojice s počtom 0)
    6. pijani, ktorí sú v niektorej krčme lokálnymi šampiónmi v pití rumu (t.j. hľadaný pijan v aspoň jednej krčme vypil dokopy viacej rumu než ľubovoľný iný pijan)
    7. dvojice [P, Suma], ktoré hovoria, koľko peňazí pijan P celkovo prepil v krčmách, ktoré čapujú len alkoholy, ktoré P neľúbi (dvojice s nulovou sumou nemajú byť vo výsledku)
    8. [P, nK, nA], kde nK je počet rôznych krčiem, ktoré pijan P navštívil, a nA je počet rôznych alkoholov, ktoré pijan P vypil (nechceme trojice, kde nK=nA=0)
    9. [K, A, m], kde m je celkové množstvo alkoholu A vypitého v krčme K (chceme vo výsledku každú dvojicu K, A, kde K čapuje A)
    10. dvojice [K, A] také, že alkohol A sa v krčme K vypil v celkovom množstve väčšom ako 50
    11. trojice [P, K, Pocet], ktoré hovoria, pri koľkých návštevách pijan P vypil v krčme K aspoň 5 borovičiek na jedno posedenie (trojice s nulovým počtom nás nezaujímajú)
    12. dvojice [A, M] také, že M je mediánom ceny alkoholu A cez všetky krčmy, ktoré alkohol A čapujú
    13. dvojice [K, Suma], ktoré hovoria, koľko peňazí v krčme K celkovo prepili pijani, ktorí tú krčmu navštívili viac než stokrát (dvojice s nulovou sumou nemajú byť vo výsledku)
    14. trojice [P, K, Priemer] ktoré hovoria, koľko peňazí utratil pijan P v priemere pri jednej návšteve krčmy K (trojice s nulovým priemerom nemajú byť vo výsledku)
  8. Funkčné závislosti
    1. r(A,B,C,D,E,F,G,H); F = {AH→GE, AD→E, B→CEH, CD→F, DE→AB}
      minimálne pokrytie, všetky kľúče, dekompozícia do 3NF
    2. r(A,B,C,D,E); F = {A→BC, CD→E, B→D, E→A}
      minimálne pokrytie, všetky kľúče, dekompozícia do 3NF
    3. r(A,B,C,D,E, F); F = {AB→CDF, ACF→B, AE→B, CD→ABF, CE→D, CEF→ABD}
      minimálne pokrytie, všetky kľúče, dekompozícia do 3NF
    4. r(A,B,C), napíšte SQL dotaz, ktorý overí platnosť B→C
    5. r(A,B,C,D,E,F,G,H); F = {BF→ACG, C→AE, AH→F, AF→H, BG→F, E→G, BCE→F, GH→AF, H→D}
      minimálne pokrytie, všetky kľúče, dekompozícia do 3NF
    6. r(A,B,C,D,E,F,G,H); F = {ABH→G, AC→E, AD→F, AF→BH, BG→CF, EF→AG, G→F, GH→AF, H→D}
      minimálne pokrytie, všetky kľúče, dekompozícia do 3NF