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






Tentamen i

Databaskonstruktion

för D1, Sdu1 och TDV

lördag 10 december 2005 kl 8:00 - 13:00 i L003






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 hösten 2005 ger varje i tid inlämnad inlämningsuppgift en extra poäng.
Resultat och lösningar: Meddelas på kursens hemsida senast lördag 31 december 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 uppgifterna

Örebro universitet behöver en databas för att hålla reda på sina kurser, studenter och lärare. (Ja, de har förstås redan en sån databas, men den har tyvärr kraschat, och ingen hade kollat att backupen fungerade. Nu måste de göra en ny databas.)

Det som ska lagras i databasen är, mer exakt, följande:

  1. Kurser. Varje kurs har en kurskod, till exempel TDP127, och ett namn, till exempel PDA-applikationer med .NET. Kurskoden är unik, men namnet behöver inte vara det. Man bryr sig inte om att en och samma kurs kan ges flera gånger.
  2. Institutioner. Varje institution har ett unikt namn, till exempel Institutionen för idrott och hälsa. Varje kurs hör till en viss institution.
  3. Studenter. Varje student har ett personnummer och ett namn. Personnumret är förstås unikt, men namnet behöver inte vara det. Studenterna läser kurserna. Varje student kan läsa flera kurser, och på varje kurs kan det förstås gå flera studenter.
  4. Tentor. Varje tenta ingår i en viss kurs, och ges ett visst datum. Det ges aldrig flera tentor i samma kurs på samma dag. Studenterna skriver tentorna. Varje student kan skriva flera tentor, och på varje tenta kan det förstås delta flera studenter. Varje student som skrivit en viss tenta får ett visst betyg (U, G, VG, 3, 4 eller 5) på den tentan.
  5. Lärare. Varje lärare har ett personnummer och ett namn. Personnumret är förstås unikt, men namnet behöver inte vara det. Varje lärare tillhör en viss institution. Lärarna ansvarar också för kurser och tentor: varje kurs har en viss lärare som är kursansvarig, och varje tenta har en viss lärare som är examinator.

Uppgift 1 (10 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 (10 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 (14 p)

Formulera följande frågor i SQL.

a) (1p) Lista namnet på alla kurser som har ett namn som innehåller ordet programmering.

b) (1p) Vilken institution ger kursen Databasdestruktion? Vi vill veta den institutionens namn.

c) (1p) Finns det någon institution som inte ger några kurser alls? Vi vill veta den institutionens (eller de institutionernas) namn.

d) (1p) Hur många kurser ges av Institutionen för teknik?

e) (2p) Finns det någon tenta där examinator inte också är kursansvarig för kursen? Vi vill veta kursens namn och tentans datum för den tentan (eller de tentorna).

f) (4p) Vilken av de lärare som arbetar på Institutionen för teknik ansvarar för flest kurser? Vi vill veta den lärarens (eller de lärarnas) namn.

g) (4p) I genomsnitt hur många kurser ges av varje institution? (Observera: Om det finns tre institutioner, som ger 10, 2 respektive noll kurser, så ska svaret bli 4, inte 6.)

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

Uppgift 4 (4 p)

SQL-fråga e i uppgiften ovan, den om examinatorer som inte samtidigt är kursansvariga, 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åga c ska gå snabbt att köra? Motivera valet!

(Om du inte svarat på deluppgift e, så välj en annan av deluppgifterna i uppgiften ovan, och snabba upp den frågan i stället. Tala i så fall om vilken fråga du valde!)

Uppgift 5 (5 p)

Tabellen Tenta från uppgift 2 ska förstås inte se ut så här:

Kurskod Kursnamn Datum Student Betyg
TDP127 PDA-applikationer med .NET 2005-03-19 790101-2220 4
TDM126 Mobiltelefonapplikationer med J2ME 2005-04-12 790101-2220 3
UWO752 Måltidsvetenskap 2005-04-12 851119-6578 5

a) (2p)

Vilken normalform uppfyller tabellen? Motivera svaret!

b) (3p)

Använd teorin för normalformer och beskriv vilka problem som finns med den här tabellen. Rabbla inte upp de tekniska termerna (normalformer, funktionella beroenden och allt vad det heter), utan förklara vad de praktiska problemen är. Vilka saker är det som är opraktiska eller inte fungerar med den här lösningen?

Uppgift 6 (4 p)

Översätt det här EER-diagrammet till tabeller:

Ett EER-diagram med studenter och lärare

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.

Uppgift 7 (3 p)

Vilka är de viktigaste skillnaderna mellan de två databashanterarna Microsoft Access och MySQL?