Tentamen i 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
Tentamen i 1. Ett företag som säljer IT-utbildning vill datorisera sin verksamhet. Företaget har ett 30- tal lärare och kan hantera upp till 70 elever i varje kurs. Företaget tillhandahåller 5 st avancerade kurser som lärs ut av ett team av 2 eller flera lärare. Varje lärare ingår i maximalt två lärarteam men kan även syssla med kursutveckling. Varje kurs består av ett antal lektioner, praktiska övningar och hemuppgifter. Företaget vill hålla reda på kurser och dess innehåll, lärare och dessas teamtillhörighet, kursdeltagare och deras resultat. Även lärarnas tjänstgöring skall gå att lagra i systemet. (10p) a. Gör en modell som beskriver verksamheten. (2p) (2p) b. Gör en T-Matris till modellen c. Gör en databasstruktur som motsvarar modell och T-matris. 2. Ett bemanningsföretag som hyr ut hotellpersonal till hotell i hela landet har ett manuellt register med följande innehåll: Pnr KontraktsNr AntalTimmarPerVecka Namn Tel HotellNr HotellAdr HotellPostnr HotellOrt Sysselsättning pnr för en anställd. Identifierar företagets kontrakt med ett hotell. Antal timmar den anställde är kontrakterad på det aktuella hotellet. Den anställdes namn. Den anställdes telnr. Unikt nummer för varje hotell. Hotellets adress. Hotellets postnummer. Hotellets ort. Vad den anställde skall göra på hotellet. En anställd kan arbeta på mer än ett hotell samtidigt och kan vara kontrakterad för kort eller lång tid. Ett hotell kan hyra flera anställda samtidigt och en viss anställd vid flera olika tillfällen. a (2p) Utred vilka funktionella beroenden som finns i strukturen. b (1p) En första ansats är att lägga alla termer i en enda tabell. Vilka för och nackdelar har en sådan lösning i det aktuella fallet? c (6p) Normalisera successivt till 1NF, 2NF, 3NF och motivera alla åtgärder. Sid 1
Tentamen i 3. Antag att en transaktion förlöper enligt nedanstående tabell. Tabellen inneåller även loggens innegåll. C-A betyder Copy A till arbetsminnet, D-A betyder kopiera A till Disk, Read(A, t) betyder kopiera dataobjektet A till/från en programvariabel t, Write(A, t) betyder kopiera t till dataobjektet A och Output(A) betydar att dataobjektet A skrivs till databasen. Transaktion T 1 Logg C-A C-B D- A D-B t <start T 1, 123> Read(A, t) <Read(A, T 1, 125)> 8 8 t t*2 16 Write(A, t) <Write(A, T 1, 8, 16, 130> 16 16 16 Read(b, t) <Read(B, T 1, 135)> 10 10 t t*2 20 Write(B, t) Output(A) <Write(B, T 1, 10, 20, 140> 20 20 20 20 Output(B) 20 Rollback a (2p) Beskriv vad som händer vid sista operationen (rollback)? b (2p) Om vi har ytterligare en transaktion T 2 som exekverar samtidigt som T 1. Betrakta följande operationsföljd: 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), Är operationsföljden serialiserbar? c (2p) Kan man råka ut för utsvältning då man använder optimistisk transaktionshantering? 4. Index är viktiga i databassammanhang. a) (1p) Vilka termer bör indexeras i en databas? b) (1p) Finns det några nackdelar med index? c) (1p) Beskriv för- och nackdelar med index på varje term i en relation. d) (1p) Under vilka förutsättningar kan man ha ett glest index på ett attribut? e) (1p) I vilka fall är det bättre att välja ett B-trädsindex i stället för ett hash-index? För resten av uppgifterna gäller följande databasstruktur: Anställd ( ( namn ), lön, chef, avd ) ; Försäljning ( ( avd, varunr ), volym ) ; Leverantör ( ( företag ), adress ) ; Lager ( ( företag, avd, varunr ), volym ) ; Avdelning ( ( avd ), våning ) ; Vara ( ( varunr ), typ ) ; där varunr, våning och volym är av typen integer och övriga av typen string(30). 5. Antag att man definierat följande vy: CREATE view tmp(namn, lön, chefslön, våning, företag) AS (SELECT A.namn, A.lön, C.lön, Av.våning, L.företag FROM Anställd A, Anställd C, Avdelning Av, Lager L WHERE A.chef = C.namn AND A.avd = Av.avd AND A.avd = L.avd; och att man vill ha svar på frågan vilka leverantörer levererar till de avdelningar på våning 2 där någon tjänar mer än sin chef? SELECT företag FROM tmp WHERE lön > chefslön AND våning = 2; a) (1p) Vilka väsentliga principer används av en optimerare? b) (3p) Visa hur en optimerare kommer att bygga om frågan. c) (2p) Varför skall man inte kompilera eller kompilera och exekvera vyn? Sid 2
Tentamen i 6. Översätt till begriplig svenska: a. (2p)create view U(avd, n) as select A.avd, count(distinct A.namn) from Anställd A, Lager L where A.avd = L.avd and L.företag = Addidas group by A.avd; select V.typ from Försäljning F, Vara V, U where F.varunr = V.varunr and F.avd = U.avd and U.n = (select max(n) from U) b. (2p)(P företag, avd(s typ = fotboll (Lager ÍVara))) P avd(s typ = sportskor (Vara ÍFörsäljning)); c. (2p){n ($c)($a)($x)(anställd(nxca) Ÿ ($v)(avdelning(av) Ÿ v = 2 Ÿ ($y)( Anställd (cyzb) Ÿ y < x)))} d. (2p){t.varunr Vara(t) Ÿ ÿ($a)(avdelning(a) Ÿ (ÿ($s)(försäljning(s) Ÿ s.varunr = t.varunr Ÿ s.avd = a.avd)))} e. (2p) Anställd Namn Lön Chef Avd Avdelning Avd Våning P. _x _c _a _a _v1 _c _y _b _b _v2 conditions _v1=_v2 AND _x < _y Sid 3
Tentamen i Lösningsförslag till Tentamen i lördagen den 13 mars 2004 Sid 0
Lösningsförslag till Tentamen i 1. a Lektion Uppgift HarUppgift HarLektion Datum Kurs Deltar Deltagare HarLaboration Laboration Undervisar b Lärare T-matris Typ Namn I-term(er) E-term(er) Obj Uppgift Unr UppgTyp, Lydelse Obj Datum Datum Obj Laboration Lid Lydelse Obj Lektion Lnr Innehåll Obj Kurs Knr Namn Obj Deltagare Pnr Namn, Adr, Tel Obj Lärare Pnr Namn, Adr, Tel Samb HarUppgift Unr, Datum, Knr Samb HarLaboration Lnr, Knr, Datum Samb HarLektion Knr, Lnr LektNr Samb Deltar Pnr, Knr Resultat Samb Undervisar Knr, Datum, Pnr AntalTim c Regel a: Uppgift Laboration Lektion Kurs Deltagare Lärare Regel b: Datum försvinner Regel c: ((Unr) UppgTyp, Lydelse) ((Lid) Lydelse) ((Lnr) Innehåll) ((Knr) Namn) ((Pnr) Namn, Adr, Tel) ((Pnr) Namn, Adr, Tel) HarUppgift ((Unr, Datum, Knr)) HarLaboration ((Lnr, Knr, Datum)) Undervisar ((Knr, Datum, Pnr)) AntalTim) Regel d: Deltar ((Pnr, Knr) Resultat) Regel e: HarLektion försvinner men Knr och LektNr blir E-term i Lektion: Lektion ((Lnr) Innehåll, Knr, LektNr) Regel f: Finns inga Sid 1
Lösningsförslag till Tentamen i Slutlig struktur: Uppgift Laboration Lektion Kurs Deltagare Lärare HarUppgift HarLaboration Undervisar Deltar ((Unr) UppgTyp, Lydelse) ((Lid) Lydelse) ((Lnr) Innehåll, Knr, LektNr) ((Knr) Namn) ((Pnr) Namn, Adr, Tel) ((Pnr) Namn, Adr, Tel) ((Unr, Datum, Knr)) ((Lnr, Knr, Datum)) ((Knr, Datum, Pnr)) AntalTim) ((Pnr, Knr) Resultat) Strukturen är i 3NF. 2. a b c Pnr Æ Namn, Tel KontraktsNr Æ Pnr, AntalTimmarPerVecka, HotellNr, Sysselsättning HotellNr Æ HotellAdr, HotellPostnr HotellPostnr Æ HotellOrt Insättningsproblem: vi kan inte lagra information om en anställd om denne inte kontrakterats ännu. Borttagningsproblem: Om en anställd endast har arbetat på ett hotell och hotellet tas bort så försvinner även uppgifter om den anställde. Uppdateringsproblem: Om en anställd byter telnr så måste ett okänt antal tupler uppdateras. Vissa FD kommer inte att impliceras av strukturen t ex Pnr Æ Namn Hitta alla kandidatnycklar: Den enda är KontraktsNr. 1NF: ((KontraktsNr) Pnr, Namn, Tel, AntalTimmarPerVecka, HotellNr, HotellAdr, HotellPostnr, HotellOrt, Sysselsättning) 2NF: Bryt ut det som inte är FFD. Det finns inga sådana! 3NF: Bryt ut det som är transitivt beroende. ((Pnr,) Namn, Tel) ((HotellNr) HotellAdr, HotellPostnr, HotellOrt) men här måste vi dela ytterligare: ((HotellNr) HotellAdr, HotellPostnr) ((HotellPostnr) HotellOrt) ((KontraktsNr) Pnr, AntalTimmarPerVecka, HotellNr, Sysselsättning) Slutlig struktur: ((Pnr,) Namn, Tel) ((HotellNr) HotellAdr, HotellPostnr) ((HotellPostnr) HotellOrt) ((KontraktsNr) Pnr, AntalTimmarPerVecka, HotellNr, Sysselsättning) Konstruera motsvarande modell. Vi kan se att modellen är rimlig så vi är klara. Sid 2
Lösningsförslag till Tentamen i 3. a Loggen läses från slutet. Den första operationen är Write(B, t) B återställs till sitt gamla värde: 10, Read(b, t) har inte ändrat något i databasen. Nästa operation är Write(A, t) A återställs till sit gamla värde: 8. Transaktionen är nu ogjord. b Rita serialiserbarhetsgraf så ser man att operationsföljden är serialiserbar. c Ja om andra transaktioner hinner uppdatera sådant som den en viss transaktion så blir denna aldrig klar. 4. a) Primär och främmande nycklar, attribut som ingår i predikat vid sökning, under förutsättning att man inte har hög frekvens av modifierande operationer (motivera). b) Insättning, borttagning och uppdatering tar längre tid (motivera). Optimeraren får mer att göra. c) Redundansen ökar, optimeraren får mer att göra, insättning, borttagning och uppdatering tar längre tid. d) Om relationen är sorterad på attributet. e) Då man vill kunna komma åt föregående/nästa post. 5. a) Reduktion av datamängden så nära relationerna som möjligt. Hantera minsta datamängderna först. b) Initialt evalueringsträd: Slutligt evalueringsträd: π Företag s lön > chefslön Ÿ våning = 2 tmp tmp π A.namn, A.lön, C.lön, Av.våning, L.företag s A.chef=C.namn Ÿ A.avd=Av.avd Ÿ A.avd=L.avd π företag π avd π avd s våning = 2 π avd, företag Lager X X X Avdelning Anställd A Anställd C Avdelning Av Lager L Anställd A Anställd C F c) Kompilera: Vi kan inte optimera. Kompilera och exekvera: Vi får redundans, jobbar med gamla data och saknar möjlighet att optimera. 6. a Vilka typer av varor säljs av den avdelning med störst personaltäthet som har störst utbud av varor från Addidas? b. Vilka företag levererar fotbollar till samtliga avdelningar som säljer sportskor? c. Vilka anställda på andra våningen tjänar mer än sin chef? d. Vilka varor säljs av alla avdelningar? e. Vilka är de anställda som arbetar på samma våning som sin chef och tjänar mindre än denne? A.chef = C.namn Ÿ A.lön > C.lön Sid 3