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

Tentamen i

Databasteknik

tisdag 12 januari 2022

Gäller som tentamen för:
DT105G Databasteknik, provkod A001


Hjälpmedel: Ordbok för översättning.
Poängkrav: Maximal poäng är 40. För godkänt betyg krävs 24 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 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 onsdag 2 februari 2022.
Återlämning av tentor: Elektroniskt via webbportalen Studenttjänster.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070 - 73 47 013.



LYCKA TILL!

Scenario till uppgifterna

En stjärna är en stor, självlysande himlakropp av plasma, som lyser genom fusion av atomkärnor i dess inre. Här är några stjärnor, fotograferade av rymdteleskopet Hubble:

Del av stjärnhopen Messier 22 fotograferad av rymdteleskopet Hubble

Stjärnorna kan grupperas i stjärnbilder. Moderna astronomer definierar en stjärnbild som ett område på himlen, och himlen är indelad i 88 sådana områden. Men traditionellt har stjärnbilderna varit just bilder, till exempel av djur och sagoväsen, som man tycker sig se i hur stjärnorna är placerade. Ett par exempel på sådana stjärnbilder är Karlavagnen och Orion. Olika kulturer har haft olika stjärnbilder, så samma stjärna kan ingå i flera olika stjärnbilder.

Nu ska vi skapa en databas med stjärnor och stjärnbilder. Det vi ska lagra är:

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

Välj en av tabellerna som du skapat i uppgift 2 ovan, och ange vilka av de fyra normalformerna 1NF, 2NF, 3NF och BCNF som tabellen uppfyller. Visa därefter att den uppfyller de normalformerna som den uppfyller, och att den inte uppfyller de normalformerna som den inte uppfyller,

Uppgift 4 (10 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) Vad är den skenbara magnituden på stjärnorna Sirius och Canopus?

b) (2p) Vad heter de stjärnor med luminositet större än 100000 som ingår i stjärnbilden Orion?

c) (1p) Om man ställde alla stjärnorna bredvid varandra skulle den samlingen lysa ganska starkt. Vad är den sammanlagda luminositeten för alla stjärnorna i databasen?

d) (2p) Vilket datum togs det tidigaste foto som visar stjärnan Vega?

e) (3p) Skapa en vy som heter Stjärnbildsinformation. Den ska innehålla en rad för varje stjärnbild, och två kolumner: en med stjärnbildens namn, och en med antalet stjärnor som ingår i stjärnbilden. För full poäng ska även stjärnbilder som inte innehåller några stjärnor alls vara med i vyn, med noll som antalet stjärnor.

f) (1p) Använd vyn för att ta fram namnet på den stjärnbild som innehåller flest stjärnor!

Uppgift 5 (5 p)

Databasen innehåller många miljoner stjärnor och flera tusen stjärnbilder. Sökningen i delfråga 4b ovan körs ofta, men kanske med andra konstanter, till exempel att man söker efter de stjärnor i stjärnbilden Ormbäraren som har luminositet större än 700. Frågan tar för lång tid att köra. Vi ser att det inte finns några index i databasen, inte ens på nycklar.

a) Vilka index bör man skapa för att den sökningen ska bli snabbare?

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

Uppgift 6 (3 p)

Hela tiden upptäcker astronomerna nya stjärnor och lägger in dem i databasen. Sökningen i delfråga 4c, om alla stjärnornas sammanlagda luminositet, körs ofta, och den går också för långsamt. Hur kan vi få den att gå fortare?

Uppgift 7 (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 select-frågorna?

Klient 1 Klient 2
create table Glas
(Nummer integer primary key,
Färg varchar(10));
 
insert into Glas values (1, 'ofärgat');  
select * from Glas; -- Fråga 1  
  select * from Glas; -- Fråga 2
  insert into Glas values (2, 'ofärgat');
  select * from Glas; -- Fråga 3
select * from Glas; -- Fråga 4  
start transaction;  
insert into Glas values (3, 'ofärgat');  
select * from Glas; -- Fråga 5  
  select * from Glas; -- Fråga 6
rollback;  
select * from Glas; -- Fråga 7  
  select * from Glas; -- Fråga 8

Uppgift 8 (2 p)

Vi gör samma sak en gång till, och ger nu följande SQL-kommandon. Beskriv vad som händer!

Klient 1 Klient 2
start transaction;  
  start transaction;
insert into Glas values (4, 'ofärgat');  
  insert into Glas values (4, 'blått');
commit;  
  commit;

Uppgift 9 (3 p)

Det finns olika hot mot som man vill skydda databasen mot. Vilka hot är det?