Inst. för Data- och Systemvetenskap SU/KTH Maria Bergholtz, Paul Johannesson Lösningsförslag till Exempel tentamen 2I-1033 IT i Organisationer och Databasteknik Tentamenstiden är 5 timmar Skriv bara på en sida av pappret Skriv namn på varje papper Skriv läsligt, annars rättas inte tentamen Lycka till!
Uppgift 1
Uppgift 2 Se egna lösningar till seminarium 3. Uppgift 3 Följande funktionella beroenden råder: YZ PQ XYZ MNOPQ P Q Relationsschemat R är i 1 NF: R(XYZMNOPQ) /* XYZMNOPQ utgör kolumner i R */ a) Bestäm primärnyckel för tabellen R. b) Normalisera relationsschemat till, i tur och ordning, 2NF och 3NF. Kommentera varje steg, dvs ange vad som är skälet till att en nedbrytning gjorts från t ex 1NF till 2NF. Hoppa inte över några steg, dvs gör bara den dekomponering som behövs för att komma från 1NF till 2NF och sen (i nästa steg) det som behövs för nästa högre normalform osv. Lösningsförslag: (5 poäng) a) Primärnyckel är XYZ. b) Vi går över till 2NF pga att kolumnerna P och Q bara är beroende av en del av primärnyckeln, de är beroende av bara YZ. R1(XYZMNO) R2(YZPQ) Vi går sen över till 3NF pga att kolumnen Q i R2 är beroende av icke-nyckel attributet P. R1(XYZMNO) R2(YZP) R2(PQ)
Uppgift 4 Lösningsförslag: GATA(gatunamn, stadsnamn, landsnamn) STAD(stadsnamn, landsnamn, antal_invånare) LAND( landsnamn, minstad, mittland) Anm. Här kan man skippa främmande nyckel referensen till mittland om man vill. I_KRIG_MED(landsnamn1, landsnamn2) INVÅNARE(namn, gatunamn, stadsnamn, landsnamn) ARBETARE(namn, inkomst) KRIGARE(namn, stadsnamn, landsnamn) GATA.(stadsnamn, landsnamn) << STAD.(stadsnamn, landsnamn) STAD.landsnamn << LAND.landsnamn LAND. (minstad,mittland) << STAD.(stadsnamn, landsnamn) I_KRIG_MED.land1 << LAND.landsnamn I_KRIG_MED.land2 << LAND.landsnamn INVÅNARE.(gatunamn, stadsnamn, landsnamn) << GATA.(gatunamn, stadsnamn, landsnamn) KRIGARE.(stadsnamn, landsnamn) << STAD.(stadsnamn, landsnamn) KRIGARE.namn << INVÅNARE.Namn ARBETARE.namn << INVÅNARE.Namn Uppgift 5 GLASS Glassnamn Fetthalt Pris PERSON Personnummer Telefon Skostorlek GLASSÄTANDE Person Glass Formulera följande frågor i relationsalgebra och SQL (OBS båda delar!): a) Lista skostorlek och personnummer för de personer som har aldrig ätit glassen Päronsplit b) Vem (personnummer) har totalt lagt ner mest pengar på glass? SQL: a) SELECT Skostorlek, Personnummer FROM Person
WHERE Personnummer NOT IN (SELECT Person FROM Glassätande WHERE Glass = Päronsplit ) b) CREATE VIEW Summa AS SELECT Person, SUM(Pris) AS Total FROM Glassätande GÄ, Glass G WHERE GÄ.Glass = G.Glassnamn GROUP BY Person SELECT Personnummer FROM Person, Summa WHERE Person.Personnummer=Summa.Person AND Total = (SELECT MAX(Total) FROM Summa) Relationsalgebra: a) ÄTANDEKOPIA(Personnummer,Glass) GLASSÄTANDE Aldrig_ätit_Päron PI(Personnummer) (PERSON) DIFFERENS PI(Personnummer)(SIGMA(Glass= Päronsplit )(ÄTANDEKOPIA)) Resultat PI(Personnummer, Skostorlek) (PERSON JOIN Aldrig_ätit_Päron) PERSON.Personnummer=Aldrig_ätit_Päron.Personnummer b) Summa(Personummer, Total) Personnummer G SUM(Pris) (GLASSÄTANDE JOIN GLASS) GLASSÄTANDE.Glass= GLASS.Glassnamn Resultat PI(Personnummer) (Personnummer G MAX(Total) (Summa)) Anm. Notationen för aggregatfunktioner i relationsalgebra har inspirerats av Silberschatz. Uppgift 6 Konstruera följande två objekt: Ett funktionellt beroende A En relation (tabell) R A och R skall uppfylla följande två villkor:
R satisfierar inte A Varje äkta delmängd av R satisfierar A Tips: En relation R satisfierar ett funktionellt beroende A: X Y, om och endast om För varje par av tupler i R, t1 och t2 gäller att: t1[x]=t2[x] t1[y] = t2[y] (sista pilen är en materiell implikation, dvs om t1 och t2 har samma värde för X-kolumnen så måste de också ha samma värde för Y-kolumnen) Ett lösningsförslag : R(a b c d) x x y z x x y m A: a d R bryter mot det funktionella beroendet A (attributet a har samma värde (x) för båda tuplerna men två olika värden på attributet d : z respektive m). Nåväl, vi bildar samtliga äkta delmängder av R: det blir tre stycken: {xxyz}, {xxym} och {}. Ingen av dessa bryter mot A.