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



Tentamen i

Databasteknik
för D1, SDU1 m fl

måndag 13 januari 2014

Gäller som tentamen för:
DT1026 Datateknik A, Databasteknik, provkod 0100
DT1030 Datateknik A, Tillämpad datavetenskap, provkod 0310





Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 40.
För betyget 3 respektive G krävs 25 poäng.
För den som följt kursen hösten 2013 ger varje i tid inlämnad inlämningsuppgift en extra poäng.
Den som inte gått kursen hösten 2013 får dessa (fem) extrapoäng ändå.
Resultat: Meddelas på kursens hemsida eller via e-post senast måndag 3 februari 2014.
Återlämning av tentor: Efter att resultatet meddelats kan tentorna hämtas på universitetets centrala tentamensutlämning.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.



LYCKA TILL!

Scenario till uppgifterna

En form av pistolskytte går ut på att man skjuter en serie med fem skott mot en tioringad tavla, och försöker få så många poäng som möjligt. Träffar man med alla skotten i tian, får man femtio poäng:

En måltavla     En måltavla

De svarta klisterlapparna är överklistrade skott från tidigare serier.

Nu ska vi organisera skyttet i en databas, som innehåller serier men också skyttar, skytteklubbar och tävlingar.

Det vi ska lagra i databasen är, mer detaljerat, följande saker:

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 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.

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

Välj själv en av tabellerna som du gjort i uppgift 2 ovan. Ange vilken som är den högsta normalform (av 1NF, 2NF, 3NF och BCNF) som tabellen uppfyller. (Eftersom det står i uppgiften att "implementationen ska vara bra", är det förmodligen i BCNF.)

Visa sen att tabellen uppfyller den normalformen.

Uppgift 4 (12 p)

Formulera följande frågor i SQL. Använd dina tabeller från uppgift 2. Definiera gärna vyer om det underlättar.

a) Det bor några skyttar på adressen Vägen 7. Vad har de för personnummer och namn?

b) Vad heter de skyttar som har skjutit minst en 50-serie, oavsett om det är på tävling eller träning?

c) Vad heter de skyttar som har skjutit minst en 50-serie på tävling?

d) Finns det några skyttar som aldrig har missat tian på en tävling, dvs som bara skjutit 50-serier på de tävlingar de varit med i? Vi vill veta de skyttarnas namn.

e) Hur många serier har varje skytt skjutit, totalt? Vi vill ha ett resultat som för varje skytt innehåller skyttens personnummer och namn, och antalet serier. Skyttar som inte skjutit några serier alls ska också vara med, med antalet noll.

f) Vad heter den skytt som vann tävlingen Julpanget 24 december 2013? Det är alltså den skytt som sammanlagt fick högst antal poäng på de serier som han eller hon sköt under den tävlingen.

Uppgift 5 (6 p)

a) Vad menar man i databassammanhang med ett index?

b) Vad är det som skiljer ett index från en nyckel?

c) De flesta databashanterarna skapar automatiskt index på de primärnycklar som man angett. Varför har databashanterartillverkarna valt att låta sina databashanterare göra så?

d) Databasen växer så att varje tabell innehåller många miljoner rader. Det finns inga index alls i databasen, inte ens på primärnycklar. De fyra SQL-frågorna a-d i uppgiften ovan körs många gånger. Vilka index bör man skapa för att just de frågorna ska gå snabbt att köra?

Uppgift 6 (3 p)

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














(Det finns en uppgift på nästa sida också.)

Uppgift 7 (5 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 statar två olika klientprogram som loggar in på samma databas, och ger följande SQL-kommandon, i den angivna ordningen, i de två klienterna;

 
Klient 1 Klient 2
create table Apelsiner
(id integer not null primary key,
vikt integer);
 
  insert into Apelsiner values (1, 10);
select * from Apelsiner; -- Fråga nummer 1  
  start transaction;
insert into Apelsiner values (2, 20);
commit;
start transaction;
insert into Apelsiner values (3, 10);
 
  select * from Apelsiner; -- Fråga nummer 2
select * from Apelsiner; -- Fråga nummer 3  
rollback;  
  select * from Apelsiner; -- Fråga nummer 4
select * from Apelsiner; -- Fråga nummer 5  
  start transaction;
insert into Apelsiner values (4, 20);
start transaction;
insert into Apelsiner values (4, 100);
  select * from Apelsiner; -- Fråga nummer 6
select * from Apelsiner; -- Fråga nummer 7  
  commit;
commit;  

a) Vad blir resultatet av var och en av de sju select-frågorna?

b) Man kommer att få felmeddelanden från databashanteraren? Vilka, när och varför?