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}.

  1. Forklar hvorfor denne relasjonen ikke oppfyller 2NF.
  2. 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
  1. Hvorfor bryter denne med 2NF?
  2. 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.

  1. Hvilke funksjonelle avhengigheter har relasjonen?
  2. 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.

  1. Hvilke funksjonelle avhengigheter har relasjonen?
  2. 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.

  1. Bestem alle supern?klene i relasjonen Filmgenre. Skriv ned alle.
  2. Bestem alle FD-ene i relasjonen Filmgenre.
  3. 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.