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






Tentamen i

Databasteknik

onsdag 3 januari 2024

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




Hjälpmedel: Ordbok för översättning.
Poängkrav: Maximal poäng är 35. För godkänt betyg krävs 20 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

Universitetet behöver ett nytt system för att schemalägga tentor. Vi ska förstås lagra kurserna, lokalerna och tentorna i en databas.

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 (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) Det finns flera olika kurser som heter något med databas, till exempel en kurs som heter Databasteknik för civilingenjörer, en annan kurs som heter Datateknik, Databaser, avancerad nivå, och en tredje kurs som heter Informatik, Databashantering med SQL Server, fortsättningskurs. Vilka kurskoder har de kurser som heter något med databas?

b) (2p) I vilka kurser går det tentor idag, 2024-01-03? Vi vill veta de kursernas namn och kurskoder.

c) (2p) I vilka kurser går det tentor idag, 2024-01-03, i salen T143? Vi vill veta de kursernas namn och kurskoder.

d) (2p) Skapa en vy som anger hur många som sammanlagt är anmälda per dag.

e) (2p) Kan man, med den databas som du skapat i uppgifterna ovan, få med dagar när inga tentor är inbokade, så det syns i vyn att de dagarna är det noll anmälda? Förklara!

f) (1p) Använd vyn för att få fram vilket datum som det var flest anmälda.

Uppgift 4 (3 p)

När vi söker i databasen med SQL-frågor och vill hämta data från flera tabeller, måste vi koppla ihop dem med ett villkor som vi skriver i frågan. Vad är det då för mening med att också ange främmande nycklar med foreign key och references när man skapar tabellerna?

Uppgift 5 (4 p)

Efter att ha varit igång några år innehåller databasen så mycket data att frågorna börjar gå långsamt. Alla tabellerna innehåller många rader. Särskilt är det frågan i deluppgift 3c, om vilka kurser som har tentor en viss dag i en viss sal (men kanske inte just 2024-01-03 och T143), som ställs ofta, och som måste bli 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 just den här sökningen 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 (3 p)

Det står ju i uppgift 2 att "implementationen ska vara bra". Därför kommer förmodligen alla de tabeller du skapade att uppfylla BCNF. Välj en av dina tabeller, och visa att den uppfyller BCNF!

Uppgift 7 (4 p)

a) Förklara hur SQL-kommandona start transaction, commit och rollback fungerar.

b) Vad händer om man inte ger något av kommandona, och gör ändringar i databasen ändå?