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








Tentamen i

Databaskonstruktion

för D1, D3 m fl

onsdag 16 augusti 2006 kl 8:00 - 13:00 i L001








Hjälpmedel: Inga hjälpmedel.
Poängkrav: Maximal poäng är 40.
För betyget 3 respektive G krävs 20 poäng.
Resultat: Meddelas på kursens hemsida senast måndag 28 augusti 2006.
Visning: Måndag 28 augusti 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 uppgifterna

Felix, fast på den här bilden är han inte tre år än

Felix, som är tre år gammal, vill strukturera upp sin lek, och därför vill han ha en relationsdatabas för att hålla reda på sina leksaker och sina lekkamrater.

Det han behöver hålla reda på är följande:

  1. Leksaker. Varje leksak har ett unikt namn, till exempel Stora blå grävskopan, och ett inköpsdatum. Den har också ett unikt nummer, som också uttrycks i form av en streckkod som är fastklistrad på leksaken.
  2. Leksakslådor som man ska använda för att lägga leksakerna i. Varje låda har ett unikt nummer och en placering, till exempel Under trappan i källaren. Det kan finnas flera lådor på samma plats, vilket betyder att flera lådor kan ha samma placering.
  3. Placering av leksakerna. Leksakerna ska ligga i leksakslådorna, och varje leksak har en korrekt placering, dvs en leksakslåda som den ska ligga i. Men ibland hamnar leksakerna i fel låda, och varje leksak har också en aktuell placering, som är den leksakslåda som den just nu ligger i.
  4. Lekkamrater. Varje lekkamrat har ett unikt namn, till exempel Anton. Vi ger också varje lekkamrat ett unikt nummer, som vi hoppas kunna tatuera i form av en streckkod i pannan på lekkamraten.
  5. Lekar. En lek har utspelats vid ett visst tillfälle, och för varje lek vill vi kunna lagra vilken dag den skedde, vilka lekkamrater som deltog, och vilka leksaker som användes. Varje lek kan innefatta flera leksaker och flera lekkamrater. Såväl lekkamrater som leksaker kan återanvändas, och alltså vara med i flera olika lekar. Varje lek får också ett unikt nummer.

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 (9 p)

Formulera följande frågor i SQL.

a) (1p) Vilket nummer har lekkamraten som heter Anton?

b) (1p) Vilka leksaker ska finnas i leksakslådan som står på balkongen? Vi vill veta de leksakernas nummer och namn.

c) (2p) I vilka leksakslådor finns det just nu minst en leksak? Vi vill veta dessa lådors nummer och placering.

d) (2p) Vilka leksaker finns just nu inte i sin rätta låda? Vi vill veta de leksakernas nummer och namn.

e) (3p) Vilken leksakslåda är fullast, dvs innehåller just nu flest leksaker? Vi vill veta den lådans nummer och placering. (Vi förutsätter att det finns leksaker åtminstone i någon låda.)

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

Uppgift 4 (4 p)

a) (3p) Felix har några få leksakslådor, men enorma mängder leksaker. Därför visar det sig att SQL-frågorna b, c och d (strunta i e) i uppgiften ovan börjar gå långsamt. 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 dessa frågor ska gå snabbt att köra? Motivera valet!

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

Uppgift 5 (9 p)

Följande tabell, som ingår som en del i en (dålig) lösning på uppgift 2 ovan, är tänkt att lagra leksaker, leksakslådor och leksakernas placering (såväl den korrekta som den aktuella).

Leksak Namn Datum RättLåda Placering AktuellLåda Placering
1 Stora blå grävskopan 2005-12-22 2 På balkongen 2 På balkongen
2 Lilla gula grävskopan 2006-03-10 1 I garderoben 1 I garderoben
3 Röda fotbollen 2006-04-02 3 I källaren 4 I köket
5 Trampbilen 2006-06-29 5 I källaren 4 I köket

Exempelvis visar tabellen att stora blå grävskopan finns i låda nummer 2, som står på balkongen, precis som den ska. Röda fotbollen, som ska vara i låda nummer 3, i källaren, har dock i stället råkat hamna i låda 4, som står i köket.

a) (2p) Vilka nycklar finns i tabellen?

b) (2p) Vilka fullständiga funktionella beroenden finns i tabellen?

c) (2p) Tabellen uppfyller inte kraven för BCNF. Vilken är den högsta normalform (av 1NF, 2NF och 3NF) som tabellen uppfyller? Motivera svaret!

d) (3p) Dela upp tabellen i flera, som uppfyller BCNF. Uppdelningen ska vara bra.

Uppgift 6 (5 p)

Förklara följande termer. Ange (kort) vad det är för nåt och vad det används till.

a) ACID-transaktion

b) vänster-ytter-join (på engelska: left outer join)

c) commit

d) rollback (ibland även kallat abort)

e) databashanterare

Uppgift 7 (3 p)

Följande tre påståenden är allihop fel. Förklara för vart och ett av påståendena vad det är som är fel, och hur det egentligen är.

a)

Fönstret nedan, från Microsoft Access, visar relationerna i en databas. Access arbetar med relationsdatabaser, vilket betyder att det finns kopplingar, så kallade relationer, mellan tabellerna. Relationerna är utritade som streck mellan tabellerna.

Ett fönster från Microsoft Access

b)

Principen bakom en databasbaserad webbplats är att man lägger webbsidorna i en databas. I och med att webbsidorna ligger i en databas, går de snabbare att hämta.

c)

En så kallad lagrad procedur innehåller triggers. När proceduren anropas "utlöses" dessa triggers, det vill säga körs, ungefär som programrader i ett vanligt datorprogram.