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








Tentamen i

Databaskonstruktion

för D3 m fl

måndag 13 mars 2006 kl 8:00 - 13:00 i L001








Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 50.
För betyget 3 krävs 25 poäng.
För betyget 4 krävs 33 poäng.
För betyget 5 krävs 42 poäng.
För den som följt kursen våren 2006 ger varje i tid inlämnad inlämningsuppgift en extra poäng.
Den som inte gått kursen våren 2006, får dessa (fem) extrapoäng ändå.
Resultat och lösningar: Meddelas på kursens hemsida senast måndag 27 mars 2006.
Visning: Onsdag 29 mars 2006 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen kan tentor hämtas på expeditionen.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-7347013.



LYCKA TILL!

Scenario till uppgift 1-4

Institutionen för filosofihistoria behöver en databas för att lagra vilka filosofer som funnits genom historien, vilka böcker de skrivit, och hur de påverkat varandra. Det man behöver hålla reda på är, mer detaljerat, följande:
  1. Filosofer. Varje filosof har ett namn (t. ex. "Ludwig Wittgenstein"), en nationalitet (t. ex. "tysk"), ett födelseår (t. ex. 1889) och (om det är en död filosof) ett dödsår (t. ex. 1951). Vi antar att filosofernas namn är unika.
  2. Böcker som filosoferna skrivit. Varje bok har ett namn (t. ex. "Tractatus logico-philosophicus") och ett utgivningsår (t. ex. 1922). Varje bok har skrivits av en eller flera filosofer. Böckernas namn är inte unika, men de kan identifieras om man vet författaren eller författarna.
  3. Påverkan. Filosofernas tankar och idéer påverkar andra filosofer. Man vill lagra dessa "påverkningar", som var och en består av att en filosof påverkat en annan filosof. Varje filosof kan förstås ha påverkat många andra filosofer, och varje filosof kan ha påverkats av många olika filosofer.
  4. Skolor. En "skola" är en åsiktsriktning inom filosofin. Varje skola har ett unikt namn, till exempel "Wienerkretsen" eller "Uppsalafilosoferna". Varje filosof tillhör en viss skola.
De sökningar som man kommer att göra i den här databasen utgår huvudsakligen från en viss filosof. Till exempel vill man ofta, givet namnet på en filosof, ta reda på vilka böcker han eller hon har skrivit.

Uppgift 1 (5 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 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-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) (1p) Vad heter de filosofer som tillhör skolan "Postmodernism"?

b) (1p) Vilka böcker har filosofen som heter "Bertrand Russell" skrivit eller varit med om att skriva?

c) (1p) Vilka filosofer har påverkat minst en annan filosof? Vi vill veta dessa filosofers namn.

d) (1p) Vilka filosofer har inte påverkat en enda annan filosof? Vi vill veta dessa filosofers namn.

e) (2p) Det är förmodligen fel i databasen om det finns någon filosof som påverkats av en annan filosof som levde efter den påverkade filosofen. Finns det några sådana filosofer i databasen? Vi vill veta dessa filosofers namn.
(Jämför alltså födelse- och dödsår för påverkande och påverkade filosofer.)

f) (2p) Hur många filosofer ingår i varje skola? Som svar vill vi ha en tabell med två kolumner: skolans namn, och antalet ingående filosofer.

g) (2p) Vad heter den filosof som påverkat flest andra filosofer?

Definiera gärna vyer om det underlättar, men skapa inte nya tabeller.

Uppgift 4 (5 p)

a) (4p) SQL-frågorna a, b och c i uppgiften ovan, behöver snabbas upp. Vi märker att det inte finns några index alls i databasen, inte ens på primärnycklar. Vilka index bör man skapa för att frågorna a, b och c ska gå snabbt att köra? Motivera valet!

b) (1p) Förklara vad som menas med ett index.

Uppgift 5 (5 p)

En viss databashanterare har så kallad "auto-commit", vilket betyder att varje SQL-kommando räknas som en egen transaktion, så länge man inte uttryckligen startar en transaktion med kommandot "start transaction".

Vi statar två olika klientprogram som kopplar upp sig mot databasservern, och ger följande SQL-kommandon, i den angivna ordningen, i de två klienterna. Vad blir resultatet av var och en av de fem select-frågorna?

Klient 1 Klient 2
create table Svamp
(Nummer integer not null primary key,
Namn char(10) not null);
insert into Svamp values (1, 'Kantarell');
 
  select * from Svamp; -- Fråga nummer 1
