Lösningsförslag till Tentamen i Databasteknik

Lösningsförslag till Tentamen i Databasteknik Lösningsförslag till Tentamen i Databasteknik

24.09.2013 Views

Tentamen i Databasteknik lördagen den 13 mars 2004 Tillåtna hjälpmedel: Allt upptänkligt material Använd bara framsidan på varje blad. Skriv max en uppgift per blad. Motivera allt, dokumentera egna antaganden. Oläslig/obegriplig lösning ger noll poäng. Max poäng = 50 + bonus Betygsgränser : KTH SU 3 30 G 33 4 39 VG 45 5 48 Lycka till! Kjell

<strong>Tentamen</strong><br />

i<br />

<strong>Databasteknik</strong><br />

lördagen den 13 mars 2004<br />

Tillåtna hjälpmedel:<br />

Allt upptänkligt material<br />

Använd bara framsidan på varje blad.<br />

Skriv max en uppgift per blad.<br />

Motivera allt, dokumentera egna antaganden.<br />

Oläslig/obegriplig lösning ger noll poäng.<br />

Max poäng = 50<br />

+ bonus<br />

Betygsgränser :<br />

KTH SU<br />

3 30 G 33<br />

4 39 VG 45<br />

5 48<br />

Lycka <strong>till</strong>!<br />

Kjell


<strong>Tentamen</strong> i <strong>Databasteknik</strong><br />

Kjell Lindqvist, (08) 790 62 76 Kungliga Tekniska Högskolan i Stockholm<br />

Våren 2004 13 mars 2004 Stockholms Universitet<br />

_________________________________________________________________________<br />

1. Ett företag som säljer IT-utbildning vill datorisera sin verksamhet. Företaget har ett 30tal<br />

lärare och kan hantera upp <strong>till</strong> 70 elever i varje kurs. Företaget <strong>till</strong>handahåller 5 st<br />

avancerade kurser som lärs ut av ett team av 2 eller flera lärare. Varje lärare ingår i<br />

maximalt två lärarteam men kan även syssla med kursutveckling. Varje kurs består av ett<br />

antal lektioner, praktiska övningar och hemuppgifter.<br />

Företaget vill hålla reda på kurser och dess innehåll, lärare och dessas team<strong>till</strong>hörighet,<br />

kursdeltagare och deras resultat. Även lärarnas tjänstgöring skall gå att lagra i systemet.<br />

(10p) a. Gör en modell som beskriver verksamheten.<br />

(2p) b. Gör en T-Matris <strong>till</strong> modellen<br />

(2p) c. Gör en databasstruktur som motsvarar modell och T-matris.<br />

2. Ett bemanningsföretag som hyr ut hotellpersonal <strong>till</strong> hotell i hela landet har ett manuellt<br />

register med följande innehåll:<br />

Pnr pnr för en anställd.<br />

KontraktsNr Identifierar företagets kontrakt med ett hotell.<br />

AntalTimmarPerVecka Antal timmar den anställde är kontrakterad på det aktuella<br />

hotellet.<br />

Namn Den anställdes namn.<br />

Tel Den anställdes telnr.<br />

HotellNr Unikt nummer för varje hotell.<br />

HotellAdr Hotellets adress.<br />

HotellPostnr Hotellets postnummer.<br />

HotellOrt Hotellets ort.<br />

Sysselsättning Vad den anställde skall göra på hotellet.<br />

En anställd kan arbeta på mer än ett hotell samtidigt och kan vara kontrakterad för kort eller<br />

lång tid. Ett hotell kan hyra flera anställda samtidigt och en viss anställd vid flera olika<br />

<strong>till</strong>fällen.<br />

a (2p) Utred vilka funktionella beroenden som finns i strukturen.<br />

b (1p) En första ansats är att lägga alla termer i en enda tabell. Vilka<br />

för och nackdelar har en sådan lösning i det aktuella fallet?<br />

c (6p) Normalisera successivt <strong>till</strong> 1NF, 2NF, 3NF och motivera alla<br />

åtgärder.<br />

Sid 1


<strong>Tentamen</strong> i <strong>Databasteknik</strong><br />

Kjell Lindqvist, (08) 790 62 76 Kungliga Tekniska Högskolan i Stockholm<br />

Våren 2004 13 mars 2004 Stockholms Universitet<br />

_________________________________________________________________________<br />

3. Antag att en transaktion förlöper enligt nedanstående tabell. Tabellen inneåller även<br />

loggens innegåll. C-A betyder Copy A <strong>till</strong> arbetsminnet, D-A betyder kopiera A <strong>till</strong> Disk,<br />

Read(A, t) betyder kopiera dataobjektet A <strong>till</strong>/från en programvariabel t, Write(A, t)<br />

