Ö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.
|
-
Skriv tydligt och klart. Lösningar som inte går att läsa kan
naturligtvis inte ge några poäng.
Oklara och tvetydiga formuleringar kommer att misstolkas.
-
Skriv den personliga tentamenskoden på varje inlämnat blad.
Skriv inte namn eller personnummer på bladen.
-
Skriv bara på en sida av papperet.
Använd inte röd skrift.
-
Antaganden utöver de som står i uppgifterna måste anges. Gjorda
antaganden får inte förändra den givna uppgiften.
-
Skriv gärna förklaringar om hur du tänkt.
Även ett svar som är fel kan ge poäng,
om det finns med en förklaring som visar att huvudtankarna var rätt.
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:
-
Kurser.
Varje kurs har en unik kurskod,
till exempel DT504G,
och ett namn,
till exempel Databasteknik för civilingenjörer.
Det är inte säkert att namnet är unikt.
-
Varje kurs har ett antal examinationsmoment,
som vi tänker oss alla består av skriftliga salstentor.
Varje examinationsmoment har en provkod,
som kan vara till exempel A001,
och som är unik inom den kursen.
-
Examinationstillfällen,
som är när examinationsmomenten ges.
Varje tillfälle gäller ett visst examinationsmoment,
och ges ett visst datum.
Till exempel kan examinationsmomentet A001
i kursen DT504G ha ett examinationstillfälle 2023-08-22
och ett annat 2024-01-03.
Man ger inte flera examinationstillfällen samma dag för samma examinationsmoment.
Varje examinationstillfälle har också ett antal anmälda.
-
Salar, som var och en har ett unikt namn,
till exempel T143,
och ett antal platser,
till exempel 81.
-
Examinationstillfällena är i salarna.
Om det är en examination med många anmälda kan samma tillfälle vara schemalagt i flera olika salar.
Om det i stället är få anmälda, kan flera tillfällen vara schemalagda i samma sal.
Vi tänker oss att i varje sal har man bara ett enda examinationstillfälle per dag,
och att det håller på hela dagen.
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å?