insert into Svamp values (2, 'Flugsvamp');
select * from Svamp; -- Fråga nummer 2  
start transaction;
insert into Svamp values (3, 'Torsksopp');
commit;
 
  select * from Svamp; -- Fråga nummer 3
start transaction;
insert into Svamp values (4, 'Slasktratt');
select * from Svamp; -- Fråga nummer 4
rollback;
 
  select * from Svamp; -- Fråga nummer 5

Uppgift 6 (5 p)

Inom databasområdet talar man ibland om "trenivåarkitekturen" eller "treschemaarkitekturen", som går ut på att en och samma databas kan beskrivas med tre olika scheman.

a) (3p) Förklara vad var och en av de tre olika nivåerna innebär!

b) (2p) Varför har man gjort så?

Uppgift 7 (5 p)

Jag vill hålla reda på vilka TV-program jag ska se under dagen, och skapar tabellen Program, där jag lägger in när programmen går:

Id Kanal Tid Namn Viktighet
1 TV3 13:40 Oprah Winfrey show Inte så värst
2 SVT 1 18:00 Bolibompa Jätte
3 SVT 2 19:00,23:30 Kulturnyheterna Ganska
4 SVT 1 19:30 Rapport Sådär
5 TV4 20:00,22:00,23:30 Hem till gården Jätte
6 Kanal 5 23:00 Big Brother Ganska

Det finns två kandidatnycklar: dels Id, och dels kombinationen av Kanal och Tid. En del av programmen sänds i repris samma dag, till exempel Hem till gården som sänds inte mindre än tre gånger den här dagen. Viktighet anger hur gärna jag vill se programmet.

a) (1p) Jag har tryckt in flera olika tider i samma ruta, vilket gör att tabellen inte uppfyller första normalformen. Förklara varför den inte gör det.

b) (1p) Tabellen uppfyller alltså inte första normalformen. Men hur är det med de andra normalformerna, nämligen 2NF, 3NF och BCNF? Vilka av dessa uppfyller tabellen? Motivera svaren!

c) (2p) Gör de uppdelningar av tabellen som behövs för att få en bättre design. Ange vilka nya tabeller som behövs och vilka kolumner varje tabell innehåller. Ange också vad som är primärnyckel, och vilka referensattribut som finns och vad de refererar till. Uppdelningen ska vara bra, och var och en av de nya tabellerna ska vara i BCNF.

d) (1p) Visa att var och en av de nya tabellerna uppfyller BCNF.

Uppgift 8 (5 p)

a) (3p) Visa med ett par enkla exempel vad man har SQL-kommandona grant och revoke till. Glöm inte att förklara vad som händer!

b) (2p) Visa hur man kan kombinera grant och revoke med vyer för att ge en mer finkornig kontroll av vad användarna får göra med databasen.

Uppgift 9 (5 p)

Du arbetar på Snålbanken, och ni har hyrt in en konsult för att bygga en databasbaserad webbplats som kunderna kan använda för sina bankärenden. Eftersom Snålbanken är ganska snål av sig, tog ni den billigaste konsult som gick att hitta.

Konsulten kommer med följande goda råd. Din uppgift är att för vart och ett av råden avgöra om det är bra eller dåligt, och att förklara varför.

  1. "Varje gång när databashanteraren gör ändringar i databasen så skriver den också i den så kallade loggfilen vad den gör för ändring. Det är för att få extra säkerhet, så man kan kolla i efterhand vilka ändringar som gjorts, men samtidigt går systemet långsammare eftersom databashanteraren måste skriva två gånger på disken för varje ändring. Om man har behov av bättre prestanda, och får tillräcklig säkerhet på annat sätt, kan man stänga av loggfilen."
  2. "Vår databas innehåller ju stora datamängder, med miljoner kunder och bankkonton, och då är det viktigt att skapa index för att systemet ska gå tillräckligt snabbt. Jag har noga studerat alla tabellerna, och skapat de index som är lämpliga. Nu när jag provkör tar det bara en tiondels sekund att hämta kontouppgifterna för en kund, så då kan vi lugnt sätta systemet i drift och släppa in våra miljoner kunder."
  3. "Jag tycker att vi ska använda Microsoft Access som databashanterare. Den är mycket enklare att bygga tabeller och frågor i än till exempel MySQL eller Microsoft SQL Server."