Gagnasafnsfræði, haust 2011
[ Dagskrá | Námsefni | Verkefni | Dæmatímar | Orðalisti | Námsmat | Kennslubók ]Verkefni 12 - Blandað efni
Lausnum skal skilað í hólf viðkomandi dæmakennara (sjá lista yfir dæmatíma).Skiladagur: þriðjudaginn 29. nóvember fyrir kl 16:00
Skiladæmi:
-
Hannið gagnasafn fyrir bókasölu á netinu. Bóksalan rekur vefsíðu og þar er meðal annars hægt að skoða bækur, lesa umsagnir og panta bækur.
Bók hefur titil, ISBN númer, verð í ISK, útgefanda, útgáfudagsetningu, útgáfu númer, stutta lýsingu, og að lokum einn eða fleiri höfunda.
Notendur geta skráð sig á síðuna. Hver notandi hefur notandanafn, lykilorð og netfang.
Notandi getur skrifað umsagnir um bækur. Hver umsögn fjallar um tiltekna bók og inniheldur texta ásamt stjörnugjöf á bilinu 0-5 stjörnur.
Notandi getur sett bækur í "körfu" (shopping cart) og síðan sett körfuna í afgreiðslu og þar með lagt inn pöntun á þeim hlutum sem eru í henni. Karfan inniheldur eina eða fleiri bækur.
Pöntun inniheldur eina eða fleiri bækur, ásamt verðinu þegar þær voru pantaðar, dagsetningu pöntunar og dagsetningu sendingar (þegar bækurnar voru sendar af stað í pósti)
Hannið töflur fyrir gagnasafnið og sýnið CREATE TABLE skipanirnar fyrir þær. Munið að tilgreina alla aðallykla og ytri lykla í skilgreiningunum.
-
[Prófdæmi 2008]
Gefnar eru töflurnar:
Emp( eid, ename, salary, works_for_did ) Project( pid, descr, budget, hosted_by_did ) Takes_part( eid, pid, hours_per_month ) Dept( did, dname, manager )
Töflurnar geyma upplýsingar um starfsmenn (Emp), verkefni (Project) og deildir (Dept) í fyrirtæki nokkru.
Það er skráð hvaða starfsmenn vinna í hvaða verkefni og hversu marga tíma á mánuði (Takes_part).
Einnig er skráð í hvaða deild hver starfsmaður er (works_for_did sviðið í töflunni Emp) og hvaða hvaða deild hvert verkefni tilheyrir (hosted_by_did sviðið í töflunni Project).
Þið eigið að búa til SQL skipanir til að svara eftirfarandi fyrirspurnum á þetta gagnasafn:
- Sýnið það verkefni sem hefur mesta fjármagnið (budget) af þeim verkefnum sem tilheyra "Sales" deildinni.
- Sýnið þau verkefni sem hafa enga starfsmenn skráða á sig.
- Sýnið þá starfsmenn sem aðeins vinna við verkefni sem tilheyra deildinni sem þeir sjálfir eru í.
- Sýnið öll þau verkefni sem starfsmaðurinn "John" vinnur við, í röð eftir umfangi, þ.e. heildarmagni tíma sem settir eru í verkefnið (ekki aðeins tíma "John"). Sýnið þó aðeins þau verkefni þar sem umfangið er meira en 100 tímar.
-
[Prófdæmi 2008]
Lát R(A,B,C,D,E) vera vensl með fallákveðunum AB → C, AC → B, AD → E, B → D, BC → A.
- Finnið alla lykla venslanna R.
- Ef venslin R eru ekki á BCNF bendið þá á hvers vegna ekki og brjótið venslin upp þannig að þau uppfylli BCNF.
- Ef venslin R væru brotin upp í venslin R1(A, B, C) og R2(A, B, D, E) væri það uppbrot þá taplaust (e. lossless)? Útskýrið.
-
Gerum ráð fyrir eftirfarandi töflum:
A(a,b,x) B(b,c,y) C(c,d,z) D(d,q)
SELECT x,y,z,q FROM A,B,C,D WHERE A.b=B.b AND B.c=C.c AND C.d=D.d AND A.x < 500 AND B.y = 100 AND C.z > 10
Hér fyrir neðan er lélegt segðatré fyrir framkvæmd á fyrirspurninni:
Komið með tillögur að betra tré og færið rök fyrir því af hverju það er betra.
-
Gerum ráð fyrir MVCC kerfi eins og í PostgreSQL.
Eftirfarandi hreyfingar eru ennþá opnar (ókláraðar): 60, 80.
Það var hætt við eftirfarandi hreyfingar (aborted): 70, 90
Allar aðrar hreyfingar voru kláraðar með commit.
Hreyfing númer 100 les eftirfarandi töflu.
ID xmin xmax Sýnileg 1 50 ? 2 60 ? 3 70 ? 4 75 ? 5 150 ? 6 50 70 ? 7 50 77 ? 8 50 80 ? 9 50 140 ? 10 130 180 ? Svarið eftirfarandi spurningum:
- Hvaða raðir eru sýnilegar ef hreyfingin sem les gögnin er með einangrunarstig READ COMMITTED?
- Hvaða raðir eru sýnilegar ef hreyfingin sem les gögnin er með einangrunarstig SERIALIZABLE?