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






Tentamen i

Databaskonstruktion

för Dataingenjörsprogrammet

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






Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 45.
För betyget 3 krävs 25 poäng.
För betyget 4 krävs 32 poäng.
För betyget 5 krävs 38 poäng.
För den som följt kursen våren 2005 ger varje i tid inlämnad inlämningsuppgift en extra poäng.
Resultat och lösningar: Meddelas på kursens hemsida senast måndag 4 april 2005.
Visning: Tisdag 5 april 2005 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 uppgifterna

Teleoperatören Allmänna Telefon Och Compani har nyligen börjat bedriva verksamhet i Sverige. Som alla teleoperatörer har de ett stort antal abonnenter, som har telefonabonnemang och ringer till varandra. Nu har Allmänna Telefon Och Compani anlitat dig som konsult för att bygga upp en databas för sin verksamhet.

Saker som ska lagras i databasen:

Det fattas förmodligen en del attribut i beskrivningen ovan. Du kan behöva lägga till lämpliga attribut för att databasen ska fungera.

Ytterligare ledtrådar om vad som behöver lagras i databasen får man av SQL-frågorna i uppgift 3, som ska gå att besvara med hjälp av de data som finns i databasen.

Uppgift 1 (10 p)

Rita ett ER-diagram för Allmänna Telefon Och Companis databas. Använd informationen i scenariot ovan, och tänk också på att det ska gå att svara på frågorna i uppgift 4.

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.

Det här är en ganska fri uppgift, så flera olika lösningar är möjliga. Om det är något du är osäker på, eller om du behöver göra några antaganden, så förklara hur du tänkt och vilka antaganden du gjort.

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) Vad heter abonnenten som har telefonnummer 0707-347013?

b) Vad heter de abonnenter som har ringt telefonnumret 0707-347013?

c) Vilka abonnenter har ringt för sammanlagt mer än tusen kronor? Vi vill veta deras namn.

d) Hur många abonnemang har aldrig använts, dvs abonnenten har vare sig ringt upp eller ringts upp av någon annan?

e) Hur många abonnemang finns det av varje abonnemangsform? Svaret ska vara en tabell med abonnemangsformens namn och antalet abonnemang. Abonnemangsformer som inte har några abonnemang alls ska inte vara med i svaret.

Definiera gärna vyer om det underlättar.

Uppgift 4 (5 p)

Du presenterar den design av databasen som du gjort ovan för Allmänna Telefon Och Companis företagsledning. De undrar lite över om de verkligen ska skaffa en databashanterare, eller om det kanske inte blir enklare och mer effektivt att i stället bygga en applikation i Java eller C++ som hanterar informationen om abonnemangen och telefonsamtalen. Du får provision för varje databashanterare som säljs.

Beskriv fördelarna med att använda en databashanterare.

Uppgift 5 (5 p)

Efter att ha blivit övertygade om att skaffa en databashanterare, funderar Allmänna Telefon Och Compani nu på att använda sig av MySQL, som är gratis. Eftersom MySQL är gratis, får du ingen provision om de väljer den.

Den senaste stabila versionen av MySQL, 4.1, saknar vyer, lagrade procedurer och triggers. Förklara för Allmänna Telefon Och Compani vilka fördelarna är med

a) vyer

b) lagrade procedurer, och

c) triggers.

Uppgift 6 (10 p)

Allmänna Telefon Och Compani behöver lagra ytterligare information i sin databas, nämligen om sina Anställda och de Avdelningar som de arbetar på. För att slippa betala ditt dyra konsultarvode bygger de en egen tabell som heter Personal och som ser ut så här:

Anställningsnummer Namn Telefon Chef Avdelning Avdelningschef
1 Bob Boss 4711 null Huvudkontoret 1
2 Cecilia Ceder 1234 2 Huvudkontoret 1
3 Anders And 1235 2 Huvudkontoret 1
4 Lotta Lind 5551 3 Dataavdelningen 4
5 David Dahl 5552 4 Dataavdelningen 4
6 Erik Ek 5553 4 Dataavdelningen 4

Tabellen kommer att ha många tusen rader.

a) Två typiska frågor som ställs mot den här tabellen är dessa:

select Telefon from Personal where Namn = 'Anders And';

select Namn from Personal where Avdelning = 'Dataavdelningen';
Vilka index behöver man skapa för att dessa frågor ska gå snabbt?

b) Vilka nackdelar finns med den här lösningen, och hur skulle du ha gjort i stället? Anknyt till teorin i beskrivningen av nackdelarna!

c) Om vi tänker oss att vi implementerar din alternativa lösning, hur skulle de två SQL-frågorna i deluppgift a se ut i så fall?

d) Vilka index behöver man skapa för att de nya SQL-frågorna i deluppgift c ska gå snabbt?