„Adatbázisok/ZH feladatok” változatai közötti eltérés
aNincs szerkesztési összefoglaló |
Nincs szerkesztési összefoglaló |
||
| (2 közbenső módosítás ugyanattól a felhasználótól nincs mutatva) | |||
| 1. sor: | 1. sor: | ||
<!-- | <!-- | ||
-->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. | |||
A listát ne bővítsd új évek feladatsoraival. Lásd az Adatbázisok lapra írtakat. Ha hibát vagy hiányosságot találsz, azt javíthatod. | |||
-->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: | 51. 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]] | |||
}} | |||
| 57. sor: | 71. sor: | ||
[[Fájl:Adatb zh 2004-11-19 feladat-1 ER-diagram.png|600px]] | [[Fájl:Adatb zh 2004-11-19 feladat-1 ER-diagram.png|600px]] | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
Reláció minden egyedhalmazhoz: Repjárat(<ins>Szám</ins>), Reptér(<ins>ID</ins>, Város), Alkalmazott(<ins>TBSzám</ins>, Név), EgyRepülés(<ins>Dátum</ins>, Ár, <ins>Szám</ins>). EgyRepülés gyenge egyedhalmaz, ezért a Repjárat-ban lévő kulcsot is hozzá kell venni a megfelelő relációhoz. Mivel az EgyRepülés reláció magába foglalja a Repjárat minden adatát is, a Repjárat reláció redundáns, elhagyható adatvesztés nélkül. | |||
Relációk a kapcsolatokból: Legénység(<ins>Szám</ins>, <ins>Dátum</ins>, <ins>TBszám</ins>), Honnan(<ins>Szám</ins>, Indulás, ID), Hova(<ins>Szám</ins>, Érkezés, ID). Az ID attribútumok nem részei a kulcsnak az több-egy kapcsolat miatt. Ez utóbbi két reláció akár összevonható egybe: HonnanHova(<ins>Szám</ins>, Indulás, Érkezés, IDInd, IDÉrk). A Járat kapcsolathoz nem kell reláció, az EgyRepülés egyedeinek határozott azonosításán kívül más haszna nincs, az meg már fel van véve a többi relációban. | |||
}} | |||
| 62. sor: | 82. 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: | 88. 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! | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
[[Fájl:Adatb zh 2005-05-03 feladat-1 ER-diagram.png|700px]] | |||
}} | |||
| 74. sor: | 98. 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.) | ||
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 diagramot relációs sémává, az órán tanult eljárást használva. | |||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) | |||
[[Fájl:Adatb zh 2006-11-20 feladat-1 ER-diagram.png|500px]] | |||
A kapcsolatok magyarázata: a Jár kapcsolat az osztály felé egyirányú, mert mindenki egy osztályba jár csak egyszerre, de fordítva többirányú, mert egy osztályba többen is járnak; a Tanít kapcsolat minden irányban több, mert egy tanár több osztályban is taníthatja az adott tárgyat, egy osztályban több tanár is taníthatja az adott tárgyat és egy osztályban egy tanár több tárgyat is taníthat; az Ofő kapcsolat mindkét irányban egy, mert pont ezt mondja a feladat kitűzésében a feltétel. | |||
b) Egy lehetséges jó átírás: | |||
* Személy(név, <ins>szemszám</ins>, szüldátum, szülhely) | |||
* Diák(<ins>szemszám</ins>, bukásszám, osztálynév) | |||
* Tanár(<ins>szemszám</ins>, gúnynév) | |||
* Tanít(<ins>tanár.szemszám</ins>, <ins>osztálynév</ins>, <ins>tárgynév</ins>) | |||
* Ofője(<ins>tanár.szemszám</ins>, <ins>osztálynév</ins>, hányadik) | |||
* Osztályfőnök(<ins>szemszám</ins>) | |||
* Tárgy(<ins>tárgynév</ins>) | |||
* Osztály(<ins>osztálynév</ins>) | |||
Ez utóbbi három akár el is hagyható. | |||
}} | |||
| 109. sor: | 145. 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) <code>π<sub>sör</sub>(Kapható) \ π<sub>sör</sub>(π<sub>személy,sör</sub>(Kapható ⋈ Látogat) \ Kedvel)</code> | |||
Magyarázat: <code>π<sub>személy,sör</sub>(Kapható ⋈ Látogat)</code> megadja azt, hogy az emberek milyen sörökhöz juthatnak hozzá, <code>π<sub>személy,sör</sub>(Kapható ⋈ Látogat) \ Kedvel</code> 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 ∪, ∩, ×, ⋈, π és σ műveletek fordulnak 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) <code>π<sub>személy</sub>(Látogat) \ π<sub>személy</sub>(π<sub>személy,sör</sub>(Kapható ⋈ Látogat) \ Kedvel)</code> | |||
}} | |||
| 114. sor: | 158. sor: | ||
(2001-11-16 2.) Egy könyvtári kölcsönzéseket segítő relációs adatbázis négy relációjának a sémái az alábbiak. Az azonos nevű attribútumok jelentése is azonos. KÖNYV(RAKT, SZERZO, CIM) | (2001-11-16 2.) Egy könyvtári kölcsönzéseket segítő relációs adatbázis négy relációjának a sémái az alábbiak. Az azonos nevű attribútumok jelentése is azonos. | ||
* KÖNYV(RAKT, SZERZO, CIM) | |||
* KÖLCS(RAKT, O_ID, K_DATUM) | |||
* OLVASO(O_ID, O_NEV, LAKCIM) | |||
* VISSZA(RAKT, O_ID, V_DATUM, K_ID) | |||
A relációk, ill. attribútumaik jelentése rendre a könyvtári KÖNYVek RAKTári száma (egyedi azonosító), SZERZŐje és CÍMe, a KÖLCSönzött könyvek RAKTári száma, a kölcsönző Olvasó egyedi azonosítója és a Kölcsönzés DÁTUMa. Az OLVASÓ reláció az Olvasók azonosítóját, NEVét és LAKCÍMét tartalmazza. Amikor egy könyvet VISSZAhoznak, akkor belekerül a vissza relációba, a V_DATUM értéke pedig a visszavétel dátuma lesz, K_ID a visszavevő könyvtáros azonosítója. | |||
a) Adjon meg egy relációalgebrai kifejezést, amely azt a relációt állítja elő, amely azoknak az olvasóknak a neveit valamint az általuk kölcsönzött könyvek szerzőit és címeit tartalmazza, amelyeket az olvasók 2001. okt. folyamán késve hoztak vissza a könyvtárba. A kölcsönzési idő 1 hónap. | a) Adjon meg egy relációalgebrai kifejezést, amely azt a relációt állítja elő, amely azoknak az olvasóknak a neveit valamint az általuk kölcsönzött könyvek szerzőit és címeit tartalmazza, amelyeket az olvasók 2001. okt. folyamán késve hoztak vissza a könyvtárba. A kölcsönzési idő 1 hónap. | ||
| 124. sor: | 173. sor: | ||
(2002-11-15/A 2. módosított) Tekintsük az alábbi Csillagflotta adatbázissémát: Csillaghajó(hajónév, év, faj) | (2002-11-15/A 2. módosított) Tekintsük az alábbi Csillagflotta adatbázissémát: | ||
* Csillaghajó(hajónév, év, faj): a hajó neve, gyártási éve és az, hogy melyik faj tervei alapján készült | |||
* Dolgozó(dolgozónév, azonosító, születés): neve, Csillagflotta-azonosítója, mikor született | |||
* Beosztás(azonosító, hajónév, rang): melyik dolgozó, melyik hajón, milyen rangban dolgozik | |||
Adjunk relációs algebrai kifejezést, mely | |||
a) előállítja azon a dolgozók nevét, akik klingon (faj által tervezett) hajón dolgoznak. | a) előállítja azon a dolgozók nevét, akik klingon (faj által tervezett) hajón dolgoznak. | ||
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) <code>π<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ó)))</code> | |||
b) Először gyűjtsük ki azokat a hajókat, ahol Catherine Janeway kapitány: <code>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))</code> | |||
Ezután a kapott hajók minden dolgozójukat listázzuk: <code>π<sub>dolgozónév</sub>(Dolgozó ⋈ π<sub>azonosító</sub>(Beosztás ⋈ CJHajói))</code> | |||
}} | |||
| 134. sor: | 195. sor: | ||
(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) <code>π<sub>X</sub>(R ∩ S) = π<sub>X</sub>(R) ∩ π<sub>X</sub>(S)</code> | |||
b) <code>π<sub>X</sub>(R ∪ S) = π<sub>X</sub>(R) ∪ π<sub>X</sub>(S)</code> | |||
c) <code>π<sub>X</sub>(R \ S) = π<sub>X</sub>(R) \ π<sub>X</sub>(S)</code> | |||
c) π<sub> | {{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 <code>π<sub>A</sub>(R ∩ S) = ∅</code>, de <code>π<sub>A</sub>(R) ∩ π<sub>A</sub>(S) = {a}</code>. | |||
b) Igaz. Mindkét irányba megmutatjuk a tartalmazást. Először belátjuk, hogy <code>π<sub>X</sub>(R ∪ S) ⊆ π<sub>X</sub>(R) ∪ π<sub>X</sub>(S)</code> igaz. Ha egy t sor eleme <code>π<sub>X</sub>(R ∪ S)</code>-nak, akkor létezik olyan t' sor <code>R ∪ S</code>-ben definíció szerint, hogy t'-nek X-re eső vetülete éppen t. Az unió definíciója miatt <code>t' ∈ R</code> vagy <code>t' ∈ S</code> fennáll. Mivel t a t' X-re eső vetülete, ezért vagy <code>t ∈ π<sub>X</sub>(R)</code> vagy <code>t ∈ π<sub>X</sub>(S)</code> igaz lesz és így <code>t ∈ π<sub>X</sub>(R) ∪ π<sub>X</sub>(S)</code>. | |||
A másik irányban: Ha <code>t ∈ π<sub>X</sub>(R) ∪ π<sub>X</sub>(S)</code>, akkor <code>t ∈ π<sub>X</sub>(R)</code> vagy <code>t ∈ π<sub>X</sub>(S)</code> fennáll, tegyük fel, hogy <code>t ∈ π<sub>X</sub>(R)</code> (a másik eset hasonló). Ekkor létezik definíció szerint egy olyan <code>t' ∈ R</code> sor, melynek X-re eső vetülete éppen t. De mivel <code>t' ∈ R ∪ S</code> is igaz, ezért <code>t ∈ π<sub>X</sub>(R ∪ S)</code> 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 <code>π<sub>A</sub>(R \ S) = {a}</code>, de <code>π<sub>A</sub>(R) \ π<sub>A</sub>(S) = ∅</code>. | |||
}} | |||
| 146. sor: | 217. sor: | ||
(2007-04-25 2.) Tekintsük a következő három relációból álló adatbázissémát (ami a Húsvéti Nyúl számára készült): Gyerek(GyerekNév, Nem, SzületésiÉv) | (2007-04-25 2.) Tekintsük a következő három relációból álló adatbázissémát (ami a Húsvéti Nyúl számára készült): | ||
* Gyerek(GyerekNév, Nem, SzületésiÉv): milyen nevű, milyen nemű gyerek mikor született | |||
* Kér(GyerekNév, JátékNév): melyik gyerek mit kért húsvétra | |||
* Kap(GyerekNév, JátékNév: melyik gyerek mit kap húsvétra | |||
Adja meg relációs algebrával azon gyerekek nevét, akik semmi olyat nem kapnak, amit kértek. (Azt feltehetjük, hogy minden gyerek kért legalább egy dolgot.) | |||
| 152. sor: | 227. sor: | ||
(2006-11-20 2.) Tekintsük a következő két relációból álló adatbázissémát: Hallgató (HallgatóNév, Nem, Neptunkód) | (2006-11-20 2.) Tekintsük a következő két relációból álló adatbázissémát: | ||
* Hallgató (HallgatóNév, Nem, Neptunkód): milyen nevű, milyen nemű hallgatónak mi a Neptun kódja, kulcs a Neptunkód | |||
* Átlagok(Neptunkód, Félév, Átlag): melyik Neptun kódhoz milyen átlag tartozik egy adott félévben, kulcs a (Neptunkód, Félév) pár | |||
Adja meg relációs algebrával azon hallgatók nevét, akik a "2006/2007/1" félévben a legmagasabb átlagot érték el. | |||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
Több lépésben építjük fel a kifejezést. Először keressük ki az erre a félévre vonatkozó adatokat és nevezzük át az eredményt, mert két példányban lesz rá szükségünk: | |||
<code>Atlag<sub>1</sub> = ρ<sub>Atlag1(NK1,A1)</sub>(π<sub>NeptunKod,Atlag</sub>(σ<sub>Felev="2006/2007/1"</sub>(Atlagok)))</code> | |||
<code>Atlag<sub>2</sub> = ρ<sub>Atlag2(NK2,A2)</sub>(π<sub>NeptunKod,Atlag</sub>(σ<sub>Felev="2006/2007/1"</sub>(Atlagok)))</code> | |||
Ezután vegyük a két példány direkt szorzatát és válasszuk ki azokat az első helyen álló neptunkódokat, amikhez tartozó átlag kisebb, mint a második átlag (ezek azok a neptunkódok, amiknek az átlagánál volt jobb ebben a félévben): | |||
<code>t<sub>1</sub> = π<sub>NK1</sub>(σ<sub>A1<A2</sub>(Átlag<sub>1</sub> x Atlag<sub>2</sub>))</code> | |||
Most válasszuk ki az összes neptunkódot, amihez tartozik átlag ebben a félévben és vonjuk ki ebből t<sub>1</sub>-et, ez lesz a keresett neptun kódok halmaza: | |||
<code>t<sub>2</sub> = π<sub>Neptunkod</sub>(σ<sub>Felev="2006/2007/1"</sub>(Atlagok)) \ t<sub>1</sub></code> | |||
Ezt kell még illeszteni a Hallgató relációval és kiválasztani belőle a neveket, ez a végeredmény: | |||
<code>π<sub>Hallgatonev</sub>(Hallgato ⋈ t<sub>2</sub>)</code> | |||
}} | |||
| 158. sor: | 256. sor: | ||
(2004-11-30 3.a) Tekintsük az alábbi adatbázissémát: Járat(Járatszám, Honnan, Hova, Távolság, Indul, Érkezik) | (2004-11-30 3.a) Tekintsük az alábbi adatbázissémát: | ||
* Járat(Járatszám, Honnan, Hova, Távolság, Indul, Érkezik): melyik számú járat mikor és honnan, mikor és hova érkezik, mennyi távolságot tesz meg (kulcs a Járatszám) | |||
* Repülőtípus(TípusAzonosító, TípusNév, Hatótávolság): a típus azonosítója, neve és mennyit tud megtenni leszállás nélkül (kulcs a TípusAzonosító) | |||
* Jogosítvány(PilótaAzonosító, TípusAzonosító): milyen azonosítójú pilóta milyen azonosítójú gépet tud elvezetni (itt a PilótaAzonosító és a TípusAzonosító együtt alkot kulcsot) | |||
* Pilóta(PilótaAzonosító, PilótaNév): milyen azonosítójú polóta és mi a neve (kulcs a PilótaAzonosító) | |||
Fejezd ki relációs algebrával azon repülőgépek TípusAzonosítóit, melyek leszállás nélkül el tudnak repülni Budapestről Bombayba. | |||
== Sor- és oszlopkalkulus == | == Sor- és oszlopkalkulus == | ||
(1996-04-16 5.) Adott az alábbi relációs adatbázis: LÁTOGAT(KORHELY, KOCSMA) | (1996-04-16 5.) Adott az alábbi relációs adatbázis: | ||
* LÁTOGAT(KORHELY, KOCSMA) | |||
* ÁRUL(KOCSMA, SÖR) | |||
* KEDVEL(KORHELY, SÖR) | |||
A relációk értelme rendre: azon KOCSMÁk, amiket egy KORHELY látogat; melyik KOCSMA milyen SÖRt árul; a KORHELYek melyik SÖRöket kedvelik. | |||
Adjon meg egy sorkalkulus kifejezést arra a relációra, amely azokat a korhelyeket tartalmazza, akik látogatnak olyan kocsmát, amely árul olyan sört, amelyet a korhely kedvel! | Adjon meg egy sorkalkulus kifejezést arra a relációra, amely azokat a korhelyeket tartalmazza, akik látogatnak olyan kocsmát, amely árul olyan sört, amelyet a korhely kedvel! | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
<code>{ k<sup>(1)</sup> | ∃l<sup>(2)</sup> ∃v<sup>(2)</sup> ( LÁTOGAT(l<sup>(2)</sup>) ∧ ÁRUL(a<sup>(2)</sup>) ∧ KEDVEL(v<sup>(2)</sup>) ∧ k[1] = l[1] ∧ l[1] = v[1] ∧ l[2] = a[1] ∧ a[2] = v[2] ) }</code> | |||
}} | |||
| 171. sor: | 282. sor: | ||
(2000-04-25 3.) Adott az alábbi relációs adatbázis: GYÁRT(CÉG, TÍPUS, ÁR) | (2000-04-25 3.) Adott az alábbi relációs adatbázis: | ||
* GYÁRT(CÉG, TÍPUS, ÁR) | |||
* SZERETI(VEVŐ, TIPLIS) | |||
* DOLGOZIK(VEVŐ, CÉG, BEOSZTÁS) | |||
A relációk jelentése rendre: azon autóTÍPUSok, amiket egy CÉG gyárt az azok eladási ÁRa; egy VEVŐ melyik autóTÍPUSt szereti; a VEVŐ melyik CÉGnél dolgozik, milyen BEOSZTÁSban. | |||
a) Adjon meg egy sorkalkulus kifejezést, amely azokat a vevőket tartalmazó relációt állítja elő, akik olyan cégnél dolgoznak, amelyek gyártanak olyan autótípust, amilyet a vevő szeret! | a) Adjon meg egy sorkalkulus kifejezést, amely azokat a vevőket tartalmazó relációt állítja elő, akik olyan cégnél dolgoznak, amelyek gyártanak olyan autótípust, amilyet a vevő szeret! | ||
| 181. sor: | 296. 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) <code>π<sub>AC</sub>(σ<sub>E=2</sub>(R ⋈ S))</code> | |||
b) <code>π<sub>CD</sub>(R) ∩ π<sub>CD</sub>(S)</code> | |||
belőle képzett leszármaztatott reláció. Fejezze ki ez utóbbit sor- és oszlopkalkulussal. | |||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) Sorkalkulussal: | |||
<code>{ 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] }</code> | |||
Oszlopkalkulussal: | |||
<code>{ a, c | ∃b ∃d ∃e R(a,b,c,d) ∧ S(c,d,e) ∧ e = '2' }</code> | |||
b) Sorkalkulussal: | |||
<code>{ 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] }</code> | |||
Oszlopkalkulussal: | |||
<code>{ c, d | ∃a ∃b ∃e R(a,b,c,d) ∧ S(c,d,e) }</code> | |||
}} | |||
| 187. sor: | 326. 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= | |||
<code>{ 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] ) }</code> | |||
}} | |||
| 193. sor: | 336. 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= | |||
<code>{a, b | ∀c ∀d ( R(a, b, c, d) ∨ ¬S(c, d) ) }</code> | |||
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. | |||
}} | |||
| 199. sor: | 348. sor: | ||
(2004-06-02 5.) Vizsgálja meg, hogy biztonságos-e a sorkalkulus. Minden változó doménje a természetes számok halmaza, alma<sup>1</sup> = {2,3}. | (2004-06-02 5.) Vizsgálja meg, hogy biztonságos-e a sorkalkulus. Minden változó doménje a természetes számok halmaza, <code>alma<sup>1</sup> = {2,3}</code>. | ||
{ x<sup>(1)</sup> | <code>{ x<sup>(1)</sup> | (∃ t<sup>(1)</sup>) x<sup>(1)</sup>[1] = t<sup>(1)</sup>[1] ∧ t<sup>(1)</sup>[1] > 2 ∧ alma<sup>(1)</sup>(x<sup>(1)</sup>) }</code> | ||
| 210. sor: | 359. sor: | ||
a) Fogalmazza meg szavakkal, hogy mit fejez ki az alábbi sorkalkulusos kifejezés: | a) Fogalmazza meg szavakkal, hogy mit fejez ki az alábbi sorkalkulusos kifejezés: | ||
{ t<sup>(1)</sup> | |||
<code>{ t<sup>(1)</sup> | (∃ u<sup>(3)</sup>) (u[1] = t[1] ∧ Gyerek(u) ∧ (∀ v<sup>(2)</sup>) ( v[1] ≠ t[1] ∨ ¬Kér(v) ∨ Kap(v) ) ) }</code> | |||
b) Biztonságos-e a fenti kifejezés? | b) Biztonságos-e a fenti kifejezés? | ||
| 230. sor: | 380. 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.) | ||
| 236. sor: | 386. sor: | ||
(2005-05-03 2.) Adott a következő séma: Jegyek(Neptun, DiákNév, Tárgykód, Jegy) | (2005-05-03 2.) Adott a következő séma: | ||
* Jegyek(Neptun, DiákNév, Tárgykód, Jegy): Melyik diák melyik tárgyból milyen jegyet kapott, kulcs a. (Neptun, Tárgykód) pár. | |||
Fejezd ki sorkalkulussal azokat a tárgykódokat, amely tárgyakból csak olyan diákok szereztek jegyet, akik Legalább egy tárgyból szereztek legalább elégségest. | |||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
<code>{ s<sup>(1)</sup> | ∃q<sup>(4)</sup> ( Jegyek(q) ∧ q[3] = s[1] ) ∧ ∀t<sup>(4)</sup> ( ¬Jegyek(t) ∨ s[1] ≠ t[3] ∨ ∃u<sup>(4)</sup> ( Jegyek(u) ∧ t[1] = u[1] ∧ u[4] > 1 ) ) }</code> | |||
}} | |||
| 242. sor: | 398. sor: | ||
(2006-11-20 3.) Adott a következő séma: Jegyek (Neptun, DiákNév, Tárgykód, Jegy) | (2006-11-20 3.) Adott a következő séma: | ||
a) Biztonságos-e az alábbi sorkalkulusos kifejezés? {s<sup>(1)</sup> | | * Jegyek (Neptun, DiákNév, Tárgykód, Jegy): Melyik diák melyik tárgyból milyen jegyet kapott, kulcs a (Neptun, Tárgykód) pár. | ||
a) Biztonságos-e az alábbi sorkalkulusos kifejezés? | |||
<code>{s<sup>(1)</sup> | ∃q<sup>(4)</sup>(Jegyek(q) ∧ q[3] = s[1]) ∧ ∀t<sup>(4)</sup>(¬Jegyek(t) ∨ ¬s[1] = t[3] ∨ t[4] = '5') }</code> | |||
b) Fejezze ki szavakkal, hogy mit ír le a fenti sorkalkulusos kifejezés. | b) Fejezze ki szavakkal, hogy mit ír le a fenti sorkalkulusos kifejezés. | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) Igen biztonságos. Ennek belátásához 3 dolgot kell megnéznünk: | |||
# A végeredménybe belekerülő adatok benne vannak a dom-ban, ami most a Jegyek reláció összes oszlopának összes értéke, plusz a kifejezésben szereplő konstansok. Ez most igaz, mert az <code>s<sup>(1)</sup></code> eredmény szerepel a Jegyek reláció egyik oszlopában <code>Jegyek(q) ∧ q[3] = s[1]</code> miatt. | |||
# Minden ∃-es részformulára meg kell nézni, hogy a helyessége eldönthető-e az egzisztenciális kvantor mögött álló kifejezés dom-jának végignézésével. Egy ilyen részformula van most, a <code>∃q<sup>(4)</sup>(Jegyek(q) ∧ q[3] = s[1])</code>, azt kell megnézni, hogy igaz-e, hogy ha létezik jó q, akkor a dom-on belül van ilyen. De ez most <code>Jegyek(q)</code> miatt igaz. | |||
# Minden ∀-es részformulára meg kell nézni, hogy a helyessége eldönthető-e a dom végignézésével: ilyenkor a <code>∀t(φ(t))</code> formulát átírjuk <code>¬∃t(¬φ(t))</code> alakra és az itt kapott ∃-es formulára ellenőrizzük az előbbi feltételt. Ez most azt jelenti, hogy a <code>∀t<sup>(4)</sup>(¬Jegyek(t) ∨ ¬s[1] = t[3] ∨ t[4] = 5)</code> formulát át kell írni a <code>¬∃t<sup>(4)</sup>(¬Jegyek(t) ∧ s[1] = t[3] ∧ t[4] ≠ 5)</code> alakra. Ez pedig ugyanazért lesz jó, amiért a 2. pontban nézett formula. | |||
b) A formula értelmezése: Olyan s-eket keresünk, amik a Jegyek reláció valamely sorában állnak a tárgykód oszlopban (vagyis tárgykódokat keresünk), és ezek a tárgykódok olyanok, hogy nincs olyan t<sup>(4)</sup> négyes, ami szerepel a Jegyekben, ehhez a tárgyhoz tartozik és nem ötös a jegy benne. (Ez az előbbi átírásból látszik.) Vagyis azokat a tárgykódokat keressük, amikből szerzett jegyet valaki és amiből csak ötös jegy született. | |||
}} | |||
| 251. sor: | 419. sor: | ||
(2004-11-30 3.b) Tekintsük az alábbi adatbázissémát: Járat(Járatszám, Honnan, Hova, Távolság, Indul, Érkezik) | (2004-11-30 3.b) Tekintsük az alábbi adatbázissémát: | ||
* Járat(Járatszám, Honnan, Hova, Távolság, Indul, Érkezik): melyik számú járat mikor és honnan, mikor és hova érkezik, mennyi távolságot tesz meg (kulcs a Járatszám) | |||
* Repülőtípus(TípusAzonosító, TípusNév, Hatótávolság): a típus azonosítója, neve és mennyit tud megtenni leszállás nélkül (kulcs a TípusAzonosító) | |||
* Jogosítvány(PilótaAzonosító, TípusAzonosító): milyen azonosítójú pilóta milyen azonosítójú gépet tud elvezetni (itt a PilótaAzonosító és a TípusAzonosító együtt alkot kulcsot) | |||
* Pilóta(PilótaAzonosító, PilótaNév): milyen azonosítójú polóta és mi a neve (kulcs a PilótaAzonosító) | |||
Fejezd ki sorkalkulussal azon repülőgépek TípusAzonosítóit, melyek leszállás nélkül el tudnak repülni Budapestről Bombayba. | |||
== Fizikai adatbázis== | == Fizikai adatbázis== | ||
(1996-04-16 3.) Egy 15525 rekordból álló állományt szeretnénk ritka index szervezéssel tárolni. A rekordhossz 850 byte, egy blokk kapacitása (a fejrészt nem számítva) 4000 byte. A kulcs 50 byte-os, egy mutatóhoz 18 byte kell. | (1996-04-16 3.) Egy 15525 rekordból álló állományt szeretnénk 1 szintű ritka index szervezéssel tárolni. A rekordhossz 850 byte, egy blokk kapacitása (a fejrészt nem számítva) 4000 byte. A kulcs 50 byte-os, egy mutatóhoz 18 byte kell. | ||
a) Legalább hány blokkra van szükség? | a) Legalább hány blokkra van szükség? | ||
b) Mennyi ideig tart legfeljebb egy rekord tartalmának kiolvasása, ha az operatív tárban rendelkezésünkre álló szabad hely 5000 byte? Segít-e a legnagyobb rekordhozzáférési idő csökkentésében, ha 10-szer (100-szor) ennyi szabad memóriával gazdálkodhatunk? | b) Mennyi ideig tart legfeljebb egy rekord tartalmának kiolvasása, ha az operatív tárban rendelkezésünkre álló szabad hely 5000 byte? Segít-e a legnagyobb rekordhozzáférési idő csökkentésében, ha 10-szer (100-szor) ennyi szabad memóriával gazdálkodhatunk? | ||
{{Rejtett|mutatott='''Megoldás'''|szöveg= | |||
a) 4000 byte-on 850-es rekordhosszal 4 rekord fér el. Ez azt jelenti, hogy összesen 3882 blokk kell az adatoknak. Ehhez jön még az egyszintű index. 4000 byte-on 58 db 68 byte-os kulcs-mutató pár fér el. Így a 3882 blokk indexeléséhez 67 blokkra van szükség. | |||
b) A maximális elérési idő. 5000 byte-ba egy blokk fér be egyszerre. Ehhez azt kell tudni, hogy hogyan is keresünk egy ilyen ritka indexben. Hát mondjuk ugye binárisan nem, mert az indexblokkok nincsenek szorosan egymás után a diszken. Akkor szekvenciálisan, ahol rossz esetben végig kell olvasni az egész indexet (mind a 67 blokkot). Utána még egy lapelérés, tehát max. 68 blokkművelet kell. | |||
Ha van elég sok memória, akkor az indexet a memóriában tarthatjuk tartósan, és ilyenkor már lehet binárisan keresni a memóriában villámgyorsan. Keresés után az adat elérése csak 1 plusz blokkművelet. | |||
}} | |||
| 284. sor: | 465. 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: | 488. 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. | |||
}} | |||