Ö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.
|
-
Skriv tydligt och klart. Lösningar som inte går att läsa kan
naturligtvis inte ge några poäng.
Oklara och tvetydiga formuleringar kommer att misstolkas.
-
Skriv den personliga tentamenskoden på varje inlämnat blad.
Skriv inte namn eller personnummer på bladen.
-
Skriv bara på en sida av papperet.
Använd inte röd skrift.
-
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.
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:
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:
-
Stjärnor.
Vi ger varje stjärna ett unikt nummer.
En del, men inte alla, stjärnor har ett unikt namn.
Varje stjärna har en position på himlen, som anges med två tal:
rektascension och deklination.
Den har också en luminositet,
som anger hur starkt stjärnan lyser,
och en skenbar magnitud,
som anger hur starkt stjärnan ser ut att lysa från jorden sett.
-
Stjärnbilder.
Varje stjärnbild har ett unikt namn,
och för enkelhets skulle ger vi den också ett unikt nummer.
-
Vilka stjärnor som ingår i de olika stjärnbilderna.
Som nämnts kan samma stjärna ingå i flera olika stjärnbilder.
-
Vi ska också fotografera stjärnhimlen.
Därför ska vi lagra information om fotografier.
Varje foto har ett unikt nummer,
ett datum när det togs.
-
Ett foto visar alltid en stjärnbild,
och noll, en eller flera stjärnor.
(Det kanske bara visar en del av stjärnorna i stjärnbilden,
och kanske var det mulet så det syntes inga stjärnor alls!)
Vi ska lagra i databasen vilka stjärnor och stjärnbilder som fotografierna visar.
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?