„Adatbázisok/ZH feladatok” változatai közötti eltérés
aNincs szerkesztési összefoglaló |
Nincs szerkesztési összefoglaló |
||
| 3. sor: | 3. sor: | ||
TODO. | TODO. | ||
}} | }} | ||
-->Ezen az oldalon néhány feladatot találsz témakörönként az új (VITMAB04) [[Adatbázisok|Adatbázisokhoz]], amik a régi tárgy 1996-2007 közötti ZH feladatsoraiból lettek kiválogatva. Ehhez hasonló jellegű feladatok lehetnek az új tárgyban is. | -->Ezen az oldalon néhány feladatot találsz témakörönként az új (VITMAB04) [[Adatbázisok|Adatbázisokhoz]], amik a régi tárgy 1996-2007 közötti ZH feladatsoraiból lettek kiválogatva. Ehhez hasonló jellegű feladatok lehetnek az új tárgyban is. Az eredeti feladatlapokat megtalálod a [[Adatbázisok_(régi)#Zh|régi tárgy]] oldalán. | ||
== ER modell és diagram, átalakítás relációs sémára == | == ER modell és diagram, átalakítás relációs sémára == | ||
(1996-04-16 1.) Az alábbi leírást egy laikus adta: Egy | (1996-04-16 1.) Az alábbi leírást egy laikus adta: Egy páciensnek számos betegsége is lehet, vannak betegségek, amiben pillanatnyilag senki sem szenved. Minden pácienst egyetlen mentőállomáson kezelnek, akár több orvos is. Az orvosoknak több páciensük is lehet, akik különböző mentőállomásokon is fekhetnek. Egy mentőállomás lehet akár üres is és mindig pontosan egy kórházhoz tartozik. Egy kórháznak esetleg több mentőállomása és több orvosa is van. Egy orvost legfeljebb 3 kórház alkalmaz. A kórházat mindig egy olyan igazgató vezeti, aki a kórház orvosa is, közgazdászdiplomával is rendelkezik és más kórházzal nincs munkaviszonya. | ||
a) Készítsen a fentiekről egyed-kapcsolati diagramot! Tüntesse fel pontosan a kapcsolatok funkcionalitását is! Azonosítsa az egyedeket | a) Készítsen a fentiekről egyed-kapcsolati diagramot! Tüntesse fel pontosan a kapcsolatok funkcionalitását is! Azonosítsa az egyedeket célszerűen megválasztott attribútumokkal, határozza meg a kulcsokat! | ||
b) Alakítsa át a diagramot relációs sémákká úgy, hogy a kapcsolatok megvalósításához a lehető legkevesebb relációt használja! | b) Alakítsa át a diagramot relációs sémákká úgy, hogy a kapcsolatok megvalósításához a lehető legkevesebb relációt használja! | ||
| 41. sor: | 41. sor: | ||
(2002-11-15/B 5. módosítva) Tervezzen ER-diagramot egy színházi adatbázishoz, melyben az alábbiakat akarjuk tárolni. A színházakról nyilvántartjuk a nevüket, címüket, milyen darabokat játszanak jelenleg, kik a dolgozói főállásban. Egy színdarabról tároljuk a címét, szerzőjét, rendezőjét, azt, hogy melyik színházban játsszák és hogy kik szerepelnek benne. A dolgozókról tároljuk nevüket, személyi számukat és hogy melyik színházban dolgoznak. A színészekről ezeken kívül még azt is akarjuk tudni, hogy tudnak-e énekelni és hogy melyik darabokban játszanak, a rendezőkről pedig azt, hogy miket rendeznek. Az alábbi megkötések érvényesek: egy darabot csak egy ember rendez, egy darab csak egy színházban megy, továbbá egy dolgozó csak egy színháznál lehet főállásban. | (2002-11-15/B 5. módosítva) Tervezzen ER-diagramot egy színházi adatbázishoz, melyben az alábbiakat akarjuk tárolni. A színházakról nyilvántartjuk a nevüket, címüket, milyen darabokat játszanak jelenleg, kik a dolgozói főállásban. Egy színdarabról tároljuk a címét, szerzőjét, rendezőjét, azt, hogy melyik színházban játsszák és hogy kik szerepelnek benne. A dolgozókról tároljuk nevüket, személyi számukat és hogy melyik színházban dolgoznak. A színészekről ezeken kívül még azt is akarjuk tudni, hogy tudnak-e énekelni és hogy melyik darabokban játszanak, a rendezőkről pedig azt, hogy miket rendeznek. Az alábbi megkötések érvényesek: egy darabot csak egy ember rendez, egy darab csak egy színházban megy, továbbá egy dolgozó csak egy színháznál lehet főállásban. | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
[[Fájl:Adatb zh 2002-11-15-B feladat-5 ER-diagram.png|600px]] | |||
}} | |||
| 62. sor: | 66. sor: | ||
(2007-04-25 1.) Egy óvoda adatait szeretnénk tárolni egy adatbázisban. Az óvodában gyerekek vannak illetve óvónénik és óvóbácsik dolgoznak. Mindenkiről nyilván akarjuk tartani a nevét, személyi számát, születési dátumát és helyét. A gyerekekről tárolni akarjuk az óvodai jelüket és a szüleik mobilszámát, a dolgozókról pedig a diplomázásuk évét. Az óvodában csoportok is vannak, minden csoportnak van neve. Tárolni akarjuk, hogy melyik gyerek melyik csoportba jár és melyik csoportnak ki az óvónénije illetve óvóbácsija. (Egy gyerek egy csoportba jár, egy csoportnak két gondozója van, minden dolgozó pontosan egy csoportban dolgozik.) Az óvodában különórákat is szerveznek, itt tárolni akarjuk a különóra nevét (pl. angol), a különóra időpontját, azt, hogy ki tartja (ez valaki az óvoda dolgozói közül) és hogy kik járnak rá. Készítsen E/K | (2007-04-25 1.) Egy óvoda adatait szeretnénk tárolni egy adatbázisban. Az óvodában gyerekek vannak illetve óvónénik és óvóbácsik dolgoznak. Mindenkiről nyilván akarjuk tartani a nevét, személyi számát, születési dátumát és helyét. A gyerekekről tárolni akarjuk az óvodai jelüket és a szüleik mobilszámát, a dolgozókról pedig a diplomázásuk évét. Az óvodában csoportok is vannak, minden csoportnak van neve. Tárolni akarjuk, hogy melyik gyerek melyik csoportba jár és melyik csoportnak ki az óvónénije illetve óvóbácsija. (Egy gyerek egy csoportba jár, egy csoportnak két gondozója van, minden dolgozó pontosan egy csoportban dolgozik.) Az óvodában különórákat is szerveznek, itt tárolni akarjuk a különóra nevét (pl. angol), a különóra időpontját, azt, hogy ki tartja (ez valaki az óvoda dolgozói közül) és hogy kik járnak rá. Készítsen E/K diagramot ehhez az adatbázishoz, ne feledkezzen el a kulcsok jelöléséről sem. Röviden írja le, hogyan határozta meg az egyes kapcsolatok jellegét. | ||
| 68. sor: | 72. sor: | ||
(2005-04-19 1.) Egy menza havi menüit szeretnénk tárolni | (2005-04-19 1.) Egy menza havi menüit szeretnénk tárolni egy adatbázisban. A menü minden nap egy levest, egy főételt és egy édességet tartalmaz. Egy étel többször is előfordulhat az adott hónapban, de tudjuk, hogy egy adott leves-főétel kombinációhoz, csak egyféle édesség illik. Minden ételnek szeretnénk tárolni a nevét, az energiatartalmát és hogy melyik hozzávalóból mennyi kell. Készíts E/K diagramot az adatbázishoz! | ||
| 84. sor: | 88. sor: | ||
(2006-11-20 1.) Egy középiskola tanárait és diákjait szeretnénk tárolni egy adatbázisban. Mindenkiről nyilván akarjuk tartani a nevét, személyi számát, születési dátumát és helyét. Minden diákról tárolni akarjuk, hogy melyik osztályba jár most (pl. 10.b) és hogy eddig hány évfolyamon bukott. Minden tanárról tároljuk a gúnynevét és azt hogy mely osztályokban mely tárgyakat tanítja, akik pedig osztályfőnökök is, azokról azt is, hogy hol osztályfőnökök és hogy ez hányadik osztályuk a pályafutásuk során. (Minden tanár legfeljebb egy osztályban osztályfőnök egy időben és egy osztálynak csak egy osztályfőnöke van.) | (2006-11-20 1.) Egy középiskola tanárait és diákjait szeretnénk tárolni egy adatbázisban. Mindenkiről nyilván akarjuk tartani a nevét, személyi számát, születési dátumát és helyét. Minden diákról tárolni akarjuk, hogy melyik osztályba jár most (pl. 10.b) és hogy eddig hány évfolyamon bukott. Minden tanárról tároljuk a gúnynevét és azt hogy mely osztályokban mely tárgyakat tanítja, akik pedig osztályfőnökök is, azokról azt is, hogy hol osztályfőnökök és hogy ez hányadik osztályuk a pályafutásuk során. (Minden tanár legfeljebb egy osztályban osztályfőnök egy időben és egy osztálynak csak egy osztályfőnöke van.) | ||
a) Készítsen E/K | a) Készítsen E/K diagrmot ehhez az adatbázishoz, ne feledkezzen el a kulcsok jelöléséről sem. Röviden írja le, hogyan határozta meg az egyes kapcsolatok jellegét. | ||
b) Alakítsa át a az előző pontban adott E/K | b) Alakítsa át a az előző pontban adott E/K diagramot relációs sémává, az órán tanult eljárást használva. | ||
| 109. sor: | 113. sor: | ||
b) azon személyek összességét, akik minden sört kedvelnek azokban a sörözőkben, ahol látogatnak. | b) azon személyek összességét, akik minden sört kedvelnek azokban a sörözőkben, ahol látogatnak. | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) π<sub>sör</sub>(Kapható) \ π<sub>sör</sub>(π<sub>személy,sör</sub>(Kapható ⋈ Látogat) \ Kedvel) | |||
Magyarázat: π<sub>személy,sör</sub>(Kapható ⋈ Látogat) megadja azt, hogy az emberek milyen sörökhöz juthatnak hozzá, π<sub>személy,sör</sub>(Kapható ⋈ Látogat) \ Kedvel a "rossz" (személy, sör) párokat adja meg, azaz azokat az embereket és söröket, amely emberek megkaphatják kocsmájukban az adott sört, de nem szeretik. Ezen reláció sör-vetülete a "rossz" sörök halmaza, ezt kell kivonni az összes sör halmazából. Itt hallgatólagosan feltettük, hogy minden sör kapható valahol. Megjegyzés: Az olyan relációs algabrai kifejezések, melyekben csak , , , , vetítés és szelekció fordul elő, szükségképpen monotonok, abban az értelemben, hogy ha a kifejezésekben szereplő alaprelációkat bővítjük, akkor az eredmény semmiképpen sem lesz szűkebb. Ez a monotonitás azonban nem igaz a feladatbeli relációra: például ha a Kapható relációt bővítjük egy olyan (Kocsma, Sör) párral, amely sörnek egy esküdt ellensége látogatja az adott kocsmát, akkor ezzel a "jó" sörök halmaza szűkül(het). Ezért biztosan nem jók azok a megoldások, melyekben csak a fenti műveletek szerepelnek. | |||
b) π<sub>személy</sub>(Látogat) \ π<sub>személy</sub>(π<sub>személy,sör</sub>(Kapható ⋈ Látogat) \ Kedvel) | |||
}} | |||
| 130. sor: | 142. sor: | ||
b) megkeresi azon a dolgozók nevét, akik Catherine Janeway kapitány hajóján dolgoznak. | b) megkeresi azon a dolgozók nevét, akik Catherine Janeway kapitány hajóján dolgoznak. | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) π<sub>dolgozónév</sub>(π<sub>azonosító,dolgozónév</sub>(Dolgozó) ⋈ (π<sub>hajónév,azonosító</sub>(Beosztás) ⋈ π<sub>hajónév</sub>(σ<sub>faj='klingon'</sub>(Csillaghajó))) | |||
b) CJHajói = π<sub>hajónév</sub>(σ<sub>rang='kapitány'</sub>(π<sub>azonosító</sub>(σ<sub>dolgozónév='Catherine Janeway'</sub>(Dolgozó)) ⋈ Beosztás)) | |||
π<sub>dolgozónév</sub>(Dolgozó ⋈ π<sub>azonosító</sub>(Beosztás ⋈ CJHajói)) | |||
}} | |||
---- | ---- | ||
(2002-11-15/A-B 4.) Legyen R és S két, azonos attribútumokkal rendelkező reláció, X pedig ezen közös attribútumhalmaz egy részhalmaza. Mely igaz (melyek igazak) az alábbi állítások közül? | (2002-11-15/A-B 4.) Legyen R és S két, azonos attribútumokkal rendelkező reláció, X pedig ezen közös attribútumhalmaz egy részhalmaza. Mely igaz (melyek igazak) az alábbi állítások közül? Válaszodat indokold! | ||
a) π<sub>X</sub>(R ∩ S) = π<sub>X</sub>(R) ∩ π<sub>X</sub>(S) | a) π<sub>X</sub>(R ∩ S) = π<sub>X</sub>(R) ∩ π<sub>X</sub>(S) | ||
| 141. sor: | 160. sor: | ||
c) π<sub>X</sub>(R \ S) = π<sub>X</sub>(R) \ π<sub>X</sub>(S) | c) π<sub>X</sub>(R \ S) = π<sub>X</sub>(R) \ π<sub>X</sub>(S) | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) Nem igaz. Ellenpélda: legyen a két séma R(A, B) és S(A, B), X legyen az A-ból álló egy elemű halmaz. R-nek csak egy sora legyen: (a,b), és S-nek is csak egy sora legyen: (a,b'). Ekkor π<sub>A</sub>(R ∩ S) = ∅, de π<sub>A</sub>(R) ∩ π<sub>A</sub>(S) = {a}. | |||
b) Igaz. Mindkét irányba megmutatjuk a tartalmazást. Először belátjuk, hogy π<sub>X</sub>(R ∪ S) ⊆ π<sub>X</sub>(R) ∪ π<sub>X</sub>(S) igaz. Ha egy t sor eleme π<sub>X</sub>(R ∪ S)-nak, akkor létezik olyan t' sor R ∪ S-ben definíció szerint, hogy t'-nek X-re eső vetülete éppen t. Az unió definíciója miatt t' ∈ R vagy t' ∈ S fennáll. Mivel t a t' X-re eső vetülete, ezért vagy t ∈ π<sub>X</sub>(R) vagy t ∈ π<sub>X</sub>(S) igaz lesz és így t ∈ π<sub>X</sub>(R) ∪ π<sub>X</sub>(S). | |||
A másik irányban: Ha t ∈ π<sub>X</sub>(R) ∪ π<sub>X</sub>(S), akkor t ∈ π<sub>X</sub>(R) vagy t ∈ π<sub>X</sub>(S) fennáll, tegyük fel, hogy t ∈ π<sub>X</sub>(R) (a másik eset hasonló). Ekkor létezik definíció szerint egy olyan t' ∈ R sor, melynek X-re eső vetülete éppen t. De mivel t' ∈ R ∪ S is igaz, ezért t ∈ π<sub>X</sub>(R ∪ S) is fennáll. | |||
c) Nem igaz. Ellenpélda: legyen a két séma R(A, B) és S(A, B), X legyen az A-ból álló egy elemű halmaz. R-nek csak egy sora legyen: (a,b), és S-nek is csak egy sora legyen: (a,b'). Ekkor π<sub>A</sub>(R \ S) = {a}, de π<sub>A</sub>(R) \ π<sub>A</sub>(S) = ∅. | |||
}} | |||
| 181. sor: | 210. sor: | ||
(2000-11-17/A-B 4.) Legyenek R(A, B, C, D) és S(C, D, E) alaprelációk, és | (2000-11-17/A-B 4.) Legyenek R(A, B, C, D) és S(C, D, E) alaprelációk, és legyen | ||
a) π<sub>AC</sub>(σ<sub>E=2</sub>(R ⋈ S)) | |||
b) π<sub>CD</sub>(R) ∩ π<sub>CD</sub>(S) | |||
belőle képzett leszármaztatott reláció. Fejezze ki ez utóbbit sor- és oszlopkalkulussal. | |||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) | |||
Sorkalkulussal: { t<sup>(2)</sup> | ∃u<sup>(4)</sup> ∃v<sup>(3)</sup> R(u) ∧ S(v) ∧ u[3] = v[1] ∧ u[4] = v[2] ∧ v[3] = '2' ∧ t[1] = u[1] ∧ t[2] = u[3] } | |||
Oszlopkalkulussal: { a, c | ∃b ∃d ∃e R(a,b,c,d) ∧ S(c,d,e) ∧ e = '2' } | |||
b) | |||
Sorkalkulussal: { t<sup>(2)</sup> | ∃u<sup>(4)</sup> ∃v<sup>(3)</sup> R(u) ∧ S(v) ∧ u[3] = v[1] ∧ u[4] = v[2] ∧ t[1] = u[3] ∧ t[2] = u[4] } | |||
Oszlopkalkulussal: { c, d | ∃a ∃b ∃e R(a,b,c,d) ∧ S(c,d,e) } | |||
}} | |||
| 187. sor: | 236. sor: | ||
(2002-11-15/A 3.a) Az R | (2002-11-15/A 3.a) Az R reláció attribútumai (A; B; C; D; E) az S reláció attribútumai pedig (A; B; F; G). Fejezze ki sorkalkulus segítségével R ⋈ S-et! | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
{ t<sup>(7)</sup> | ∃r<sup>(5)</sup> ∃s<sup>(4)</sup> ( R(r) ∧ S(s) ∧ r[1] = s[1] ∧ r[2] = s[2] ∧ r[1] = t[1] ∧ r[2] = t[2] ∧ r[3] = t[3] ∧ r[4] = t[4] ∧ r[5] = t[5] ∧ s[3] = t[6] ∧ s[4] = t[7] ) } | |||
}} | |||
| 193. sor: | 246. sor: | ||
(2002-11-15/A 3.b) Az R | (2002-11-15/A 3.b) Az R reláció attribútumai (A; B ; C; D), az S-é pedig (C; D). Ekkor R ÷ S, R és S hányadosa, azon (A; B) attribútumú t sorokból áll, melyekre igaz, hogy bármely S-beli s sor esetén a ts sor R-ben van. Fejezze ki R ÷ S-t oszlopkalkulus segítségével! Feltehetjük, hogy az S reláció nem üres. | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
{a, b | ∀c ∀d ( R(a, b, c, d) ∨ ¬S(c, d) ) } | |||
Magyarázat: Egy (a,b) pár pontosan akkor van benne a hányadosban, ha minden S-beli (c,d) párra (a,b,c,d) R-ben van. Azaz annak kell teljesülnie, hogy S(c, d) implikálja R(a, b, c, d)-t minden (c,d) esetén. Az S(c, d) → R(a, b, c, d) implikációt pedig R(a, b, c, d) ∨ ¬S(c, d) alakba lehet írni. | |||
}} | |||
| 230. sor: | 289. sor: | ||
d) A kulcs R-ben, B kulcs S-ben? | d) A kulcs R-ben, B kulcs S-ben? | ||
(Ez tehát 8 különböző kérdés, mindegyik eredményt | (Ez tehát 8 különböző kérdés, mindegyik eredményt indokold röviden.) | ||
| 284. sor: | 343. sor: | ||
b) 2-szintes ritka index | b) 2-szintes ritka index | ||
segítségével szeretnénk tárolni. Adjon értelmes alsó becslést az összes | segítségével szeretnénk tárolni. Adjon értelmes alsó becslést az összes szükséges blokk számára az alábbi feltételek mellett: az állomány 3 millió rekordból áll, egy rekord hossza 300 byte, egy blokk mérete 1000 byte, a kulcshossz 45 byte, egy mutató hossza 5 byte. | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) A főállományban 3 × 10<sup>6</sup> rekord van, és mivel rekordok nem lóghatnak át blokkhatáron, ezért ehhez kell 10<sup>6</sup> blokk. A sűrű indexben annyi bejegyzés lesz, mint ahány rekord van a főállományban, azaz 3 × 10<sup>6</sup>. Egy blokkra pontosan 20 bejegyzés fér: ez 1,5 × 10<sup>5</sup> blokk. Ez azt is jelenti, hogy a ritka indexben lesz legalább 1,5 × 10<sup>5</sup> bejegyzés, ehhez kell még 7,5 × 10<sup>5</sup> blokk. Ez összesen 1157500 blokk. | |||
b) A főállományban 3 × 10<sup>6</sup> rekord van, és mivel rekordok nem lóghatnak át blokkhatáron, ezért ehhez kell legalább 10<sup>6</sup> blokk. Az első ritka indeben lesz ennyi bejegyzés, azaz 10<sup>6</sup>. Egy blokkra pontosan 20 bejegyzés fér: ez legalább 5 × 10<sup>4</sup> blokk. Ez azt is jelenti, hogy a második szintű ritka indexben lesz 5 × 10<sup>4</sup> bejegyzés, ehhez kell még 25 × 10<sup>2</sup> blokk. Ez összesen 1052500 blokk. | |||
}} | |||
| 301. sor: | 366. sor: | ||
(2002-11-15/A 1. módosítva) Egy 240000 rekordból álló állományt szeretnénk tárolni. Két lehetőség közül választhatunk: vagy sűrű indexre épített 1-szintes ritka indexet használunk, vagy 3-szintes ritka indexet. Melyik megoldást lehet kevesebb blokk felhasználásával megvalósítani, ha még azt is el szeretnénk érni, hogy sem az indexállományban, sem a főállományban ne legyenek 80%-nál telítettebb blokkok? Tudjuk, hogy egy blokk mérete 1500 byte, egy rekord hossza 350 byte, a kulcs hossza 45 byte, a mutató hossza pedig 15 byte. | (2002-11-15/A 1. módosítva) Egy 240000 rekordból álló állományt szeretnénk tárolni. Két lehetőség közül választhatunk: vagy sűrű indexre épített 1-szintes ritka indexet használunk, vagy 3-szintes ritka indexet. Melyik megoldást lehet kevesebb blokk felhasználásával megvalósítani, ha még azt is el szeretnénk érni, hogy sem az indexállományban, sem a főállományban ne legyenek 80%-nál telítettebb blokkok? Tudjuk, hogy egy blokk mérete 1500 byte, egy rekord hossza 350 byte, a kulcs hossza 45 byte, a mutató hossza pedig 15 byte. | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
A sűrű indexes verziónál: A főállomány 80.000 blokkból fog állni, mert egy blokkra 3 rekord fér csak rá (1500 × 80% = 1200 byte hasznos hely van egy blokkon és egy rekord 350 byte). Egy blokk 20 darab kulcs+mutató pár fér el, mert az 1200 byte a hasznos hely laponként és egy pár helyigénye 60 byte. Így a sűrű indexhez kell 12.000 blokk (mert van 240.000 indexbejegyzés, annyi, amennyi rekord van a főállományban). A ritka indexhez pedig kell 600 blokk, mivel 12.000 indexbejegyzést kell elhelyeznünk (ennyi blokk van a sűrű indexben). Ez összesen 92.600 blokk (főállomány, sűrű index, ritka index) | |||
A másik verzió esetén: A főállomány itt is 80.000 blokk lesz és egy blokkra most is 20 indexbejegyzés fér el. A fentiek miatt, az első szintű ritka indexben lesz 4.000 blokk (mert 80.000 indexbejegyzésnek kell hely), a második szinten lesz 200 blokk, a harmadikon pedig 10. Azaz összesen lesz 84.210 blokk, ami kevesebb, mint az előbb, azaz ez a takarékosabb megoldás. | |||
}} | |||