Databasteknik: Hemtentamen 2020-06-02

Det här är hemtentan som går tisdag 2 juni 2020 i kursen Databasteknik för civilingenjörer. 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 dina SQL-kommandon, om du vill.
  4. Diskutera inte uppgifterna med andra 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, 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.
  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 på morgonen dagen efter tentan 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 41. 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. För den som följt kursen våren 2020 ger varje i tid inlämnad inlämningsuppgift en extra poäng. Den som inte gått kursen våren 2020 får dessa (fem) extrapoäng ändå.
  16. Resultat meddelas på kursens hemsida eller via e-post senast 23 maj juni 2020. Eftersom svaren skickas in elektroniskt scannas tentorna inte för retur.

Scenario till uppgifterna

Myror, skriver Wikipedia (https://sv.wikipedia.org/wiki/Myror) är en familj av gaddsteklar med små eusociala insekter, som lever i välorganiserade kolonier som kan omfatta flera miljoner, ibland miljarder, individer.

I de svenska skogarna finns många myrstackar, och nu ska vi organisera alltihop genom att samla data om dem i en databas.

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

  1. Myror. Varje enskild myra får ett unikt nummer, som vi ska måla i form av en streckkod på ryggen på myran.
  2. Myrstackar. Detta är myrornas bon. Varje myra bor i en viss myrstack. Varje myrstack har ett unikt nummer och dessutom en unik position, som anges med latitud och longitud. Latitud och longitud anges som två decimaltal.
  3. Barr är, fortfarande enligt Wikipedia (https://sv.wikipedia.org/wiki/Barr), barrträdens motsvarighet till blad. När de torkar ramlar de ner på marken, och myrorna bygger sina myrstackar av dem. Vi nöjer oss inte med att hålla reda på myror och myrstackar, utan vi ska lagra data om varje enskilt barr som myrorna bygger sina myrstackar av. Varje barr får ett unikt nummer, och har dessutom en längd och en vikt.
  4. Myrorna bär barr till sina myrstackar. Ibland är det en ensam myra som bär barret, och ibland är det flera myror som hjälps åt för att bära samma barr. När de lämnat barret på stacken går de iväg för att hämta nästa barr. Vi vill hålla reda på myrornas arbetsprestationer, och därför ska vi lagra vilken eller vilka myror som burit vilket barr till stacken.
  5. Vi vill också lagra vilka barr varje stack består av. Man skulle kunna tänka sig att det går att sluta sig av vilka myror som burit respektive barr, och så ser man i vilken stack de bor, men någon klantig myra skulle kunna ha burit sina barr till fel stack.

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.

(Om man ska ge varje myra och varje barr ett unikt nummer, kanske vanliga heltal av datatypen integer inte räcker till. Det behövs fler olika värden än som går att lagra. Men det behöver vi inte bry oss om i den här uppgiften.)

Uppgift 3 (2 p)

Databasen är nu tom. Skriv de INSERT-kommandon som behövs för att lägga in myra nummer 1 som bor i myrstack nummer 2, med koordinaterna latitud 59,253934, longitud 15,247065.

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) Myra nummer 17 hittar inte hem. Vad är koordinaterna för myrstacken som hon bor i?

b) (2p) Här på myrstacken hittar vi barr nummer 193. Vilka myror hjälpte till att bära hem det barret?

c) (2p) Här är myrstack nummer 4711. Vilka myrstackar ligger norr om den? (Det ser man på att deras latitud är större.) Vi vill veta de myrstackarnas nummer och koordinater.

d) (2p) Här är (fortfarande) myrstack nummer 4711. Hur mycket väger den? Dvs, vad är den sammanlagda vikten av alla barr i den stacken?

e) (3p) Och en fråga till om myrstack nummer 4711. Vilken myra i stacken är flitigast? Dvs, vilken myra har burit flest barr?

Uppgift 5 (4 p)

Det blir förstås väldigt många myror och barr i databasen, och åtminstone några hundra myrstackar. Från början finns inga index alls 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 myra 6312111658 i stället för myra 17). 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 6 (6 p)

Wikipedia skriver om myror att individerna delas in i de subfertila eller sterila honorna som utgör "arbetare" och "soldater", fertila hanar som utgör "drönare", och fertila honor som utgör "drottningar".

a) Rita ett EER-diagram över myrorna och de olika underkategorierna. De har unika nummer, som förut, men i den här uppgiften behöver vi inte bry oss om barr och myrstackar.

b) Implementera den beskrivna databasen i relationsmodellen, dvs översätt ER-diagrammet till tabeller. Implementationen ska vara bra. 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.

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

Uppgift 7 (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 vår myrdatabas om egenskapen saknades. Ge specifika exempel utgående från scenariot.

Uppgift 8 (3 p)

Vad skulle de olika nivåerna i tre-schema-arkitekturen kunna innehålla i vår myrdatabas? Skriv inte bara vad nivåerna normalt innehåller, utan ge specifika exempel utgående från scenariot.


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