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





Tentamen i

Databasteknik
för D1 m fl

tisdag 9 januari 2018

Gäller som tentamen för:
DT105G Databasteknik, provkod 0100


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. För den som följt kursen hösten 2017 ger varje i tid inlämnad inlämningsuppgift en extra poäng. Den som inte gått kursen hösten 2017 får dessa (fem) extrapoäng ändå.
Resultat: Meddelas på kursens hemsida eller via e-post senast tisdag 30 januari 2018.
Återlämning av tentor: Elektroniskt via Studentforum.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.



LYCKA TILL!

Scenario till uppgifterna

Posten (eller PostNord, som de heter numera) distribuerar flera miljoner paket inför julen. Avdelningen för paketförmedling har förstås en databas för att hålla reda på paketen, men i år var det så många paket att databasen blev utsliten. Nu behöver de en ny databas.

Det man behöver hålla reda på är, mer detaljerat, följande saker:

  1. Postombuden, som vart och ett har ett unikt nummer (till exempel 4711) och ett unikt namn (till exempel Tobbes Tobak).
  2. Platser där paketen kan befinna sig. Detta är dels postombuden, dels olika sorterings- och lagringsenheter. Varje plats har ett unikt nummer och ett unikt namn.
  3. Paketen. Varje paket har ett unikt nummer, en vikt, och en avsändar- och mottagaradress.
  4. Det postombud som varje paketet avsänts från, och vid vilken tid. (Vi antar att alla paket skickas från postombud.)
  5. Det postombud som varje paketet ska till. (Vi antar att alla paket ska till postombud.)
  6. Var varje paket är nu. Det kan vara på en av platserna, eller så har det lämnat en plats och ännu inte kommit fram till nästa. I det senare fallet vet vi inte riktigt var det är, utan det kan finnas på en lastbil eller i en tågvagn var som helst.
  7. En historik som för varje paket visar vilka platser det varit på, och när det anlände till respektive avsändes från varje plats.

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 uppgift 3 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 om det underlättar, men skapa inte nya tabeller.

a) (2p) Var är mitt paket?!! Jag heter Thomas Padron-McCarthy, och nej, jag kan inte numret på paketet.

b) (2p) Vad är paketnumren på de paket som redan kommit fram till sitt destinationspostombud?

c) (2p) Vad är paketnumren på de paket som inte kommit fram till sitt destinationspostombud?

d) (2p) Alla paket skickas via Svenska Centrala Paketsorteringsenheten, som av arbetsmarknadsskäl placerats i Övre Soppero. Hur många paket befinner sig just nu på den platsen?

e) (2p) Vad väger det paket som varit på flest platser?

Uppgift 4 (4 p)

Sökningen i uppgift 3a ovan, om var mitt paket är, körs väldigt ofta, men kanske med andra konstanter, till exempel att man söker efter paket som ska till Ali Abdul Khaliq i stället för till Thomas Padron-McCarthy. Den tar för lång tid att köra, och vi vill skapa index för att snabba upp den. Från början finns det inga index alls i databasen, inte ens på primärnycklar.

a) Ange vilka index man bör skapa för att den frågan ska gå snabbare att köra.

b) Ange ett index som inte skulle göra den frågan snabbare, och förklara varför det inte förbättrar tiden.

Uppgift 5 (5 p)

Vad är skillnaden mellan:

a) COMMIT och ROLLBACK

b) WHERE och HAVING

c) UPDATE och ALTER TABLE

d) ett index och en primärnyckel

e) en tabell och en relation

Uppgift 6 (5 p)

En person, som aldrig fått förmånen att lära sig om normalformer, försöker skapa tabeller för scenariot. Här är en av tabellerna, som ska visa historiken för vilka platser paketen varit på:

Pakethistorik
Paketnummer Platsnummer Vikt Ankom Lämnade
1 1 14,2 2017-12-22 08:13:10 2017-12-22 14:22:06
1 3 14,2 2017-12-23 01:10:55 2017-12-23 06:13:04
1 5 14,2 2017-12-23 17:01:26 null
2 5 0,9 2017-12-02 14:22:01 null

Paket nummer 1 har varit på plats 1, 3 och 5, och ligger fortfarande kvar på plats 5. Paket nummer 2 har bara varit på plats 5, och ligger fortfarande kvar där.

a) Vilka kandidatnycklar finns i tabellen?

b) Vilka fullständiga funktionella beroenden finns i tabellen?

c) Vilken är den högsta normalform, av 1NF, 2NF, 3NF och BCNF, eller ingen av dessa, som tabellen uppfyller?

d) Varför uppfyller tabellen inte den närmast högre normalformen?

e) Beskriv något problem som finns i den här tabellen, och som man skulle slippa med en högre normalform.