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. |
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.
Träd
|
Grenar
|
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?
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?
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?
Tid | T1 | T2 | T3 |
---|---|---|---|
1 | Start | ||
2 | Läs(X) | ||
3 | Start | ||
4 | Skriv(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 | ||
14 | Commit |
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!)
a) primärindex
b) sekundärindex
c) klustrat index (även kallat grupperat index eller grupperande index)
d) B+-trädsindex
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.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;
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!