Ö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.






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:

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?