Örebro universitet
Institutionen för naturvetenskap och teknik
Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se)






Tentamen i

Databasteknik

tisdag 22 augusti 2023

Gäller som tentamen för:
DT504G Databasteknik för civilingenjörer, provkod A001




Hjälpmedel: Ordbok för översättning. Miniräknare. (Miniräknaren behövs inte för denna tentamen, men finns med som hjälpmedel av logistiska skäl.)
Poängkrav: Maximal poäng är 40. För godkänt betyg krävs 23 poäng, varav minst fyra poäng på uppgift 1 och minst fem poäng på uppgift 2.
Resultat: Meddelas senast 15 arbetsdagar efter tentamensdatum.
Återlämning av tentor: Elektroniskt via webbportalen Studenttjänster.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.




LYCKA TILL!

Scenario till uppgifterna

I Sörbybacken, som ligger nära universitetet, finns en lång trappa som man kan springa uppför för att träna sin kondition. Här är ett foto taget från Sörbybacken 15 april 2022:

Utsikt från Sörbybacken

Vi ska skapa en databas för att hålla reda på våra träningspass i Sörbybacken.

Mer bestämt ska databasen innehålla:

Uppgift 1 (5 p)

Rita ett ER- eller EER-diagram för den beskrivna databasen. Använd informationen i scenariot ovan, men tänk också på att det ska gå att svara på frågorna i uppgifterna nedan.

ER- och EER-diagram kan ritas på flera olika sätt. Om du använder en annan notation än kursboken, måste du förklara den notation som du använder.

Uppgift 2 (6 p)

Implementera den beskrivna databasen i relationsmodellen, dvs översätt ER-diagrammet till tabeller.

Du behöver inte skriva create table-kommandon i SQL, men du ska ange vilka relationer som finns och vilka attribut varje relation innehåller. Ange också alla kandidatnycklar, vilken av dessa som är primärnyckel, samt vilka referensattribut som finns och vad de refererar till.

Implementationen ska vara bra.

Uppgift 3 (4 p)

a) Mycket i kursen handlar om relationsmodellen och relationsdatabaser. Vad är det som är "relationerna" i en relationsdatabas?

b) Vad menas med de tre termerna relationsdatabas, relationsmodellen och relationsschema?

Uppgift 4 (10 p)

Formulera följande frågor i SQL. Definiera gärna vyer eller CTE:er om det underlättar, men skapa inte nya tabeller.

a) (1p) Bodil har e-postadressen bodil@b.se. Vad är hennes telefonnummer?

b) (2p) Jag (Thomas Padron-McCarthy) sprang ett enda varv i Sörbybacken igår (2023-08-21). Vad var starttiden och sluttiden för det varvet?

c) (2p) Hur många varv sprangs det totalt 2022-08-21?

d) (3p) Vad heter den person som sprungit flest varv?

e) (2p) Om det finns något träningspass där ingen sprungit några varv har det förmodligen blivit fel i databasen. Skriv en SQL-fråga som tar fram nummer och datum på alla träningspass som det inte hör några varv till! Om den databas du konstruerade i uppgifterna ovan inte kan lagra träningspass utan varv, förklara i stället varför det inte går!

Uppgift 5 (3 p)

EFter att ha varit igång några år innehåller databasen så mycket data att frågorna börjar gå långsamt. Särskilt är det frågan i deluppgift 4a, om starttid och sluttid för de varv som en viss person sprang ett visst datum (men inte nödvändigtvis just Thomas Padron-McCarthy och 2023-08-21) som vi vill ska gå snabbare.

a) Det visar sig att det inte finns några index alls i databasen, inte ens på nycklar. Vilka index bör man skapa för att sökningen i deluppgift 4a ska gå snabbare?

b) Ge exempel på något index som inte skulle få denna sökning att gå snabbare, och förklara varför det indexet inte skulle hjälpa.

Uppgift 6 (4 p)

Vi skapar lämpliga index för alla frågorna, men efter ytterligare några år innehåller databasen så oerhört mycket data att frågorna går långsamt i alla fall. Särskilt är det frågan i deluppgift 4d, om vilken person som sprungit flest varv, som går långsamt.

a) Varför blir just den frågan så långsam, trots indexen?

b) Om det nu inte hjälper att skapa index (och vi har redan köpt den snabbaste dator, och den snabbaste databashanterare, som vi har råd med), hur kan man få frågan att gå snabbare? Du behöver inte skriva kod, men beskriv principerna.

Uppgift 7 (3 p)

Databashanteraren vi använder erbjuder ACID-transaktioner. Vi installerar en ny version av databashanteraren, och det visar sig att i den nya versionen måste man betala extra licensavgifter för att få ACID-egenskaperna. Ekonomiavdelningen vill att vi motiverar den nya kostnaden. Varför vill vi ha ACID-egenskaperna?

Uppgift 8 (5 p)

En student, som kanske inte följt med så uppmärksamt i kursen, lämnar in följande tabell som lösning på uppgift 2, där man skulle skapa en databas:

Träning
Person Namn Telefon Epostadress Lösenord Träningspass Datum Varv Starttid Sluttid
1 Anna 1234 anna@a.com banan 1 2022-04-15 1 10:59:23 11:03:23
2 Bodil 1234 bodil@b.se banan 1 2022-04-15 2 10:59:23 11:04:23
2 Bodil 1234 bodil@b.se banan 2 2023-08-21 4 10:59:23 11:04:23
2 Bodil 1234 bodil@b.se banan 2 2023-08-21 5 11:59:23 12:04:22
3 Bodil 019-5678 bodil@c.se banan 1 2022-04-15 3 10:59:23 11:04:24
3 Bodil 019-5678 bodil@c.se banan 3 2023-08-21 6 10:59:23 11:04:24
3 Bodil 019-5678 bodil@c.se banan 3 2023-08-21 7 11:59:23 12:04:23
3 Bodil 019-5678 bodil@c.se banan 3 2023-08-21 8 12:59:23 13:04:22
3 Bodil 019-5678 bodil@c.se banan 3 2023-08-21 9 13:59:23 14:04:21
3 Bodil 019-5678 bodil@c.se banan 3 2023-08-21 10 14:59:23 15:04:20
4 Thomas 070-1234 tpy@oru.se banan 4 2023-08-21 11 20:01:02 21:05:49

a) Vilka kandidatnycklar finns i tabellen?

b) Ange tre olika fullständiga funktionella beroenden som finns i tabellen!

c) Vilken är den högsta normalform, av 1NF, 2NF, 3NF och BCNF, som tabellen uppfyller? Motivera svaret, särskilt varför tabellen inte uppfyller närmast högre normalform.

d) Det står i uppgift 2 att implementationen ska vara bra. Är detta en bra implementation? Motivera svaret!