Lösningsförslag till Tentamen i Databasteknik
Lösningsförslag till Tentamen i Databasteknik Lösningsförslag till Tentamen i Databasteknik
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
- Page 2 and 3: Tentamen i Databasteknik Kjell Lind
- Page 4 and 5: Tentamen i Databasteknik Kjell Lind
- Page 6 and 7: Lösningsförslag till Tentamen i D
- Page 8: Lösningsförslag till Tentamen i D
<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