Databasteknik: Hemtentamen 2020-03-19

Det här är hemtentan som går torsdag 19 mars 2020 i kursen Databasteknik. Ansvarig lärare är Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), telefon 070-73 47 013.

Tid: 14:15 - 20: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. 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, antingen som ett kursmeddelande i Blackboard eller via vanlig e-post (thomas.padron-mccarthy@oru.se), senast vid tentatidens slut.
  4. Om du inte senast under dagen efter tentan får 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 Hotmail.com, Outlook.com, Live.com) ibland kastar bort brev med bilagor, utan att meddela det.
  5. 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 ska finnas scanner-appar till Android och iPhone, och de ska ge bättre resultat än att bara ta vanliga kort med kameran.
  6. Tentatiden är utökad med två timmar för att täcka in problem med e-post, inscanning eller fotografering av diagram, och liknande.
  7. 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 dina SQL-kommandon, om du vill.
  8. 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.
  9. 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.
  10. Antaganden utöver de som står i uppgifterna måste anges. Gjorda antaganden får inte förändra den givna uppgiften.
  11. 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.
  12. Maximal poäng är 36. För godkänt betyg krävs 20 poäng, varav minst fyra poäng på uppgift 1 och minst fyra poäng på uppgift 2.
  13. Resultat meddelas på kursens hemsida eller via e-post senast torsdag 9 april 2020. Eftersom svaren skickas in elektroniskt scannas tentorna inte för retur.

Scenario till uppgifterna

Just nu är det aktuellt med smittsamma sjukdomar, och vi ska skapa en databas för att underlätta smittspårning.

Det som ska lagras i databasen är följande:

  1. Sjukdomar. Varje sjukdom har ett unikt namn.
  2. Patienter. Varje patient har ett unikt nummer och ett namn, som inte behöver vara unikt, och dessutom en hemadress.
  3. Vilka patienter som har vilka sjukdomar. Till exempel kanske patienten Olle har pest, medan patienten Lisa har både pest och kolera.
  4. Evenemang, där många människor träffas och kan smitta varandra. Varje evenemang har ett namn (som inte behöver vara unikt) och ett datum (som inte heller behöver vara unikt), men det kan inte finnas två evenemang med samma namn och datum.
  5. Vilka patienter som har besökt vilka evenemang. Till exempel kanske patienten Olle besökte Universitetsdagarna 4 mars medan patienten Lisa besökt både Universitetsdagarna 4 mars och Melodifestivalen 7 mars.

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 (5 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 (12 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) Vilka patienter har kolera? Vi vill veta deras namn och nummer.

b) (2p) Hur många patienter besökte Universitetsdagarna 4 mars i år? Vi vill veta antalet.

c) (2p) Vilka av dessa patienter (alltså de som besökte Universitetsdagarna 4 mars) har COVID-19? Vi vill veta deras namn och nummer.

d) (3p) Vilka patienter har ännu inte sjukdomen COVID-19, men bor på samma hemadress som någon som har den sjukdomen? Vi vill veta deras namn och nummer.

e) (3p) Vi vill ha en sammanställning över alla sjukdomarna, och hur många patienter som har varje sjukdom. Sjukdomar som ingen har ska ändå vara med i resultatet, med antalet noll.

Uppgift 4 (4 p)

Fler och fler människor blir smittade, nya sjukdomar upptäcks, och databasen växer. Efter några år har alla tabellerna väldigt många rader. Det finns inga index i databasen, inte ens på nycklar.

Sökningarna i deluppgift a och b i frågan ovan körs ofta, men kanske med andra konstanter (till exempel att man söker efter pest i stället för kolera). De tar för lång tid att köra. Hur skulle man kunna få de sökningarna att gå snabbare att köra?

Uppgift 5 (4 p)

Ibland talar man om ACID-transaktioner, där bokstäverna i förkortningen ACID står för Förklara för var och en av de fyra egenskaperna vad den egentligen betyder, och ge exempel på vad som kan hända om den saknas, i scenariot med sjukdomsdatabasen i scenariot.

Uppgift 6 (3 p)

För att underlätta arbetet med sjukdomsdatabasen, vill man göra den tillgänglig via webben. Ange tre principiellt olika metoder för att åstadkomma detta. (Alltså inte produkter.) Beskriv kort hur metoderna fungerar!

Uppgift 7 (3 p)

Vilken databashanterare bör man välja för sjukdomsdatabasen? Nämn tre förslag på databashanterare, och tala om varför, eller varför inte, de passar för den här tillämpningen!


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 19 mars 2020