betyder kopiera t <strong>till</strong> dataobjektet A och Output(A) betydar att dataobjektet A skrivs <strong>till</strong><br />

databasen.<br />

Transaktion T1 Logg C-A C-B D-<br />

A<br />

D-B t<br />

Read(A, t)<br />

t ¨ t*2<br />

<br />

8 8<br />

16<br />

Write(A, t)<br />

Read(b, t)<br />

t ¨ t*2<br />

<br />

<br />

16<br />

10<br />

16 16<br />

10<br />

20<br />

Write(B, t)<br />

Output(A)<br />

20 20 20<br />

20<br />

Output(B)<br />

Rollback<br />

20<br />

a (2p) Beskriv vad som händer vid sista operationen (rollback)?<br />

b (2p) Om vi har ytterligare en transaktion T 2 som exekverar samtidigt som T 1 . Betrakta<br />

följande operationsföljd:<br />

T 1 :R(A), T 2 :R(A), T 2 :W(C), T 1 :W(A), T 1 :R(B), T 2 :R(B), T 1 :W(B),<br />

Är operationsföljden serialiserbar?<br />

c (2p) Kan man råka ut för utsvältning då man använder optimistisk transaktionshantering?<br />

4. Index är viktiga i databassammanhang.<br />

a) (1p) Vilka termer bör indexeras i en databas?<br />

b) (1p) Finns det några nackdelar med index?<br />

c) (1p) Beskriv för- och nackdelar med index på varje term i en relation.<br />

d) (1p) Under vilka förutsättningar kan man ha ett glest index på ett attribut?<br />

e) (1p) I vilka fall är det bättre att välja ett B-trädsindex i stället för ett hash-index?<br />

För resten av uppgifterna gäller följande databasstruktur:<br />

Anställd ( ( namn ), lön, chef, avd ) ;<br />

Försäljning ( ( avd, varunr ), volym ) ;<br />

Leverantör ( ( företag ), adress ) ;<br />

Lager ( ( företag, avd, varunr ), volym ) ;<br />

Avdelning ( ( avd ), våning ) ;<br />

Vara ( ( varunr ), typ ) ;<br />

där varunr, våning och volym är av typen integer och övriga av typen string(30).<br />

5. Antag att man definierat följande vy:<br />

CREATE view tmp(namn, lön, chefslön, våning, företag) AS<br />

(SELECT A.namn, A.lön, C.lön, Av.våning, L.företag FROM<br />

Anställd A, Anställd C, Avdelning Av, Lager L<br />

WHERE A.chef = C.namn AND A.avd = Av.avd AND A.avd = L.avd;<br />

och att man vill ha svar på frågan ”vilka leverantörer levererar <strong>till</strong> de avdelningar på<br />

våning 2 där någon tjänar mer än sin chef ?”<br />

SELECT företag FROM tmp WHERE lön > chefslön AND våning = 2;<br />

a) (1p) Vilka väsentliga principer används av en optimerare?<br />

b) (3p) Visa hur en optimerare kommer att bygga om frågan.<br />

c) (2p) Varför skall man inte kompilera eller kompilera och exekvera vyn?<br />

Sid 2


<strong>Tentamen</strong> i <strong>Databasteknik</strong><br />

Kjell Lindqvist, (08) 790 62 76 Kungliga Tekniska Högskolan i Stockholm<br />

Våren 2004 13 mars 2004 Stockholms Universitet<br />

_________________________________________________________________________<br />

6. Översätt <strong>till</strong> begriplig svenska:<br />

a. (2p)create view U(avd, n) as select A.avd, count(distinct A.namn)<br />

from Anställd A, Lager L<br />

where A.avd = L.avd and L.företag = ’Addidas’ group by A.avd;<br />

select V.typ from Försäljning F, Vara V, U<br />

where F.varunr = V.varunr and F.avd = U.avd<br />

and U.n = (select max(n) from U)<br />

b. (2p)(P företag, avd(s typ = ’fotboll’ (Lager˙¥ÍVara))) ÷<br />

P avd(s typ = ’sportskor’ (Vara˙¥ÍFörsäljning));<br />

c. (2p){n | ($c)($a)($x)(Anställd(nxca) Ÿ ($v)(Avdelning(av) Ÿ v = 2 Ÿ<br />

($y)( Anställd (cyzb) Ÿ y < x)))}<br />

d. (2p){t.varunr | Vara(t) Ÿ ÿ($a)(Avdelning(a) Ÿ (ÿ($s)(Försäljning(s) Ÿ s.varunr = t.varunr Ÿ<br />

s.avd = a.avd)))}<br />

e. (2p)<br />

