Örebro universitet
Institutionen för teknik
Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se)








Tentamen i

Databaser, fortsättningskurs

för D3 m fl

fredag 4 maj 2007 kl 08:00 - 12:00 i L001








Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 44.
För betyget 3 krävs 22 poäng.
Resultat och lösningar: Meddelas på kursens hemsida senast måndag 14 maj 2007.
Visning: Tisdag 15 maj 2007 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen kan tentorna hämtas på expeditionen.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-7347013.



LYCKA TILL!

Uppgift 1 (5 p)

Du ska skriva ett datorprogram som ska köras av vanliga användare på vanliga skrivbordsdatorer. Programmet ska arbeta med data som finns i en databas. Vi vill kunna byta databashanterare. Till att börja med körs programmet på Windows-datorer, men så småningom vill vi helst kunna flytta programmet till andra typer av datorer.

Det finns olika sätt för ett program att kommunicera med en databas. Vilket kan vara lämpligt i det här fallet? Diskutera några olika alternativ, och förklara varför de är, eller inte är, lämpliga.

Uppgift 2 (5 p)

En databas innehåller data om Träd, och de Grenar som sitter på träden:
Träd
TnrTypHöjd
1Äppelträd2.9
2Äppelträd4.2
3Plommonträd1.9
Grenar
GnrLängdTräd
11.21
21.71
30.91
42.22
53.02
60.93
71.53
Databasen ovan beskriver trädgården som den ser ut vid ett visst tillfälle, men träden ändras ju med tiden. Träden planteras och sågas ner, och grenar växer ut eller beskärs.

a) (3p)

Vi vill kunna lagra data i databasen, inte bara om hur trädgården ser ut just nu, utan också om hur den sett ut tidigare. (Fanns det till exempel några träd som var högre än tre meter den 1 januari 2001?) Visa hur man kan komplettera databasen för att det ska fungera!

b) (2p)

I originaldatabasen är kolumnen Grenar.Träd ett referensattribut, som refererar till kolumnen Träd.Tnr. För att få referensintegritet deklarerar vi den förstås som en foreign key (främmande nyckel) med hjälp av ett SQL-kommando. Hur fungerar referensintegriteten i den nya databasen från deluppgiften ovan? Blir det några särskilda problem?

Uppgift 3 (4 p)

I vilken typ av databaser används pointer swizzling? (Det kallas ibland också object swizzling, vilket nog kan ses som en ledtråd till svaret på frågan.)

Vad innebär pointer swizzling? Visa med ett exempel hur det fungerar!

Varför gör man det? Det vill säga, vad är det för problem man vill lösa med hjälp av pointer swizzling?

Uppgift 4 (6 p)

Örebro universitet har under årens lopp samlat på sig ganska mycket data om studenter, kurser och studieresultat. I sitt ständigt pågående kvalitets- och förbättringsarbete funderar man nu på om man kan dra nytta av alla dessa data för att hitta intressanta samband.

Hur skulle man kunna använda data mining (datautvinning) i det här scenariot? Visa gärna vilken eller vilka datakuber som skulle kunna skapas, med vilka fakta och vilka dimensioner som finns.

Och vilka tabeller blir det av detta?

Uppgift 5 (8 p)

I en databashanterare körs tre olika transaktioner (T1, T2 och T3) enligt följande tidsschema. Transaktionerna arbetar med tre olika dataobjekt (X, Y och Z).

TidT1T2T3
1Start  
2Läs(X)  
3 Start 
4Skriv(X)  
5 Läs(Y) 
6 Läs(Z) 
7  Start
8  Läs(Y)
9  Läs(Z)
10 Skriv(Z) 
11 Commit 
12  Skriv(Z)
13  Commit
14Commit  

a) (2p)

Här användes ingen metod för att hålla transaktionerna isolerade från varandra. Vilket eller vilka fel kan ha uppstått i databasen på grund av detta?

b) (6p)

Välj två av följande metoder för isolering av transaktioner, och visa hur tidsschemat ovan skulle förändras om respektive metod användes. (Observera: Välj alltså två av dessa metoder!)

Uppgift 6 (5 p)

I en databashanterares interna arbete används ofta flera olika typer av index. Förklara vad följande olika sorters index innebär. Rita gärna bilder.

a) primärindex
b) sekundärindex
c) klustrat index (även kallat grupperat index eller grupperande index)
d) B+-trädsindex

Uppgift 7 (11 p)

Utgå från den ursprungliga databasen om träd och grenar, som gavs i uppgift 2. Följande fråga ställs mot den databasen:
select Längd
from Träd, Grenar
where Träd.Typ = 'Äppelträd'
and Träd.Höjd > 3
and Grenar.Längd > 2
and Träd.Tnr = Grenar.Träd;
Vi vill alltså veta längden på alla de grenar som är längre än 2 meter, och som sitter på äppelträd som är högre än tre meter.

a) (2p) Visa den systematiska översättningen till relationsalgebra, även kallad "kanonisk form", av SQL-frågan.

b) (1p) Vi antar att databashanteraren arbetar internt med relationsalgebra. Skulle den kanoniska formen vara ett bra sätt att köra frågan? Motivera svaret.

c) (5p) Visa hur en heuristisk frågeoptimerare kan optimera den kanoniska formen från deluppgift a. Visa både vilka olika optimeringar som görs, och vad slutresultatet blir.

d) (3p) Det finns en del saker som en heuristisk frågeoptimerare normalt inte tar hänsyn till när den optimerar en fråga. Vilka? Förklara, med exempel från databasen och frågan i exemplet!