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








Tentamen i

Databaskonstruktion

för D1, SDU1 m fl

lördag 9 december 2006 kl 14:00 - 19:00 i L001








Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 45.
För betyget 3 respektive G krävs 25 poäng.
För den som följt kursen hösten 2006 ger varje i tid inlämnad inlämningsuppgift en extra poäng.
Den som inte gått kursen hösten 2006, får dessa (fem) extrapoäng ändå.
Resultat och lösningar: Meddelas på kursens hemsida senast lördag 30 december 2006.
Visning: Måndag 2 januari 2007 kl 12:00-12:30 i mitt rum (T2220).
Efter visningen kan tentorna hämtas på expeditionen.
Examinator och jourhavande: Thomas Padron-McCarthy, telefon 070-7347013.



LYCKA TILL!

Scenario till uppgifterna

På ett sjukhus finns patienter och personal. Sjukhuset består av flera avdelningar. Patienterna vårdas på avdelningarna, och personalen jobbar på avdelningarna. Patienterna har diagnosticerats med olika sjukdomar.

Så här kan ett ER-diagram för sjukhuset se ut:

Ett ER-diagram för sjukhuset

(Ordet "personal" används här i den nya, moderna betydelsen, där man till exempel kan säga "en personal" om en sjuksköterska.)

Uppgift 1 (8 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 2 (12 p)

Formulera följande frågor i SQL. (När vi söker efter patienter, vill vi hela tiden veta deras namn och nummer.)

a) (1p) Vilka patienter finns på ortopedavdelningen, alltså avdelningen som heter "Ortopedi"?

b) (2p) Vilka patienter har pest?

c) (1p) Vilka patienter vårdas inte på någon avdelning?

d) (1p) Vilka patienter har (såvitt vi vet) inga sjukdomar?

e) (1p) Hur många personal av varje typ (som till exempel läkare, sjuksköterskor och tekniker) finns det?

f) (3p) Vilken sjukdom är vanligast? (Du kan anta att det finns minst en sjuk patient, dvs att den vanligaste sjukdomen inte är en som förekommer noll gånger.)

g) (3p) Pest är smittsamt! Vilka patienter har inte pest (än), men vårdas på samma avdelning som någon patient som har pest?

Uppgift 3 (5 p)

a) (4p) SQL-frågorna a, b, c och d i uppgiften ovan körs väldigt ofta, och 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-d ska gå snabbt att köra? Motivera valet!

Det finns bara något tiotal avdelningar på sjukhuset, men annars finns det många tusen rader i varje tabell.

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

Uppgift 4 (5 p)

Entitetstypen Personal, som vi känner igen från scenariot, ser ut så här:

Entitetstypen Personal

Att ha personaltypen som ett vanligt attribut ger vissa nackdelar, så vi kan i stället skapa en särskild entitetstyp för personaltyperna:

Entitetstyperna Personal och Personaltyp

a) (2p)

Översätt det här nya 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.

b) (3p)

I och med att personaltyperna nu hanteras separat från personalen, så kan vi lagra personaltyper som det inte finns någon personal som tillhör. Vi kan till exempel ha personaltypen fältskär (som det inte längre finns några på sjukhuset) och personaltypen alienfysiolog (som vi ännu inte har någon).

Skriv om SQL-fråga 2e, om hur många personal det finns av varje typ, så att den fungerar i den här nya databasen. De personaltyper som det inte finns någon personal som tillhör ska ha antalet 0 i svaret.

Uppgift 5 (5 p)

Det här är ett dåligt försök att svara på uppgift 4a här ovan:

Personalnummer Personalnamn Typnummer Typnamn Antal
1 Anna Ek 1 läkare 5
2 Bo Ek 2 ssk 1
3 Cesar Ek 4 tekniker 1
4 Donna Ek 1 läkare 5
5 Erik Ek 3 usk 1
6 Filip Ek 5 städare 1
7 Gunilla Ek 6 väktare 1
8 Hans Ek 1 läkare 5
9 Inga Ek 1 läkare 5
10 Jörn Ek 1 läkare 5
null null 7 fältskär 0
null null 8 alienfysiolog 0

Tanken är att Personalnummer ska vara primärnyckel.

a) (2p)

Vilka av de olika normalformerna 1NF, 2NF, 3NF och BCNF uppfyller den här tabellen? Motivera svaret.

b) (2p)

Visa på några problem som uppstår i tabellen, och som vi skulle sluppit med en högre grad av normalisering.

c) (1p)

Vad är skillnaden mellan funktionellt beroende och fullständigt funktionellt beroende? Visa med exempel från den dåliga tabellen ovan.

Uppgift 6 (5 p)

Här kommer fem påståenden. Det kan hända att en del av dem är fel.
Ange för varje påstående om det är rätt eller fel, och (om det var fel) förklara varför det är fel.

a) XML är ett sätt att göra databasen mer aktiv, genom att man skriver XML-kod som sen körs automatiskt när vissa villkor är uppfyllda i databasen.

b) Microsoft Access är egentligen ingen riktig databashanterare, utan ett grafiskt verktyg byggt runt Microsofts riktiga databashanterare, som heter SQL Server.

c) På webben är det vanligt att man låter en webbplats lagra data i en databas. Ofta används MySQL som databashanterare.

d) ACID-transaktioner är ett sätt att skydda Internet-banker mot bedrägeriförsök.

e) Databaser används sällan i tekniska tillämpningar som styrsystem och programmering, utan nästan enbart för administrativa ändamål som bokföring, personalregister och liknande.

Uppgift 7 (5 p)

Här är tre par av databastermer, som kan kallas för motsatspar. På något sätt är de motsatser till varandra.
Förklara för varje par vad de två termerna betyder, och på vilket vis de är motsatser till varandra.

a) schema och data

b) grant och revoke

c) fysiskt och logiskt