Örebro universitet
Institutionen för naturvetenskap och teknik
Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se)





Tentamen i

Databasteknik

måndag 28 maj 2018

Gäller som tentamen för:
DT504G Databasteknik för civilingenjörer, provkod 0100


Hjälpmedel: Ordbok för översättning.
Poängkrav: Maximal poäng är 37. För godkänt betyg krävs 23 poäng, varav minst fyra poäng på uppgift 1 och minst fem poäng på uppgift 2. För den som följt kursen våren 2018 ger varje i tid inlämnad inlämningsuppgift en extra poäng. Den som inte gått kursen våren 2018 får dessa (fem) extrapoäng ändå.
Resultat: Meddelas på kursens hemsida eller via e-post senast måndag 18 juni 2018.
Återlämning av tentor: Elektroniskt via Studentforum.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.



LYCKA TILL!

Scenario till uppgifterna

Te-utensilier

Det är ingen ordning på tebryggningen, och det måste vi styra upp med en databas!

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

  1. Tekoppar, som man ska hälla upp det färdiga teet i. Vi ger varje tekopp ett unikt nummer, och den har dessutom en volym som anger hur mycket den rymmer, mätt i liter. Tekopparna är alltså de olika kopparna, exempelvis den som syns på bilden ovan, och inte det man brukar mena med "en kopp te", alltså när man vid ett tillfälle hällt te i en kopp.
  2. Tekannor som man använder för att göra te. Vi ger varje tekanna ett unikt nummer, och den har dessutom en volym som anger hur många liter den rymmer. Tekannorna är alltså de olika kannorna, exempelvis den som syns på bilden ovan.
  3. Tesorter. Varje tesort har ett unikt namn.
  4. Tebryggningar. En tebryggning är att framställa en kanna full med drickbart te. Den går till så att man tar teblad av en viss sort och lägger i en tesil i tekannan, man värmer vatten i en vattenkokare och häller i tekannan, och sen väntar man några minuter på att teet ska bli färdigt. Vi ger varje tebryggning ett unikt nummer, men man ska också lagra vilket datum den gjordes, och vi ska också lagra vilken tesort och vilken tekanna som användes.
  5. Till sist häller man upp teet i koppar och dricker det. Det här kan vi kalla koppar med te eller kanske drickkoppar, och vi ger även var och en av dem ett unikt nummer. Ibland var tekannan nästan tom, så koppen blev inte full, och då fyller man på med te från nästa bryggning. En och samma kopp med te kan alltså innehålla te från flera olika bryggningar! Man ska lagra vilken tekopp (enligt punkt 1 ovan) som användes, och från vilka tebryggningar teet i koppen kom från.

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

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

Du behöver inte skriva create table-kommandon i SQL, men du ska ange vilka relationer som finns och vilka attribut varje relation innehåller. Ange också alla kandidatnycklar, vilken av dessa som är primärnyckel, samt vilka referensattribut som finns och vad de refererar till.

Implementationen ska vara bra.

Uppgift 3 (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) (1p) Vi behöver en stor tekopp! Vad är numren på de tekoppar som har större volym än en halv liter?

b) (1p) Det finns en tesort som heter Earl Grey. Eller ska den kanske stavas Earl Gray? Visa alla namn på tesorter som innehåller Grey eller Gray!

c) (2p) Det visar sig att tesorten Bolmörtsblandning är giftig, och alla tekannor som någonsin innehållit den sortens te måste kasseras. Vad är numren på de tekannor som vi bryggt den tesorten i?

d) (2p) Här har jag en kopp med te. Den har nummer 4711. Vilka sorters te innehåller den? Vi vill veta namnen på tesorterna.

e) (2p) Vilka tesorter som finns med i databasen har vi ännu inte bryggt te med? Vi vill veta namnen på de tesorterna.

f) (3p) Vilken tekanna har använts flest gånger?

Uppgift 4 (3 p)

Alla tabeller innehåller många tusen rader. Sökningen i fråga 3c ovan, om vilka tekannor som någonsin innehållit te av sorten Bolmörtsblandning, måste kunna köras snabbt, så inte fler hinner bli förgiftade.

Vilka index bör man skapa för att just den frågan ska gå snabbare att köra?

Uppgift 5 (3 p)

Vi använder en databashanterare som har så kallad "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 tio select-frågorna?

Klient 1 Klient 2
create table Bananer
(nummer integer not null primary key,
färg varchar(10));
 
  insert into Bananer values (1, 'gul');
select * from Bananer; -- Fråga 1  
  select * from Bananer; -- Fråga 2
  start transaction;
  select * from Bananer; -- Fråga 3
select * from Bananer; -- Fråga 4  
  insert into Bananer values (2, 'gul');
  select * from Bananer; -- Fråga 5
  commit;
  select * from Bananer; -- Fråga 6
select * from Bananer; -- Fråga 7  
start transaction;
insert into Bananer values (3, 'gul');
 
select * from Bananer; -- Fråga 8  
rollback;  
select * from Bananer; -- Fråga 9  
  select * from Bananer; -- Fråga 10

Uppgift 6 (3 p)

Ange tre olika databashanterare. Skriv för var och en åtminstone någon egenskap som skiljer den från de två andra.

Uppgift 7 (3 p)

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

B:et i "B-träd" står inte för "binärt", utan (troligen) för "balanserat". Vad är de viktigaste skillnaderna mellan B-träd och binära träd, och varför är B-träd lämpliga i databaser?

Uppgift 8 (3 p)

I databassammanhang menar man med en cursor inte en liten pil eller fyrkant på skärmen, utan något annat.

Vad är en cursor, och vad används den till?