IN2090-ukesoppgaver: Uke 8
Normalformer og tapsfri dekomposisjon
Oppgave 1
F?lgende relasjon bryter med 2NF:
EksamensResultat(emnekode, studentId, semester, emnenavn, karakter)
hvor emnekode
bestemmer emnenavn
; prim?rn?kkel er {emnekode, studentId, semester}
.
- Forklar hvorfor denne relasjonen ikke oppfyller 2NF.
- Dekomponer tapsfritt til BCNF.
L?sningsforslag
a.
FDen emnekode → emnenavn
bryter med BNCF ettersom emnekode
ikke er en supern?kkel. Videre bryter den med 3NF siden emnenavn
ikke er en n?kkelattributt. Den bryter ogs? 2NF siden emnekode
er en del av en kandidatn?kkel.
b.
Vi dekomponerer med hensyn p? FDen emnekode → emnenavn
og finner at emnekode^+ = {emnekode, emnenavn}
, og f?r da:
S1(emnekode, emnenavn)
S2(emnekode, studentId, semester, karakter)
Begge disse er p? BCNF.
Oppgave 2
F?lgende relasjon bryter med 2NF: R(A, B, C, D, E, F)
med f?lgende FD-er:
B,C → D
E → F
- Hvorfor bryter denne med 2NF?
- Dekomponer relasjonen til BCNF.
L?sningsforslag
a.
De attributtene som aldri forekommer p? noen h?yreside i FDene er A, B, C, E
, s? alle disse m? v?re med i alle kandidatn?kler. Det er enkelt ? se at disse faktisk utgj?r (den eneste) kandidatn?kkelen.
Vi ser s? at FDen B,C → D
bryter med BNCF fordi B, C
ikke er en supern?kkel, den bryter med 3NF fordi D
ikke er et n?kkelattributt, og den bryter med 2NF fordi B, C
er en del av en kandidatn?kkel.
b.
Vi starter med ? dekomponere mhp. B,C → D
og finner at {B, C}? = {B, C, D}
og f?r:
S1(B, C, D)
S2(B, C, A, E, F)
Vi ser at S1
er p? BCNF siden kun f?rste FD holder for den, og den har da eneste kandidatn?kkel {B, C}
.
S2
derimot har FDen E → F
, hvor E
ikke er en supern?kkel og dermed bryter med BCNF. Vi dekomponerer derfor mhp. denne hvor E? = {E, F}
og f?r:
S21(E, F)
S22(E, B, C, A)
Det er enkelt ? se at begge disse er p? BNCF, ettersom den ?verste kun har én FD, mens den nederste ikke har noen.
Oppgave 3
Vi har relasjonen: Timeliste(ansattnr, uke, ?r, navn, antTimer)
hvor ansattnr
bestemmer navn
og {ansattnr, uke ?r}
er eneste kandidatn?kkel.
- Hvilke funksjonelle avhengigheter har relasjonen?
- Tilfredsstiller denne relasjonen 2NF? Hvorfor/hvorfor ikke?
L?sningsforslag
a.
Vi har kun ansattnr → navn
og ansattnr, uke, ?r → antTimer
.
b.
Ettersom relasjonen har et attributt navn
som avhenger av kun deler av en kandidatn?kkel (ansattnr → navn
) tilfredstiller den ikke 2NF.
Oppgave 4
Vi har relasjonen: Ordre(ordre, kundenr, kundenavn, antall, sum, mva)
hvor kundenummer
bestemmer kundenavn
, mva
-verdien er alltid 25% av sum
og ordre
er eneste kandidatn?kkel.
- Hvilke funksjonelle avhengigheter har relasjonen?
- Hvilken normalform har relasjonen?
L?sningsforslag
a.
ordre → kundenr, kundenavn, antall, sum, mva
kundenr → kundenavn
mva → sum
sum → mva
b.
F?rste FD bryter ikke med BNCF. Andre FD bryter med BCNF siden kundenr
ikke er en supern?kkel; den bryter ogs? med 3NF siden kundenavn
ikke er en n?kkelattributt; men bryter ikke med 2NF siden kundenr
ikke er en del av en kandidatn?kkel. Det samme gjelder for de to siste FDene ogs?.
Alts? er relasjonen p? 2NF.
Oppgave 5 (fra eksamen 2015)
I denne oppgaven skal vi bruke f?lgende relasjon: Filmgenre(filmid, title, prodyear, genre)
Prim?rn?kkelen i tabellen er kombinasjonen av filmid
og genre
; alts? {filmid, genre}
. Videre vet vi ogs? at filmid
bestemmer b?de tittel
og produksjons?r
for en film.
- Bestem alle supern?klene i relasjonen
Filmgenre
. Skriv ned alle. - Bestem alle FD-ene i relasjonen
Filmgenre
. - Hvilken normalform er relasjonen
Filmgenre
p?? Begrunn svaret ditt.
L?sningsforslag
a.
Det er enkelt ? se at prim?rn?kkelen er den eneste kandidatn?kkelen. Alts? vil alle mengder attributter som inneholder filmid
og genre
v?re en supern?kkel, alts?:
{filmid, genre}
{filmid, genre, title}
{filmid, genre, prodyear}
{filmid, genre, title, prodyear}
b.
Vi f?r f?lgende FDer:
filmid → title, prodyear
Merk at prim?rn?kkelen ogs? gir oss FDen
filmid, genre → title, prodyear
men denne er bare en triviell utvidelse av FDen over, og trenger derfor ikke listes opp.
c.
Vi m? f?rst skrive FDen om til f?lgende FDer:
filmid → title
filmid → prodyear
Den f?rste FDen bryter med BNCF siden filmid
ikke er en supern?kkel; den bryter med 3NF siden title
ikke er en n?kkelattributt; og den bryter med 2NF siden filmid
er en del av en kandidatn?kkel.
Alts? er Filmgenre
p? 1NF.