Anställd Namn Lön Chef Avd Avdelning Avd Våning<br />

P. _x _c _a _a _v1<br />

_c _y _b _b _v2<br />

conditions<br />

_v1=_v2 AND _x < _y<br />

Sid 3


<strong>Tentamen</strong> i <strong>Databasteknik</strong><br />

Kjell Lindqvist, (08) 790 62 76 Kungliga Tekniska Högskolan i Stockholm<br />

Våren 2004 13 mars 2004 Stockholms Universitet<br />

_________________________________________________________________________<br />

<strong>Lösningsförslag</strong> <strong>till</strong><br />

<strong>Tentamen</strong><br />

i<br />

<strong>Databasteknik</strong><br />

lördagen den 13 mars 2004<br />

Sid 0


<strong>Lösningsförslag</strong> <strong>till</strong> <strong>Tentamen</strong> i<br />

<strong>Databasteknik</strong><br />

Kjell Lindqvist, (08) 790 62 76 Kungliga Tekniska Högskolan i Stockholm<br />

Våren 2004 13 mars 2004 Stockholms Universitet<br />

_________________________________________________________________________<br />

1.<br />

a<br />

Uppgift<br />

HarUppgift<br />

Datum<br />

HarLaboration<br />

Laboration<br />

Lektion<br />

Kurs Deltar<br />

Deltagare<br />

b<br />

T-matris<br />

Lärare<br />

Typ Namn I-term(er) E-term(er)<br />

Obj Uppgift Unr UppgTyp, Lydelse<br />

Obj Datum Datum<br />

Obj Laboration Lid Lydelse<br />

Obj Lektion Lnr Innehåll<br />

Obj Kurs Knr Namn<br />

Obj Deltagare Pnr Namn, Adr, Tel<br />

Obj Lärare Pnr Namn, Adr, Tel<br />

Samb HarUppgift Unr, Datum, Knr<br />

Samb HarLaboration Lnr, Knr, Datum<br />

Samb HarLektion Knr, Lnr LektNr<br />

Samb Deltar Pnr, Knr Resultat<br />

Samb Undervisar Knr, Datum, Pnr AntalTim<br />

c<br />

Regel a:<br />

Uppgift ((Unr) UppgTyp, Lydelse)<br />

Laboration ((Lid) Lydelse)<br />

Lektion ((Lnr) Innehåll)<br />

Kurs ((Knr) Namn)<br />

Deltagare ((Pnr) Namn, Adr, Tel)<br />

Lärare ((Pnr) Namn, Adr, Tel)<br />

Regel b:<br />

Datum försvinner<br />

Regel c:<br />

HarUppgift ((Unr, Datum, Knr))<br />

HarLaboration ((Lnr, Knr, Datum))<br />

Undervisar ((Knr, Datum, Pnr)) AntalTim)<br />

Regel d:<br />

Deltar ((Pnr, Knr) Resultat)<br />

Regel e:<br />

HarLektion försvinner men Knr och LektNr blir E-term i Lektion:<br />

Lektion ((Lnr) Innehåll, Knr, LektNr)<br />

Regel f: Finns inga<br />

Sid 1<br />

Undervisar<br />

HarLektion


<strong>Lösningsförslag</strong> <strong>till</strong> <strong>Tentamen</strong> i<br />

<strong>Databasteknik</strong><br />

Kjell Lindqvist, (08) 790 62 76 Kungliga Tekniska Högskolan i Stockholm<br />

Våren 2004 13 mars 2004 Stockholms Universitet<br />

_________________________________________________________________________<br />

Slutlig struktur:<br />

Uppgift ((Unr) UppgTyp, Lydelse)<br />

Laboration ((Lid) Lydelse)<br />

Lektion ((Lnr) Innehåll, Knr, LektNr)<br />

Kurs ((Knr) Namn)<br />

Deltagare ((Pnr) Namn, Adr, Tel)<br />

Lärare ((Pnr) Namn, Adr, Tel)<br />

HarUppgift ((Unr, Datum, Knr))<br />

HarLaboration ((Lnr, Knr, Datum))<br />

Undervisar ((Knr, Datum, Pnr)) AntalTim)<br />

Deltar ((Pnr, Knr) Resultat)<br />

Strukturen är i 3NF.<br />

2.<br />

a Pnr Æ Namn, Tel<br />

KontraktsNr Æ Pnr, AntalTimmarPerVecka, HotellNr, Sysselsättning<br />

HotellNr Æ HotellAdr, HotellPostnr<br />

HotellPostnr Æ HotellOrt<br />

b Insättningsproblem: vi kan inte lagra information om en anställd om denne inte<br />

kontrakterats ännu.<br />

