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








Tentamen i

Databasteknik

fredag 1 juli 2023

Gäller som tentamen för:
DT504G Databasteknik för civilingenjörer, 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 våren 2023 ger varje i tid inlämnad inlämningsuppgift en extra poäng. Den som inte gått kursen hösten 2023 får dessa (fem) extrapoäng ändå.
Resultat: Meddelas senast 15 arbetsdagar efter tentamensdatum.
Å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

Rymdpolisen har till uppgift att patrullera rymden. De åker runt i sina rymdskepp mellan de olika stjärnorna i galaxen. Då och då får de ett larm från någon planet, och rycker ut med sina rymdskepp. De har förstås en databas för att hålla reda på sina rymdskepp, stjärnor och planeter.

Ett polisrymdskepp under utryckning

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

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 uppgifterna 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 (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 heter den stjärna som planeten B-5 hör till?

b) (2p) Vad heter det tyngsta rymdskeppet?

c) (2p) Vad heter de planeter som rymdskeppet Doomhammer of Doom ryckt ut till?

d) (2p) Vilka av rymdskeppen har aldrig åkt på utryckningar? Vi vill veta deras nummer och namn.

e) (3p) Vad heter den planet som det har varit flest utryckningar till?

Uppgift 4 (3 p)

Rymden är stor, och det finns miljoner stjärnor, planeter och rymdskepp. Rymdpolisen har gjort många miljoner utryckningar. Sökningarna i delfrågorna a, b och c i uppgiften ovan körs ofta, men kanske med andra konstanter. Frågorna tar för lång tid att köra. Vi ser att det inte finns några index i databasen, inte ens på nycklar.

Vilka index bör man skapa för att dessa sökningar ska bli snabbare?

Uppgift 5 (3 p)

ACID-transaktioner kan vara viktiga när man arbetar med databaser. Välj en av de fyra egenskaperna och visa hur det skulle kunna uppstå problem i rymddatabasen om egenskapen saknades. Ge specifika exempel utgående från scenariot.

Uppgift 6 (3 p)

Jordens befolkning är ungefär 8 miljarder. Vi lagrar data om alla människor på jorden i en tabell med 8 miljarder rader, och för att snabbt hitta rätt person indexerar vi tabellen med ett träd. Om vi antar att vi har ett balanserat binärt träd, kan vi räkna med att det blir ungefär trettiotre nivåer djupt, eftersom 2log(8000000000) ≈ 33.

a) Hur djupt blir trädet om vi i stället använder ett B-träd? (Gör rimliga antaganden och redovisa dem.)

b) Varför är B-träd bra just för databaser?

Uppgift 7 (7 p)

Här är en tabell:

Data
A B C D
1 3 1 5
2 3 7 5
5 3 9 9
3 4 9 5

Vi vet att det finns två kandidatnycklar i tabellen, dels A och dels en sammansatt nyckel som består av B och C. Vi vet också att det finns fem fullständiga funktionella beroenden i tabellen, nämligen:

a) Ibland råkar man lägga in fel data i en tabell, och precis det har man gjort här. Det finns ett fel i datat i tabellen ovan, som strider mot de angivna nycklarna och fullständiga funktionella beroendena. Vad är felet, och vad är det som är fel med det?

b) Vilka av normalformerna 1NF, 2NF, 3NF och BCNF uppfyller tabellen? Motivera svaret!

c) I SQL är det lätt att ange vad som är nycklar, med PRIMARY KEY och UNIQUE, och då kommer databashanteraren att kontrollera att man inte bryter mot nyckelvillkoren. Det finns inget lika enkelt sätt att ange funktionella beroenden. Men man kan söka i databasen efter brott mot funktionella beroenden. Skriv en SQL-fråga som hittar rader i tabellen ovan som bryter mot det fullständiga funktionella beroendet CD!

Uppgift 8 (3 p)

Här är en insert-trigger, med Mimer-syntax, för tabellen Data i uppgiften ovan:
@
create trigger Datainsertregel after insert on Data
    referencing new table as n
for each statement
begin atomic
    declare A1, B1, C1, D1 integer;
    select n.A, n.B, n.C, n.D into A1, B1, C1, D1 from n;
    delete from Data where A = A1 and B = B1 and C = C1 and D = D1;
end
@
Beskriv vad som händer om jag lägger in en ny rad i tabellen, till exempel med det här insert-kommandot:
insert into Data values (10,20,30,40);
Beskriv både vad resultatet blir, och hur det går till.