Databasteknik: Hemtentamen 2020-08-24

Det här är hemtentan som går måndag 24 augusti 2020 i kursen DT504G Databasteknik för civilingenjörer vid Örebro universitet, provkod A001. Ansvarig lärare är Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), telefon 070-73 47 013.

Tid: 08:15 - 13:15

Instruktioner

  1. Den här hemtentan ersätter den planerade salstentan, och är endast för de studenter som anmält sig till den tentan.
  2. Uppgifterna ska lösas enskilt, dvs inga grupper av två eller flera studenter.
  3. Du får använda dator, böcker och vilka andra hjälpmedel som helst, men du får inte samarbeta eller fråga någon (utom mig). Exempelvis är det tillåtet att söka och läsa på webbplatser som Stack Overflow, men inte att ställa egna frågor. Du kan alltså provköra kommandon och program, om du vill.
  4. Diskutera inte uppgifterna eller dela med dig av svar förrän tidigast dagen efter tentan.
  5. Lös de angivna uppgifterna och samla svaren på lämpligt sätt, till exempel i en PDF. Skicka sen in lösningarna till mig i Blackboard. Välj Kursmaterial i menyn till vänster på kursens Blackboard-sida, gå in i mappen Hemtentamen, och välj den rätta tentan. Där kan man sedan välja att skicka in sin lösning. Då blir bedömningen anonym. Glöm inte att klicka på knappen Skicka längst ner till höger.
  6. Om det skulle bli problem med Blackboard, kan man i nödfall skicka in svaren antingen som ett kursmeddelande i Blackboard eller via vanlig e-post (thomas.padron-mccarthy@oru.se), senast vid tentatidens slut. Då blir bedömningen inte anonym.
  7. I Blackboard ser du att du skickat in din lösning. Om du i stället skickade in med e-post, och inte senast en timme efter tentatidens slut fått ett svar från mig med en bekräftelse på att du skickat in svaren, bör du kontakta mig, enklast genom att ringa eller SMS:a mig (ifall det är e-posten som inte fungerar). Tänk på att en del mailtjänster (särskilt Microsoft-tjänster som Hotmail.com, Outlook.com och Live.com) ibland kastar bort brev med bilagor, utan att meddela det.
  8. Skriv gärna svaren i ett ordbehandlingsprogram. Rita gärna eventuella diagram i ett ritprogram. Det är inte förbjudet att skriva och rita för hand, men då måste text och bilder scannas in eller fotograferas. Det finnas scanner-appar till Android och iPhone, till exempel Adobe Scan, som ger bättre resultat än att bara ta vanliga kort med kameran.
  9. Tentatiden är utökad med en extra timme för att täcka in problem med e-post, inscanning eller fotografering av diagram, och liknande.
  10. Om du behöver fråga något, så kontakta gärna mig. Ring eller skicka SMS, för jag kanske inte kommer att sitta vid datorn hela tiden.
  11. Oklara och tvetydiga formuleringar kommer att misstolkas. Lösningar som inte går att läsa eller förstå kan naturligtvis inte ge några poäng.
  12. Antaganden utöver de som står i uppgifterna måste anges. Gjorda antaganden får inte förändra den givna uppgiften.
  13. 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.
  14. Maximal poäng är 42. För godkänt betyg krävs minst 25 poäng, varav minst fyra poäng på uppgift 1 och minst fem poäng på uppgift 2.
  15. Resultat meddelas senast 15 arbetsdagar efter tentamensdatum. Eftersom svaren skickas in elektroniskt scannas tentorna inte för retur.

Scenario till uppgifterna

Spandic

Den spanska hotellkedjan Spandic Hotels är ett hotellföretag med hundratals hotell i flera olika länder i Europa.