Borttagningsproblem: Om en anställd endast har arbetat på ett hotell och hotellet tas<br />

bort så försvinner även uppgifter om den anställde.<br />

Uppdateringsproblem: Om en anställd byter telnr så måste ett okänt antal tupler<br />

uppdateras.<br />

Vissa FD kommer inte att impliceras av strukturen t ex Pnr Æ Namn<br />

c Hitta alla kandidatnycklar: Den enda är KontraktsNr.<br />

1NF: ((KontraktsNr) Pnr, Namn, Tel, AntalTimmarPerVecka, HotellNr, HotellAdr, HotellPostnr,<br />

HotellOrt, Sysselsättning)<br />

2NF: Bryt ut det som inte är FFD. Det finns inga sådana!<br />

3NF: Bryt ut det som är transitivt beroende.<br />

((Pnr,) Namn, Tel)<br />

((HotellNr) HotellAdr, HotellPostnr, HotellOrt) men här måste vi dela ytterligare:<br />

((HotellNr) HotellAdr, HotellPostnr)<br />

((HotellPostnr) HotellOrt)<br />

((KontraktsNr) Pnr, AntalTimmarPerVecka, HotellNr, Sysselsättning)<br />

Slutlig struktur:<br />

((Pnr,) Namn, Tel)<br />

((HotellNr) HotellAdr, HotellPostnr)<br />

((HotellPostnr) HotellOrt)<br />

((KontraktsNr) Pnr, AntalTimmarPerVecka, HotellNr, Sysselsättning)<br />

Konstruera motsvarande modell. Vi kan se att modellen är rimlig så vi är klara.<br />

Sid 2


<strong>Lösningsförslag</strong> <strong>till</strong> <strong>Tentamen</strong> i<br />

<strong>Databasteknik</strong><br />

Kjell Lindqvist, (08) 790 62 76 Kungliga Tekniska Högskolan i Stockholm<br />

Våren 2004 13 mars 2004 Stockholms Universitet<br />

_________________________________________________________________________<br />

3.<br />

a Loggen läses från slutet. Den första operationen är Write(B, t) B återställs <strong>till</strong> sitt gamla<br />

värde: 10, Read(b, t) har inte ändrat något i databasen. Nästa operation är Write(A, t) A<br />

återställs <strong>till</strong> sit gamla värde: 8. Transaktionen är nu ogjord.<br />

b Rita serialiserbarhetsgraf så ser man att operationsföljden är serialiserbar.<br />

c Ja om andra transaktioner hinner uppdatera sådant som den en viss transaktion så blir<br />

denna aldrig klar.<br />

4.<br />

a) Primär och främmande nycklar, attribut som ingår i predikat vid sökning, under<br />

förutsättning att man inte har hög frekvens av modifierande operationer (motivera).<br />

b) Insättning, borttagning och uppdatering tar längre tid (motivera). Optimeraren får mer<br />

att göra.<br />

c) Redundansen ökar, optimeraren får mer att göra, insättning, borttagning och<br />

uppdatering tar längre tid.<br />

d) Om relationen är sorterad på attributet.<br />

e) Då man vill kunna komma åt föregående/nästa post.<br />

5.<br />

a) Reduktion av datamängden så nära relationerna som möjligt. Hantera minsta<br />

datamängderna först.<br />

b) Initialt evalueringsträd: Slutligt evalueringsträd:<br />

π Företag<br />

s lön > chefslön Ÿ våning = 2<br />

tmp<br />

tmp<br />

π A.namn, A.lön, C.lön, Av.våning, L.företag<br />

s A.chef=C.namn Ÿ A.avd=Av.avd Ÿ A.avd=L.avd<br />

X<br />

X<br />

X<br />

Avdelning<br />

Anställd A Anställd C<br />

F<br />

Avdelning Av Lager L<br />

Anställd A Anställd C<br />

c) Kompilera: Vi kan inte optimera.<br />

Kompilera och exekvera: Vi får redundans, jobbar med gamla data och saknar möjlighet<br />

att optimera.<br />

6.<br />

a Vilka typer av varor säljs av den avdelning med störst personaltäthet som har störst<br />

utbud av varor från Addidas?<br />

b. Vilka företag levererar fotbollar <strong>till</strong> samtliga avdelningar som säljer sportskor?<br />

c. Vilka anställda på andra våningen tjänar mer än sin chef?<br />

d. Vilka varor säljs av alla avdelningar?<br />

e. Vilka är de anställda som arbetar på samma våning som sin chef och tjänar mindre än<br />

denne?<br />

Sid 3<br />

π företag<br />

πavd πavd svåning = 2<br />

π avd, företag<br />

Lager<br />

A.chef = C.namn Ÿ A.lön > C.lön

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!