Databasteknik: Hemtentamen 2020-08-19

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

Tid: 14:15 - 19: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, 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 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 40. För godkänt betyg krävs minst 20 poäng, varav minst fyra poäng på uppgift 1 och minst fyra 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

Här är några tomatplantor med än så länge ganska omogna tomater:

Tomater

För att hjälpa tomatodlare att hålla reda på sina tomater ska vi samla uppgifter om tomaterna i en databas. Det som ska lagras i databasen är följande:

  1. Tomater. Varje tomat har ett unikt nummer, en vikt och ett skick. Skicket kan vara till exempel "mogen", "rutten" eller "delikat".
  2. Tomatplantor. Varje tomatplanta har ett unikt nummer, en höjd och, precis som de enskilda tomaterna, ett skick. Skicket kan vara till exempel "vissen", "avbruten" eller "utmärkt".
  3. Vilka tomater som sitter på vilken planta. Varje tomat kan sitta på en planta, men den kan också ha ramlat ner på golvet, och då sitter den inte på någon planta.
  4. Tomatlådor. Tomatodlarna packar tomaterna i tomatlådor. Varje tomatlåda har ett unikt nummer, en adress som lådan ska skickas till, och den innehåller noll eller flera tomater.

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

Databasen är nu tom. Skriv de INSERT-kommandon som behövs för att lägga in tomat nummer 1, som väger 147 gram, är vacker och sitter på planta nummer 2, och även planta nummer 2, som är 178 centimeter hög och fin.

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) Vilka tomater är mogna (dvs har skicket mogen)? Vi vill veta deras namn och vikt.

b) (2p) Tomatplanta nummer 627 har drabbats av Tomat-Corona! Vi måste smittspåra. Till vilka adresser har vi skickat tomater från den plantan? (Dvs, vad är mottagaradresserna på de lådor som innehåller tomater från den plantan.)

c) (2p) Vilka tomatlådor är tomma? Vi vill veta deras nummer.

d) (2p) Vad väger, sammanlagt, alla ruttna tomater?

e) (3p) På vilken tomatplanta sitter det flest tomater? Vi vill veta den plantans nummer och längd.

Uppgift 5 (7 p)

Enligt en uppgift äter man i Sverige cirka 10 kg tomater per person och år. Det blir 100 miljoner kilo tomater per år. Som vi förstår kommer databasen att bli stor, för varje tomatodlare levererar stora mängder tomater, och alla tabellerna kommer att innehålla många rader.

Samtidigt måste smittspårningen i deluppgift b i frågan ovan gå snabbt att köra! Det finns inga index i databasen, inte ens på nycklar.

a) Vilka index bör man skapa för att få den sökningen att gå snabbare? Skriv CREATE INDEX-kommandon.

b) Ange ett index som inte skulle gjort att sökningen går snabbare, och förklara varför det indexet inte hjälper.

c) Vi har även krav på att SQL-frågan i deluppgift d, den om den sammanlagda vikten på alla ruttna tomater, ska gå snabbt att köra. Vilka index bör man skapa för att få den att gå snabbare? Skriv CREATE INDEX-kommandon.

d) Det visar sig att det inte hjälper med index för att få uträkningen av den sammanlagda vikten av ruttna tomater att gå tillräckligt snabbt. Det finns väldigt många ruttna tomater, så det tar helt enkelt lång tid att räkna ut summan, oavsett hur man skapar index. Vad skulle man kunna göra i stället, för att snabbare kunna få fram den sökta vikten?

Uppgift 6 (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 tomatdatabasen i scenariot.

Uppgift 7 (3 p)

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

Uppgift 8 (3 p)

Vilken databashanterare bör man välja för tomatdatabasen? 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), 18 augusti 2020