Försättsblad Tentamen Databasteknik 2003 04 29, 8.00 13.00 Inga hjälpmedel. Bedömning (preliminär): uppgifterna ger maximalt 14 + 11 + 11 + 6 + 4 + 4 = 50 poäng. För godkänt krävs 25 poäng (3/25, 4/33, 5/42 respektive G/25, VG/38). Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 1 / 10
Uppgift 1 (1) Vid en universitetsinstitution är det studierektorns uppgift att planera undervisningen. Till exempel ska han eller hon bestämma vilka lärare som ska undervisa på vilka kurser. Med undervisa avser vi här föreläsningar och kursansvar, och vi förutsätter att det bara är en lärare som är ansvarig för varje kurs. Studierektorn behöver för detta ändamål en databas med uppgifter om institutionens kurser och lärare. Kurser har kurskod och namn, till exempel EDA215/Databaser. En kurs ges i en bestämd läsperiod. En del kurser sträcker sig över två läsperioder under samma läsår. Läsperioderna numreras 1, 2, 3, 4 och har ett start- och ett slutdatum. Vid den aktuella institutionen finns det inte några kurser som ges flera gånger per läsår. Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 2 / 10
Uppgift 1 (2) Lärarna har personnummer och namn. De flesta lärarna kan bara undervisa på ett begränsat urval av institutionens kurser. Dessutom kan det vara så att en lärare inte kan undervisa under någon eller några läsperioder, eftersom han eller hon ska ha tid att ägna sig åt forskning. När planeringen är klar ska det i databasen finnas uppgifter om vilken lärare som undervisar på varje kurs. Studierektorn ska ur databasen kunna få svar på frågor av typen vilka kurser kan en lärare hålla?, vilka kurser ges under en viss läsperiod?, vilka lärare håller en kurs under en viss läsperiod?, osv. a) Utveckla en ER-modell som beskriver databasen. b) Omvandla ER-modellen till en relationsmodell. Samtliga relationer ska vara i BCNF (visa, eller motivera åtminstone ordentligt, att så är fallet). Ange primärnycklar och främmande nycklar för alla relationer. c) Utgående från dina relationer i uppgift b, skriv i SQL en sats som ger kurskoderna för de kurser som går över två läsperioder Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 3 / 10
Uppgift 2 (1) Eurovision Song Contest ( melodifestivalen ) är en årligen återkommande tävling där Europas bästa sång utses. En databas med uppgifter om tävlingen har följande relationer: Countries(name) Participants(name) Tasks(task) Years(year, day, city, country) Songs(title, country, year, startno, place, points) Participations(year, startno, name, task) alla länder som någonsin deltagit alla personer som någonsin deltagit i någon funktion alla funktioner: singer, composer, etc alla år som tävlingen har givits samt när och var alla sånger som deltagit, med uppgifter om startnummer, placering, poäng och land alla personer som medverkat i någon funktion i någon sång Primärnycklarna är understrukna, främmande nycklar är kursiva. Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 4 / 10
Uppgift 2 (2) Skriv SQL-satser för följande uppgifter (det är tillåtet att definiera och använda vyer): a) Skapa tabellerna Songs och Participations. Hitta på lämpliga typer för attributen och ange rimliga integritetsvillkor. b) Skriv ut antalet sånger som deltog år 2001. c) Skriv ut titel, land och år för alla sånger som har vunnit (place lika med 1). d) Skriv ut namnen på alla sångare som har vunnit (task = singer ). e) Skriv ut alla länder som någonsin deltagit samt deras bästa placering. Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 5 / 10
Uppgift 3 I relationen R(A, B, C, D) gäller följande funktionella beroenden: FD1. FD2. FD3. AC B B D D A a) Vilka nycklar finns i relationen? b) Visa att relationen inte är i BCNF. c) Dela upp relationen i mindre relationer som är i BCNF och visa att de resulterande relationerna är i BCNF. Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 6 / 10
Uppgift 4 Ett stort företag har flera avdelningar. Vid varje avdelning arbetar ett antal anställda, och varje avdelning har ett antal registrerade kunder. En anställd kan arbeta på mer än en avdelning, och en kund kan också vara registrerad hos mer än en avdelning. Denna information har man samlat i en relation: BranchData(branchName, staffname, customername) a) Visa att relationen är i BCNF. b) Trots att relationen är i BCNF kan det finnas redundans i relationen. Ge exempel på en instans av relationen som innehåller redundans. c) Vad beror denna redundans på? Hur kommer man tillrätta med den? Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 7 / 10
Uppgift 5 En tidtabelldatabas för flyglinjer innehåller bland annat en relation med följande utseende: Flight(flightNbr, from, to) Relationen uttrycker att flygturen med nummer flightnbr går från staden from till staden to. Ur databasen kan man alltså utan svårighet få svar på frågor av typen Kan jag flyga direkt från Köpenhamn till New York? Man vill också kunna få svar på frågor av typen Kan jag flyga från Umeå till Boston? Om det inte går direkt, via vilka andra städer ska jag flyga? Kan man få svar på frågor av den senare typen med hjälp av vanliga SQL-satser? Om man kan det, hur skriver man? Om man inte kan det, vad kan man utnyttja i stället och hur skriver man? (I dina svar behöver du inte skriva korrekt kod, bara antyda hur man gör.) Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 8 / 10
Uppgift 6 (1) En databashanterare ska utföra en natural join mellan relationerna R(X,Y) och S(Y,Z). Relationerna är så stora att man inte kan lagra någon av dem i primärminnet. Följande algoritm utför uppgiften (operationen reset ser till att nästa inläsning sker från början av relationen, eof ger true om alla tupler har lästs, read läser en tupel): R.reset(); while (! R.eof()) { r = R.read(); S.reset(); while (! S.eof()) { s = S.read(); if (r.y == s.y) { output(r.x, r.y, s.z); } } } Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 9 / 10
Uppgift 6 (2) Detta är dock en mycket ineffektiv metod, eftersom antalet diskaccesser är lika med R.size() * S.size(). a) Beskriv en bättre algoritm. Förutsätt att varken R eller S har några index. Du behöver inte beskriva algoritmen på så detaljerad nivå som i ovanstående beskrivning, det räcker att du gör huvuddragen i algoritmen klara. b) Beskriv hur algoritmen i uppgift a kan förbättras om både R och S har ett B-trädsindex på attributet Y. Per Holm (Per.Holm@cs.lth.se) Databasteknik, extenta 2007/08 10 / 10