Ö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.
|
-
Skriv tydligt och klart. Lösningar som inte går att läsa kan
naturligtvis inte ge några poäng. Oklara formuleringar kommer att
misstolkas.
-
Skriv den personliga tentamenskoden på varje inlämnat blad.
Skriv inte namn eller personnummer på bladen.
-
Lös bara en uppgift per blad. Skriv bara på en sida av papperet.
Använd inte röd skrift.
-
Antaganden utöver de som står i uppgifterna måste anges. Gjorda
antaganden får inte förändra den givna uppgiften.
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:
-
Abonnenter.
En abonnent är ett företag eller en privatperson,
som tecknat ett eller flera abonnemang.
-
Abonnemang.
Varje abonnemang hör till en viss abonnent,
och identifieras med ett unikt telefonnummer.
-
Abonnemangsformer.
Konkurrensen på telefonimarknaden är stenhård,
och därför måste man ha ett stort antal olika abonnemangsformer som
kunderna kan välja mellan.
Varje abonnemang är av en viss abonnemangsform.
Man kan till exempel ha de här abonnemangsformerna:
-
Privat,
som är dyrt på dagtid men billigt på kvällar och helger,
-
Företag,
som är lika dyrt hela tiden men ger mängdrabatt om man ringer mycket,
-
Kamrat, där man ringer till lägre pris till vissa personer
men dyrt till alla andra, och
-
Ovän, där man ringer till samma pris till alla,
men man kan peka ut en person som får betala extra dyr taxa när han ringer upp.
För att hänga med konkurrenterna
räknar Allmänna Telefon Och Compani
med att skapa nya abonnemangsformer ganska ofta.
-
Telefonsamtal.
Man lagrar telefonsamtalen i databasen när de är avslutade.
Varje telefonsamtal har en starttid, en sluttid, en samtalstid (hur länge man pratade), och en kostnad.
Dessutom finns det två olika typer av telefonsamtal:
Vanliga samtal, där en telefon ringer upp en annan,
och konferenssamtal,
där många olika personer kan prata med varandra.
I vilket fall som helst finns det alltid en uppringare,
och det är uppringaren som ska betala samtalet.
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?