Örebro universitet
Institutionen för teknik
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se)
Tentamen i
Databasteknik
för D1, SDU1 m fl
lördag 27 februari 2010
Gäller som tentamen för:
DT1012 Datateknik A, Databasteknik, provkod 0100
DT1007 Datateknik A, Tillämpad datavetenskap, provkod 0310
Hjälpmedel:
|
Inga hjälpmedel.
|
Poängkrav:
|
Maximal poäng är 30.
För betyget 3 respektive G krävs 15 poäng.
|
Resultat och lösningar:
|
Meddelas på kursens hemsida eller via e-post senast lördag 20 mars 2010.
|
Återlämning av tentor:
|
Efter att resultatet meddelats kan tentorna hämtas på
universitetets centrala tentamensutlämning i L1506,
måndag till torsdag kl 10-14.
|
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 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
Av omtanke om mänskligheten, och för att utöka skattebasen, har den
svenska regeringen beslutat att omvandla Sverige till en imperialistisk
stormakt. Alla andra länder ska bli svenska kolonier.
Därför inrättas ett kolonialdepartement.
Kolonialdepartement behöver förstås en databas för att hålla reda på kolonierna.
Det man behöver hålla reda på är, mer detaljerat, följande saker:
-
Kolonierna.
Varje koloni har ett unikt nummer, ett unikt namn
(till exempel "Frankrike" eller "USA"), en folkmängd och en huvudstad.
-
Svenskar. Varje svensk har ett unikt personnummer, och ett namn.
-
Vilka svenskar som är utplacerade i vilka kolonier.
En svensk kan (men måste inte) vara utplacerad i en koloni.
I varje koloni finns minst en svensk utplacerad.
-
Vilken svensk som är ansvarig för varje koloni.
Varje koloni har en ansvarig svensk
(som inte behöver vara utplacerad i den kolonin).
-
Skatteinbetalningar.
Från kolonierna betalas skatt.
Varje skatteinbetalning består av ett visst belopp,
den kommer från en viss koloni, och det finns en svensk
som är ansvarig för den skatteinbetalningen.
(Det behöver inte vara samma svensk som är ansvarig för kolonin.)
Skatteinbetalningen har också ett visst datum.
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 3 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- (eller EER-)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:
a)
Vilka svenskar finns i kolonin Norge?
Vi vill veta deras personnummer och namn.
b)
Danskarna gör revolution, och frigör sig från Sverige.
Alla svenskar som fanns i Danmark blir utkastade.
Ta bort deras placering i Danmark ur databasen.
c)
Vad är den totala summan av inbetalade skatter?
d)
Vilka skatteinbetalningar har ansvarats för av svenskar
som inte finns i den koloni som inbetalningen kommer från?
e)
Vi vill veta namn och personnummer på den svensk som är ansvarig för den största summan av skatteinbetalningar.
Uppgift 4 (7 p)
a) (2p)
Databasen innehåller ett hundratal kolonier, flera miljoner utplacerade svenskar,
och många miljoner skatteinbetalningar.
De två SQL-frågorna a och c i uppgiften ovan
körs väldigt ofta
(men kanske med andra konstanter)
och behöver snabbas upp.
Vi märker att det inte finns några index alls i databasen,
inte ens på nycklar.
Vilka index bör man skapa för att just de frågorna ska gå snabbt att köra?
Motivera svaret!
b) (3p)
Finns det något bättre sätt att snabba upp fråga c? Förklara!
c) (2p)
Efter att ha skapat indexen provkör vi databasen med de stora datamängderna som vi har,
och det visar sig att frågorna går snabbt att köra.
Är det något mer vi behöver tänka på när det gäller prestanda,
innan vi sätter databasen i skarp drift?
Uppgift 5 (3 p)
Man kan säga att motsatsen till SQL-kommandot grant
är SQL-kommandot revoke,
eftersom grant delar ut rättigheter och revoke tar bort dem igen.
a)
Vad är motsatsen till SQL-kommandot create, som till exempel i create table?
b)
Vad är motsatsen till SQL-kommandot insert?
c)
Vad är motsatsen till SQL-kommandot commit?