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






Tentamen i

Databaskonstruktion

för Dataingenjörsprogrammet

torsdag 2 juni 2005 kl 8:00 - 13:00 i HSC






Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 38.
För betyget 3 krävs 20 poäng.
För betyget 4 krävs 26 poäng.
För betyget 5 krävs 32 poäng.
För den som följt kursen våren 2005 ger varje i tid inlämnad inlämningsuppgift en halv extra poäng.
Resultat och lösningar: Meddelas på kursens hemsida senast torsdag 23 juni 2005.
Visning: Tid för visningen meddelas senare.
Efter visningen kan tentor hämtas på expeditionen.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-7347013.



LYCKA TILL!

Scenario till uppgift 1-5

Av omtanke om mänskligheten (och för att utöka skattebasen) har den svenska regeringen beslutat att omvandla Sverige till en imperialistisk supermakt. Alla andra länder ska bli svenska kolonier.

Därför inrättas ett kolonialdepartement, och kolonialdepartement behöver en databas för att hålla reda på kolonierna.

Det man behöver hålla reda på är, mer detaljerat, följande saker:

Uppgift 1 (4 p)

Rita ett ER-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-diagram kan ritas på flera olika sätt. Om du använder en annan notation än kurskompendiet, måste du förklara den notation som du använder.

Uppgift 2 (4 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å vad som är primärnyckel, och 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) Vad heter de svenskar som finns i kolonin Norge?

b) I vilka kolonier har vi planerat minst en svensk som heter Svensson i efternamn?

c) Vilka skatteinbetalning har ansvarats för av svenskar som inte finns i den koloni som inbetalningen kommer från?

d) Vad är den totala summan av inbetalade skatter?

e) Skapa en vy som visar samma svar som frågan ovan, alltså den totala summan av inbetalade skatter.

f) Vad är summan av inbetalade skatter per koloni? Vi vill alltså ha en tabell med två kolumner: koloninamn och summan av inbetalade skatter. Kolonier som inte har betalat in någon skatt alls, ska inte vara med i svaret.

g) Vad är summan av inbetalade skatter per koloni? Vi vill alltså ha en tabell med två kolumner: koloninamn och summan av inbetalade skatter. Kolonier som inte har betalat in någon skatt alls, ska vara med i svaret, med summan noll.

Definiera gärna extra vyer om det underlättar.

Uppgift 4 (6 p)

a) Vad menar man i databassammanhang med ett index?

b) De flesta databashanterarna skapar automatiskt index på de primärnycklar som man angett. Varför har databashanterartillverkarna valt att låta sina databashanterare göra så?

c) Om vi antar att SQL-frågorna i uppgift 3 ovan är typiska för de frågor som ska köras mot databasen, vilka index bör man skapa för att kolonialdepartements databas ska fungera snabbt och bra? (Antag att just den databashanterare vi använder inte automatiskt skapar index på nycklarna.) Motivera svaret.

Uppgift 5 (3 p)

Tidigare skulle du bland annat skapa en vy som visar den totala summan av inbetalade skatter. Nu visar det sig att statsministern vill ha den summan permanent visad i hörnet på sin datorskärm, så han kan sitta och gotta sig åt hur summan hela tiden ökar allteftersom pengarna strömmar in.

a) Innebär detta några problem, och i så fall vilka?

b) Hur kan man lösa problemen? (Du behöver inte skriva programkod, i SQL eller kanske något annat språk, men redogör för principerna.)

Uppgift 6 (5 p)

Det statliga bilregistret har en databas, som bland annat innehåller tabellen Bil:

Bil

Id Regnr Märke Modell Årsmodell Färg Ägare
1 RFN 540 Renault Scenic 1999 Röd 631211-1658
2 WRG 201 Saab 9-5 2005 Svart 271001-2240
3 MOS 118 Saab 900 1995 Röd 740119-2255

Det här är vad man brukar kalla en snapshot-tabell, som beskriver hur världen ser ut just nu. Det står i tabellen vilka bilar som finns just nu, och vem som äger varje bil just nu.

Nu behöver bilregistret även lagra historiska data, det vill säga vilka bilar som fanns tidigare, och vem som ägde dem då. Därför lägger vi till två kolumner, GällerFrån och GällerTill, som är av typen DATE och som talar om när uppgifterna på raden gällde:

Bil

Id Regnr Märke Modell Årsmodell Färg Ägare GällerFrån GällerTill
1 RFN 540 Renault Scenic 1999 Röd 586744-1990 2000-03-20 2000-04-09
1 RFN 540 Renault Scenic 1999 Röd 631211-1658 2000-04-10 null
2 WRG 201 Saab 9-5 2005 Svart 271001-2240 2005-06-02 null
3 MOS 118 Saab 900 1995 Röd 581012-3345 1995-02-18 2002-05-18
3 MOS 118 Saab 900 1995 Röd 700222-2219 2002-05-19 2002-11-01
3 MOS 118 Saab 900 1995 Blå 700222-2219 2002-11-02 2004-12-10
3 MOS 118 Saab 900 1995 Blå 740119-2255 2004-02-11 null

Värdet null i kolumnen GällerTill betyder att den raden fortfarande gäller. Om vi bara tar de rader som har null i kolumnen GällerTill, och sen tar bort de två tidskolumnerna GällerFrån och GällerTill, så får vi den ursprungliga snapshot-tabellen.

Vilka problem kan det finnas med den här nya tabellen med historiska data? Skulle det gå att göra en annan lösning utan de problemen, och hur skulle den lösningen i så fall se ut?

Uppgift 7 (6 p)

När man programmerar numera är det ett sätt som kallas objektorienterad programmering som är populärast. Samtidigt är det relationsdatabaser som är den vanligaste typen av databaser. Om man har ett objektorienterat program, och vill lagra det programmets objekt i en databas, brukar man därför behöva översätta från programmets objekt till databasens tabeller.

Ett objektorienterat program innehåller följande klasser, alltså typer av objekt:

Vad är en subklass? Jo, om klassen Djur är en subklass till klassen Organismer, så innebär det att alla djur är organismer, men alla organismer behöver inte vara djur. Ett djur har också alla egenskaper som en organism har (för djuren är ju organismer), plus kanske ytterligare egenskaper.

Dessutom är det så att en del organismer, tråkigt nog, blir uppätna av andra organismer, och det ska också anges. Alla organismer (alltså både djur och växter) kan bli uppätna, även om alla (ännu) inte blivit det. Det är dock bara djur som kan äta upp andra organismer.

Programmets objekt ska lagras i en relationsdatabas. Ange vilka tabeller som behövs.

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å vad som är primärnyckel, och vilka referensattribut som finns och vad de refererar till.

Om du valt mellan olika möjliga sätt att lösa uppgiften, så motivera ditt val.