Ö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.
|
-
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
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.
Det som ska lagras i databasen är följande:
-
Stjärnor.
Varje stjärna har ett unikt nummer, till exempel 4711,
och ett unikt namn, till exempel Solen eller Betelgeuse.
Varje stjärna är också av en viss typ,
som röd jätte eller vit dvärg.
-
Planeter.
Varje planet har ett unikt nummer och ett unikt namn.
Varje planet hör också till en viss stjärna,
och den har ett ordningsnummer räknat från stjärnan,
till exempel att jorden är solens tredje planet.
-
Rymdskepp.
Varje rymdskepp har ett unikt nummer,
ett unikt namn,
och en vikt som anges i antal ton.
-
Utryckningar.
Vi ska lagra alla de utryckningar som gjorts.
Varje utryckning gjordes ett visst datum och en viss tid.
Den gick till en planet,
och den gjordes av ett eller flera rymdskepp.
Det finns också en kort beskrivning av vad utryckningen gällde,
som fortkörning eller upplopp av rymdvarelser.
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 → B
- A → C
- A → D
- {B, C} → A
- C → D
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
C → D!
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.