Databasteknik: Teoriövning 6, om normalformer

Välj själv om du vill göra övningen ensam eller i någon typ av grupp. Det gör inget om en del av frågorna skulle vara svåra (eller omöjliga!) att svara på, för de är kanske avsedda att inleda en diskussion snarare än att ha ett enda rätt svar.

Förberedelser

Innan denna övning bör du ha tittat på föreläsning nummer sju om normalformer och normalisering på YouTube (uppdelad i två Youtube-videor). Man kan också läsa i kursboken eller motsvarande.

Uppgift 1

Här är en tabell, men vi har spillt kaffe på den, så tre av värdena i tabellen har suddats ut och lämnat tomma rutor:

Data
A B C D E
1 7 9 6 4
2 8 3 6 5
4 7 6
3 9 4 6 7
17 9 6 8

Vi vet att det finns två fullständiga funktionella beroenden i tabellen, nämligen B → C och {B, D} → E. Kan vi avgöra vad det stod i de tomma rutorna innan vi spillde kaffe på dem?

Uppgift 2

Vad är skillnaden mellan ett funktionellt beroende och ett fullständigt funktionellt beroende?

Vi vet alltså att i tabellen i uppgiften ovan finns de två fullständiga funktionella beroendena B → C och {B, D} → E finns i tabellen. Vilka icke-fullständiga funktionella beroenden vet vi då att det finns i tabellen?

Uppgift 3

Här är en tabell som verkar handla om båtar:

Båtdata
Båt Person Datum Tid 1 Tid 2
1 7 2022-11-21 10:00 12:00
1 13 2022-11-21 13:00 15:00
2 7 2022-11-22 10:00 12:00
3 7 2022-11-22 12:00 14:00

Kan vi svara på följande frågor?

Uppgift 4

Det visar sig att tabellen i uppgiften ovan beskriver uthyrning av båtar. Personer hyr båtar mellan två klockslag en viss dag. Uthyrningstiden är alltid två timmar. Samma båt kan inte vara uthyrd flera gånger samtidigt.

Uppgift 5

Nu får vi reda på att tabellen inte alls beskriver uthyrning av båtar, utan den beskriver att våra spioner upptäckt fientliga ubåtar. Vi tänker oss att en och samma spion inte kan upptäcka en och samma ubåt mer än en gång per dag. För att vara säkra på att det var en riktig ubåt, och att spionen inte inbillat sig, krävs två olika observationer på olika tider samma dag av samma spion och samma ubåt innan vi lägger in den i tabellen.

Uppgift 6

Här är tabellen Tidrapporter. Vi ser hur många timmar varje anställd har jobbat varje månad. Exempelvis har anställd nummer 7 arbetat 160 timmar under september. ID är primärnyckel, och ytterligare en kandidatnyckel bildas av kombinationen av Anställd och Månad.

Tidrapporter
ID Anställd Timmar Månad
1 7 160 september
2 8 48 oktober
3 6 144 november
4 9 160 augusti
5 9 100 oktober
6 1 80 september
7 8 140 augusti
8 9 184 november
9 3 48 augusti
10 2 184 november
11 1 100 november

Uppgift 7

Jag vill hålla reda på vilka TV-program jag ska se under dagen, och skapar tabellen Program, där jag lägger in när programmen går:

Program
Id Kanal Tid Namn Viktighet
1 TV3 13:40 Oprah Winfrey Show Inte så värst
2 SVT 1 18:00 Bolibompa Jätte
3 SVT 2 19:00,23:30 Kulturnyheterna Ganska
4 SVT 1 19:30 Rapport Sådär
5 TV4 20:00,22:00,23:30 Hem till gården Jätte
6 Kanal 5 23:00 Big Brother Ganska

Det finns två kandidatnycklar: dels Id, och dels kombinationen av Kanal och Tid. En del av programmen sänds i repris samma dag, till exempel Hem till gården som sänds inte mindre än tre gånger den här dagen. Viktighet anger hur gärna jag vill se programmet.

a) Tabellen uppfyller inte första normalformen. Förklara varför den inte gör det.

b) Tabellen uppfyller alltså inte första normalformen. Men hur är det med de andra normalformerna, nämligen 2NF, 3NF och BCNF? Vilka av dessa uppfyller tabellen? Motivera svaren!

c) Gör de uppdelningar av tabellen som behövs för att få en bättre design. Ange vilka nya tabeller som behövs och vilka kolumner varje tabell innehåller. Ange också vad som är primärnyckel, och vilka referensattribut som finns och vad de refererar till. Uppdelningen ska vara bra, och var och en av de nya tabellerna ska vara i BCNF.

d) Visa att var och en av de nya tabellerna uppfyller BCNF.

Uppgift 8

Lisa och Kalle bor tillsammans, och vill hålla koll på städningen. Därför skapar de följande tabell, som heter Städning:

Städning
Rum Dag Städare Yta Tid
Hallen 2007-11-16 Lisa 4 2
Hallen 2007-11-23 Kalle 4 2
Hallen 2007-11-30 Lisa 4 2
Köket 2007-11-16 Lisa 8 20
Köket 2007-11-23 Kalle 8 20
Köket 2007-11-30 Lisa 8 20
Sovrummet 2007-11-16 Lisa 10 10
Sovrummet 2007-11-23 Kalle 10 10
Sovrummet 2007-11-30 Lisa 10 10
Badrummet 2007-11-16 Lisa 4 20
Badrummet 2007-11-23 Kalle 4 20
Badrummet 2007-11-30 Lisa 4 20

Några observationer om tabellen:

Svara på följande frågor:

Uppgift 9

En förening har sex olika medlemmar, och lagrar dem i en tabell som ser ut så här. Id är primärnyckel.

Medlemmar
Nummer Namn Adress Postnummer Ort
1 Bo Ek Granvägen 16 702 21 Örebro
2 Anna Berg Granvägen 23 702 21 Örebro
3 Lars Skog Tallvägen 4 702 21 Örebro
4 Bo Lund Storgatan 3 703 61 Örebro
5 Bo Lund Storgatan 3 642 37 Flen
6 Bo Lund Storgatan 3 642 37 Flen

a) Vilken är den högsta normalform som tabellen uppfyller? Motivera svaret.

b) Baserat på ditt svar på fråga a, vad bör man göra? Varför?

Förslag på lösningar

Det finns lösningsförslag till en del av uppgifterna, men försök lösa dem själv först.


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 18 november 2022