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:

  1. 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.

  2. [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:

    1. Sýnið það verkefni sem hefur mesta fjármagnið (budget) af þeim verkefnum sem tilheyra "Sales" deildinni.
    2. Sýnið þau verkefni sem hafa enga starfsmenn skráða á sig.
    3. Sýnið þá starfsmenn sem aðeins vinna við verkefni sem tilheyra deildinni sem þeir sjálfir eru í.
    4. 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.

  3. [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.

    1. Finnið alla lykla venslanna R.
    2. Ef venslin R eru ekki á BCNF bendið þá á hvers vegna ekki og brjótið venslin upp þannig að þau uppfylli BCNF.
    3. 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ð.

  4. Gerum ráð fyrir eftirfarandi töflum:
    A(a,b,x)
    B(b,c,y)
    C(c,d,z)
    D(d,q)
    
    og eftirfarandi fyrirspurn:
    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.

  5. 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:

    1. Hvaða raðir eru sýnilegar ef hreyfingin sem les gögnin er með einangrunarstig READ COMMITTED?
    2. Hvaða raðir eru sýnilegar ef hreyfingin sem les gögnin er með einangrunarstig SERIALIZABLE?