Nu behöver Spandic bygga en databas för sina hotell och kunder. Det som ska lagras i databasen är följande:

  1. Hotell. Varje hotell har ett unikt namn, till exempel Spandic Örebro Väst, en adress, ett telefonnummer och ligger i ett visst land.
  2. Rum som finns i hotellen. Varje rum hör förstås till ett visst hotell, det har en storlek (i kvadratmeter), och man måste också kunna ange hur många sängplatser det finns i rummet. Dessutom finns ett pris per övernattning för rummet. (Man betalar per rum, inte per gäst som bor där.) Rummen har ett nummer som är unikt inom hotellet, men inte nödvändigtvis inom hela hotellkedjan.
  3. Gäster som bokar rummen. Varje gäst har ett unikt kundnummer, ett namn, en adress och en nationalitet.
  4. Bokningar. Gästerna bokar övernattningar i rummen. En bokning är att en eller flera gäster bor i ett rum en eller flera övernattningar, med ett ankomstdatum och ett avresedatum.

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 4 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 (7 p)

Implementera den beskrivna databasen i relationsmodellen, dvs översätt ER-diagrammet till tabeller. Implementationen ska vara bra.

a) Visa en tydlig översikt över dina tabeller. Ange vilka relationer som finns och vilka attribut varje relation innehåller, med väl valda exempeldata. Ange också alla kandidatnycklar, vilken av dessa som är primärnyckel, samt vilka referensattribut som finns och vad de refererar till.

b) Skriv de SQL-kommandon som behövs för att skapa tabellerna, med lämpliga integritetsvillkor.

Uppgift 3 (2 p)

Databasen är nu tom. Skriv de INSERT-kommandon som behövs för att lägga in att kund nummer 4711, Ole OlesenEkveijen 2, Oslo, som är norsk, har bokat rum nummer 101 på hotellet Spandic Laxå med ankomst idag 2020-08-24 och avresedag i morgon 2020-08-25. (Man behöver lägga in hotellet, rummet med mera. Hitta själv på de data som inte är givna i uppgiften men som behövs för att raderna ska gå att lägga in.)

Uppgift 4 (11 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) (2p) Vad heter den eller de gäster som kommer till rum nummer 217 på hotellet Spandic Laxå idag?

b) (2p) Hur många rum finns på hotellet Spandic Laxå?

c) (2p) Jag (Thomas Padron-McCarthy) ska sova över på ett hotell i natt, alltså med ankomstdag idag 2020-08-24, men jag har glömt vilket hotell det var jag bokade. Vad heter hotellet som jag bokat?

d) (2p) Jag har hittat en nyckel som det står Spandic Hotels på, och rumsnumret 237. Jag vill lämna tillbaka den, och vill veta vilka telefonnummer jag ska ringa. Jag behöver alltså telefonnumren till alla de hotell som har ett rum med det numret.

e) (3p) Vad heter den tysk som har gjort flest bokningar på hotell i Finland?

Uppgift 5 (3 p)

Går det att i din databas från uppgift 1 och 2 att få fram alla lediga rum under resten av året? Man vill alltså ha ett svar som till exempel säger att rum 17 är ledigt mellan 12 och 13 september, och rum 18 är ledigt mellan 9 och 10 december, och även mellan 10 och 11 december. Förklara i så fall hur! Om det inte går, förklara hur man skulle kunna komplettera databasen så det går.

Uppgift 6 (4 p)

a) Visa med tydliga exempel hur rollback och commit i SQL fungerar.

b) Visa med ett tydligt exempel hur isolering mellan transaktioner fungerar.

Uppgift 7 (3 p)

B-träd är en lagringsstruktur som ofta används för att skapa index i databaser.

a) Visa hur ett B-träd fungerar!

b) Varför är B-träd lämpliga i databaser?

Uppgift 8 (7 p)

Förklara kort vad följande termer från databasområdet betyder! Skriv helst inte mer än några få meningar om varje term.

a) Trigger
b) Cursor
c) Relation
d) DBA
e) DBMS
f) Frågeoptimering
g) Surrogatnyckel


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 23 juni 2020