Det här är hemtentan som går måndag 31 maj 2021 i kursen
DT504G Databasteknik för civilingenjörer,
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
-
Den här hemtentan ersätter den planerade salstentan.
-
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.
-
Uppgifterna ska lösas enskilt, dvs inga grupper av två eller flera studenter.
-
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.
-
Diskutera inte uppgifterna eller dela med dig av svar förrän tidigast dagen efter tentan.
-
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.
(Gå till kursens sida i Blackboard,
gå in i mappen Hemtentor,
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.)
-
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.
-
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.
-
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.
-
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.
-
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.
-
Antaganden utöver de som står i uppgifterna måste anges. Gjorda antaganden får inte förändra den givna uppgiften.
-
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.
-
Maximal poäng är 40.
För godkänt betyg krävs minst 25 poäng,
varav minst fem poäng på uppgift 1 och minst sex poäng på uppgift 2.
-
För den som följt kursen hösten 2021
ger varje i tid inlämnad inlämningsuppgift en extra poäng.
Den som inte gått kursen hösten 2021 får dessa (fem) extrapoäng ändå.
-
Resultat meddelas senast 15 arbetsdagar efter tentamensdatum.
Eftersom svaren skickas in elektroniskt scannas tentorna inte för retur.
Information från institutionen angående fusk
Instruktioner inför digital hemtentamen/ examination
Jag vill undvika fusk - hur gör jag? / All form av fusk anmäls
Du ska följa instruktionerna för uppgiften.
Om du är osäker, fråga ansvarig lärare om något i instruktionerna är oklart.
Du får inte samarbeta.
Det här är en individuell examinationsuppgift. Du ska inte prata med någon, ställa frågor till eller ta hjälp av andra studenter eller kurskamrater. Att hjälpa andra under en individuell examination är också fusk.
Lägg undan mobilen. Stäng av sociala medier.
Du får inte använda hjälpmedel.
Det vill säga att du får inte använda dig av något annat än det som står angivet i instruktionerna.
Du får inte använda andra formuleringar än dina egna.
Dina svar ska vara självständigt formulerade och redovisa dina kunskaper.
Det betyder att inga citat eller referat ska förekomma i dina svar om det inte står i instruktionerna att du får använda citat eller referat.
Dina svar kontrolleras via Urkund.
All misstanke om fusk anmäls till universitetets rektor och kan leda till en prövning i universitets disciplinnämnd.
Konsekvenser av fusk
Om du fuskar kan detta leda till en avstängning som kan få följder både för dina studier och privat:
- Uteblivet studiemedel som t.ex. som kan påverka din möjlighet att behålla din bostad.
- Ingen åtkomst till digitala plattformar.
- Du kan behöva meddela dina kursare om att du är fälld för fusk, om du t.ex. ingår i ett grupparbete på en pågående kurs men blir avstängd.
- Tillfällen för examination går förlorade vilket kan innebära att du inte kommer vidare i dina studier nästa läsperiod/termin och din studiegång blir därmed påverkad.
- Beslutet är en offentlig handling som begärs regelbundet ut av en nyhetsbyrå. Och kan även begäras ut av framtida arbetsgivare eller andra.
- Om du fuskar dig igenom din utbildning har du inte den kunskap som arbetsmarknaden förväntar av dig.
OBS: Tänk efter en gång till innan du påbörjar och genomför din tentamen!
|
Scenario till uppgifterna
Många tycker om kaniner.
De luktar inte lika illa som hundar,
de äter inte upp småfåglarna som katter gör,
och till skillnad från spindlar och ormar skrämmer de inte människor som kommer på besök.
Dessutom gör de nytta, för om man har kaninerna i en bur på gräsmattan, och flyttar runt buren, behöver man ingen gräsklippare.
Kaninerna äter upp gräset.
Här är två kaniner i en bur:
Notera det gröna röret som leder från buren.
Om man har flera burar kan man dra sådana rör mellan burarna,
och kaninerna kan springa genom röret till de andra burarna.
Här är en närbild på röret, med ett litet utsiktstorn som kaninerna kan titta ut genom:
Man kan bygga långa tunnlar:
Nu ska vi förstås skapa en databas för att hålla reda på vad vi byggt.
Det vi ska lagra i databasen är:
-
Burar.
En bur kan kopplas till andra burar med tunnlar.
När man köper dem har burarna inga serienummer eller liknande,
och det finns inget sätt att skilja olika burar åt,
men för att kunna göra det ger vi varje bur ett unikt nummer.
Burarna är olika stora, så vi vill lagra burarnas längd, bredd och höjd.
-
Rörsektioner är de gröna rören som man kan sammanfoga till långa tunnlar.
Varje rörsektion är ungefär en meter lång.
Rörsektionerna är inte heller numrerade från början, men vi ger varje rörsektion ett unikt nummer.
-
Utsiktstorn.
Vi ger även varje utsiktstorn ett unikt nummer.
-
Tunnlar.
En tunnel är en följd av rörsektioner och utsiktstorn.
Varje tunnel består av en eller flera rörsektioner, och noll eller flera utsiktstorn,
som sitter ihop i en viss ordning.
Vi ger även varje tunnel ett unikt nummer.
Varje tunnel kopplar ihop två burar.
En bur kan vara ansluten till flera tunnlar.
-
Kaniner.
Varje kanin har ett unikt namn, som Godis eller Snöpricken.
-
Ibland är kaninerna rädda för nya saker,
som till exempel burar som de inte varit i förut.
Därför vill vi hålla reda på vilka burar varje kanin varit i.
Uppgift 1 (6 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 (8 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) (1p)
Hur höga är de burar som är längre än 120 centimeter?
Vi vill veta varje sådan burs nummer och höjd.
b) (1p)
Vi ställer alla burarna ovanpå varandra. Hur hög blir stapeln?
c) (2p)
Hur stor golvyta (dvs längden multiplicerad med bredden) har buren som har lägst nummer?
d) (2p)
Hur många kaniner har besökt varje bur?
Vi vill ha ett svar som består av två kolumner: burens nummer och antalet kaniner som besökt buren.
Det är inte att krav att burar som ingen kanin ännu har besökt ska vara med i svaret.
e) (1p)
Om svaret ska ha med de burar som ingen kanin ännu har besökt, med antalet noll,
behöver man skriva frågan på ett visst sätt. Hur?
f) (2p)
Förklara varför man måste göra så.
g) (3p)
Vad heter de kaniner som varit i någon av de burar som kaninen Lakrits varit i?
Uppgift 4 (3 p)
Du skapar databasen enligt uppgifterna ovan,
med de CREATE TABLE-kommandon du skrev i uppgift 2,
och så lägger vi in de kaniner, burar och tunnlar som vi har i trädgården.
Nu kommer någon och frågar om du inte ska skapa index också.
Diskutera hur man bör göra!
Uppgift 5 (3 p)
Ett index är en datastruktur som databashanteraren använder för att snabbt hitta data i en tabell.
Tre olika typer av datastrukturer som man kan använda är
binära träd, B-träd och hashtabeller.
Vilken av de tre datastrukturerna är vanligast i normala databashanterare som Mimer och MySQL,
och varför har man valt just den i stället för de andra?
Uppgift 6 (3 p)
Vi använder en databashanterare med auto-commit,
vilket betyder att varje SQL-kommando räknas som en egen transaktion,
så länge man inte uttryckligen startar
en transaktion med kommandot "start transaction".
Vi startar två olika klientprogram som loggar in på samma databas,
och ger följande SQL-kommandon, i den angivna ordningen,
i de två klienterna.
Vad blir resultatet av var och en av de nio select-frågorna? (På nästa sida!)
Klient 1 | Klient 2 |
create table Kaniner
(nummer integer not null primary key,
färg varchar(10));
|
|
insert into Kaniner values (1, 'vit');
|
|
|
insert into Kaniner values (2, 'svart');
|
select * from Kaniner; -- Fråga 1
|
|
|
select * from Kaniner; -- Fråga 2
|
start transaction;
|
|
insert into Kaniner values (3, 'svart');
|
|
select * from Kaniner; -- Fråga 3
|
|
|
select * from Kaniner; -- Fråga 4
|
rollback;
|
|
|
select * from Kaniner; -- Fråga 5
|
start transaction;
|
|
insert into Kaniner values (3, 'vit');
|
|
select * from Kaniner; -- Fråga 6
|
|
|
select * from Kaniner; -- Fråga 7
|
commit;
|
|
select * from Kaniner; -- Fråga 8
|
|
|
select * from Kaniner; -- Fråga 9
|
Uppgift 7 (5 p)
Tabellen Kaniner i uppgiften ovan är ganska enkel.
Vi lägger till kolumner för längd och vikt, med vikten uttryckt både i kilo och gram:
Nummer | Färg | Längd | Kilo | Gram |
1 | Vit | 39 | 2.1 | 2100 |
3 | Vit | 45 | 2.3 | 2300 |
2 | Vit | 35 | 1.8 | 1800 |
17 | Vit | 35 | 1.9 | 1900 |
a) Skriv ALTER TABLE-kommandon för att lägga till de två nya kolumnerna.
b) Vad är primärnyckel i den här nya tabellen?
c) Vilka kandidatnycklar, förutom primärnyckeln, finns i tabellen?
d) Vilka fullständiga funktionella beroenden finns i tabellen?
e) Vilka av de normalformer som ingår i kursen (1NF, 2NF, 3NF och BCNF) uppfyller tabellen? Motivera svaret!
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se),
30 maj 2021