Örebro universitet
Institutionen för naturvetenskap och teknik
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se)
Tentamen i
Databasteknik
måndag 2 januari 2023
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 40.
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
Presidenten i landet Rusk-Land
har startat ett krig mot ett grannland.
Kriget går dåligt, så presidenten bestämmer
sig för att mobilisera fler soldater,
dvs kalla in dem till krigstjänst vare sig de vill eller inte.
De mobiliserade soldaterna ska förstås få vapen,
men det har gått så dåligt i kriget att gevären och kanonerna börjar ta slut.
Därför måste man använda alternativa vapen som stenar och pinnar,
och ibland måste flera soldater dela på samma vapen.
En del av vapnen är så dåliga att samma soldat måste ha flera stycken.
Soldaterna vill inte åka och kriga,
och därför upprättar presidenten ett antal mobiliseringskontor.
Varje sådant kontor ska ansvara för ett antal soldater,
och att de verkligen åker till kriget.
Soldaterna skickar också klagomål till presidenten, som måste lagras.
Presidenten behöver förstås en databas,
och där vill han lagra:
-
Mobiliseringskontor.
Varje mobiliseringskontor har ett unikt nummer,
ligger i en viss stad,
har en adress i den staden,
och ett telefonnummer.
-
Soldater.
Varje soldat har ett unikt nummer,
ett namn och en ålder,
och hör till ett av mobiliseringskontoren.
-
Klagomål.
Varje klagomål hör till en viss soldat,
skickades en viss dag,
och vi ska lagra en kort sammanfattning om vad klagomålet handlade om,
till exempel "ingen mat" eller "rostiga vapen".
Själva texten i klagomålet behöver inte lagras.
-
Vapen.
Varje vapen har ett unikt nummer,
och en kort beskrivning som anger vad det är,
till exempel pinne eller sten.
-
Vilken soldat som har fått vilket vapen.
Som nämnts ovan kan en del soldater ha flera vapen,
och flera soldater kan behöva dela på samma vapen.
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 (3 p)
Databasen är nu tom.
Skriv de insert-kommandon som behövs för att lägga in soldat nummer 1,
som heter Ivan, är 75 år gammal, och som är beväpnad med en pinne.
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)
Vad är namnen på de soldater som minst 80 år gamla?
b) (2p)
Vad heter den äldsta soldaten?
c) (2p)
Hur många soldater är beväpnade med en pinne?
(De kan ha fler vapen, bara de har minst en pinne.)
d) (3p)
Vilken soldat är beväpnad med flest pinnar?
Vi vill veta den soldatens nummer och namn.
e) (2p)
Missnöjda soldater bränner ner
alla mobiliseringskontor som ligger i staden
Volgostad.
Skriv det eller de SQL-kommandon som tar bort de kontoren ur databasen!
(Vi kan behöva uppdatera flera tabeller för att det ska fungera.)
Uppgift 5 (4 p)
Det finns miljoner soldater, vapen och klagomål,
och många tusen mobiliseringskontor.
Sökningarna i delfrågorna a, b och c i uppgiften ovan körs ofta,
men kanske med andra konstanter.
Frågorna tar för lång tid att köra.
Vi ser att det inte finns några index i databasen, inte ens på nycklar.
a) Vilka index bör man skapa för att dessa sökningar ska bli snabbare?
b) Ge ett exempel på ett index som inte skulle få någon av dessa sökningar att gå snabbare,
och förklara varför det indexet inte hjälper.
Uppgift 6 (3 p)
ACID-transaktioner kan vara viktiga när man arbetar med databaser.
Välj någon av de fyra egenskaperna
och visa hur det skulle kunna uppstå problem i mobiliseringsdatabasen
om egenskapen saknades.
Ge specifika exempel utgående från scenariot.
Uppgift 7 (3 p)
Vad skulle de olika nivåerna i tre-schema-arkitekturen kunna innehålla
i mobiliseringsdatabasen?
Skriv inte bara vad nivåerna normalt innehåller,
utan ge specifika exempel utgående från scenariot.
Uppgift 8 (3 p)
Vi har en tabell med en miljard rader, som vi ska indexera med ett träd.
Om vi antar att vi har ett balanserat binärt träd,
kan vi räkna med att det blir ungefär trettio nivåer djupt,
eftersom 2log(1000000000) ≈ 30.
a) Hur djupt blir trädet om vi i stället använder ett B-träd?
(Gör rimliga antaganden och redovisa dem.)
b) Varför är B-träd så bra just för databaser?
Uppgift 9 (3 p)
Här är en tabell,
men vi har spillt kaffe på den,
så tre av värdena i tabellen har suddats ut
och lämnat tomma rutor:
Data |
A | B | C | D | E |
1 | 7 | 10 | 6 | 4 |
2 | 8 | 3 | 6 | 5 |
4 | 7 | | 6 | |
3 | 10 | 4 | 6 | 7 |
17 | | 10 | 6 | 8 |
Vi vet att det finns två fullständiga funktionella beroenden
i tabellen, nämligen
B → C
och
{B, D} → E.
Kan vi avgöra vad det stod i de tomma rutorna innan vi spillde kaffe på dem?