64
Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF Martin Giese 7. november 2018 1

Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Normalformer or Normalisering1NF, 2NF, 3NF, BCNF

MartinGiese

7.november2018

�1

Page 2: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Agenda

• Nytteksempel• Medfunksjonelleavhengigheter

• 1NF(veldigkort)• 2NF,Grundig

• Hvaervitsen?–anomalier• Fåeksemplettil2NF• Hvaskjeddemedanomaliene?• Hvordangårdetgenerelt?

• 3NF• BCNF

�2

Page 3: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�3

Eksempel: Bestillinger

Integritetsregler:1. BestNr,ProdNr→ KundeNr,KundeAdr,AntBestiltfordi(BestNr,ProdNr)erprimærnøkkeliBestilling

2. BestNr→KundeNr:helebestillingforsammekunde3. KundeNr→KundeAdr:kundeharkunenadresse4. BestNr→KundeAdr:konsekvensav2og3

5. ProdNrogKundeNrerfremmednøklerforandrerelasjoner

Bestilling(BestNr,ProdNr,KundeNr,KundeAdr,AntBestilt)

Page 4: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�4

Eksempeldata

Bestilling(BestNr,ProdNr,KundeNr,KundeAdr,AntBestilt)

BestNr ProdNr KundeNr KundeAdr AntBestilt1 111 A Askim 102 222 B Bærum 202 202 B Bærum 153 111 A Askim 503 202 A Askim 10

Page 5: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�5

Sekundærinformasjon

Bestilling(BestNr,ProdNr,KundeNr,KundeAdr,AntBestilt)

BestNr ProdNr KundeNr KundeAdr AntBestilt1 111 A Askim 102 222 B Bærum 202 202 B Bærum 153 111 A Askim 503 202 A Askim 10

Sekundærinformasjon

Page 6: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Oppdateringsanomalier i eksemplet

• INSERTanomali:• Kanikkestartemeden«tom»bestillingutenetantallprodukter• Kanikkeleggeinnkundeadresseutenbestilling

• UPDATEanomalier:• Endringavkundenienbestillingkreveroppdateringfleresteder• Endringavadressentilenkundekreveroppdateringfleresteder

• DELETEanomali:• Slettingavenpostienbestillingkanmedføreslettingavkundeinformasjon• Slettingavenbestillingkanmedføreslettingavkundeinformasjon

�6

Page 7: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Dekomposisjon

• Dekomposisjonbryternedenrelasjonifleremindrerelasjoner.• Denbryternedentabelleifleretabeller.• Detskalværemuligårekonstruereinnholdetidenopprinneligetabllenfrakomponentene

• Dekomposisjonflyttersekundærinformasjonfraentabelle• Denkanaltsåforhindreoppdateringsanomalier• Ogdermedforbedreetdatabaseskjema

�7

Page 8: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�8

Normalformer

• Normalformereretuttrykkforhvorgodtviharlykkesiendekomposisjon• Johøyerenormalform,jofærreoppdateringsanomalier• Detfinnesalgoritmerforåomformefralaveretilhøyerenormalformer

Page 9: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�9

Utgangspunkt for normalformene 1NF–BCNF

•AlleintegritetsreglereriformavFDer (itilleggtildomeneskrankerogfremmednøkler)

Page 10: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�10

Normalformer, oversikt1NF

2NF

3NF

BCNF

Page 11: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�11

Første normalform

• Definisjon1NF(Codd1972):• Alledomenerbeståravatomæreverdier• Verdienavetgittattributtiettuppelforetgittattributtskalværeenslikatomærverdi(ellernil)

Page 12: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�12

Andre normalform• EnrelasjonRer2NFhvisenhverikketriviellFDX→Atilfredsstillerminstettavfølgendetrekrav:• Xinneholderenkandidatnøkkel• Aeretnøkkelattributt• IngenkandidatnøklerinneholderX

"IkketriviellFDX→A"betyratX⊆ RogA∈ R,menA∉X.

Page 13: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvordan ser brudd mot 2NF ut?

• AntaatenrelasjonRikkeer2NF.

�13

Page 14: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvordan ser brudd mot 2NF ut?

• AntaatenrelasjonRikkeer2NF.• FinnesenikketriviellFDX→Asomikketilfredsstillernoenavdisse:• Xinneholderenkandidatnøkkel• Aeretnøkkelattributt• IngenkandidatnøklerinneholderX

�13

Page 15: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvordan ser brudd mot 2NF ut?

• AntaatenrelasjonRikkeer2NF.• FinnesenikketriviellFDX→Asomikketilfredsstillernoenavdisse:• Xinneholderenkandidatnøkkel• Aeretnøkkelattributt• IngenkandidatnøklerinneholderX

• FinnesenikketriviellFDX→Aslikatt• Xinneholderingenkandidatnøkkel,OG• Aerikke-nøkkelattributt,OG• DetfinnesenkandidatnøkkelWsominneholderX,X⊆ W

�13

Page 16: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvordan ser brudd mot 2NF ut?

• AntaatenrelasjonRikkeer2NF.• FinnesenikketriviellFDX→Aslikatt• Xinneholderingenkandidatnøkkel,OG• Aerikke-nøkkelattributt,OG• DetfinnesenkandidatnøkkelWsominneholderX,X⊆ W

�14

Page 17: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvordan ser brudd mot 2NF ut?

• AntaatenrelasjonRikkeer2NF.• FinnesenikketriviellFDX→Aslikatt• Xinneholderingenkandidatnøkkel,OG• Aerikke-nøkkelattributt,OG• DetfinnesenkandidatnøkkelWsominneholderX,X⊆ W

• FinnesenikketriviellFDX→Aslikatt• Aerikke-nøkkelattributt,• DetfinnesenkandidatnøkkelWsomstrengtinneholderX,X⊂ W

�14

Page 18: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvordan ser brudd mot 2NF ut?

• AntaatenrelasjonRikkeer2NF.• FinnesenikketriviellFDX→Aslikatt• Xinneholderingenkandidatnøkkel,OG• Aerikke-nøkkelattributt,OG• DetfinnesenkandidatnøkkelWsominneholderX,X⊆ W

• FinnesenikketriviellFDX→Aslikatt• Aerikke-nøkkelattributt,• DetfinnesenkandidatnøkkelWsomstrengtinneholderX,X⊂ W• (medX=WhaddeXværtkandidatnøkkel)

�14

Page 19: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Omvendt…

• AntaenikketriviellFDX→Aslikatt• Aerikke-nøkkelattributt• DetfinnesenkandidatnøkkelWsomstrengtinneholderX,X⊂ W

• SidenWerkandidatnøkkeleringendelmengdeavWdet

�15

Page 20: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Omvendt…

• AntaenikketriviellFDX→Aslikatt• Aerikke-nøkkelattributt• DetfinnesenkandidatnøkkelWsomstrengtinneholderX,X⊂ W

• SidenWerkandidatnøkkeleringendelmengdeavWdet• SpesieltinneholderikkeXenkandidatnøkkel.

�15

Page 21: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Omvendt…

• AntaenikketriviellFDX→Aslikatt• Aerikke-nøkkelattributt• DetfinnesenkandidatnøkkelWsomstrengtinneholderX,X⊂ W

• SidenWerkandidatnøkkeleringendelmengdeavWdet• SpesieltinneholderikkeXenkandidatnøkkel.• DetfinnesaltsåenikketriviellFDX→Asomikketilfredsstillernoenavdisse:• Xinneholderenkandidatnøkkel• Aeretnøkkelattributt• IngenkandidatnøklerinneholderX

�15

Page 22: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Omvendt…

• AntaenikketriviellFDX→Aslikatt• Aerikke-nøkkelattributt• DetfinnesenkandidatnøkkelWsomstrengtinneholderX,X⊂ W

• SidenWerkandidatnøkkeleringendelmengdeavWdet• SpesieltinneholderikkeXenkandidatnøkkel.• DetfinnesaltsåenikketriviellFDX→Asomikketilfredsstillernoenavdisse:• Xinneholderenkandidatnøkkel• Aeretnøkkelattributt• IngenkandidatnøklerinneholderX

• Derforerikkerelasjoneni2NF.

�15

Page 23: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�16

Brudd på andre normalformFDX→AhvorXutgjørnoenav,menikkealle,attributteneienavkandidatnøkleneogAeretikke-nøkkelattributt.

Eksempel:

X A

Xerskravert(lyseblått/grått). Kandidatnøklerermarkertmedlyseblått.

Page 24: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�17

Brudd på 2NF i Eksemplet

FDer:1. BestNr,ProdNr→ KundeNr,KundeAdr,AntBestiltfordi(BestNr,ProdNr)erprimærnøkkeliBestilling

2. BestNr→KundeNr:helebestillingforsammekunde Bruddpå2NF!

3. KundeNr→KundeAdr:kundeharkunenadresse4. BestNr→KundeAdr:konsekvensav2og3 Bruddpå2NF!

Bestilling(BestNr,ProdNr,KundeNr,KundeAdr,AntBestilt)

Page 25: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�18

Normalisering• Normaliseringgårutpåådekomponererelasjonermedlavnormalformtilrelasjonermedhøyerenormalform.• Regel:GittenrelasjonR(XYZ)medenFDX→Y. HvisRdekomponerestilS(XY),T(XZ),vilvialdrikunnefåfalsketuplervednaturligjoinavSogT.• HvisvidekomponererR(XYZ)tilS(XY),T(XZ)ogdetikkeerslikatX→Yholder,vilvigenereltfåfalsketuplervednaturligjoinavSogT.

HeruttrykkerR(XYZ)atattributteneiRkandelesinnitre(ikketomme)disjunktemengderX,YogZ.

Page 26: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

�19

Page 27: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoinbevareralletupleriR:• R(X,Y,Z)⊇S(X,Y)⨝T(X,Z)

�19

Page 28: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoinbevareralletupleriR:• R(X,Y,Z)⊇S(X,Y)⨝T(X,Z)

• La<x,y,z>∈R(X,Y,Z)

�19

Page 29: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoinbevareralletupleriR:• R(X,Y,Z)⊇S(X,Y)⨝T(X,Z)

• La<x,y,z>∈R(X,Y,Z)• Daer<x,y>∈S(X,Y)og<x,z>∈T(X,Z)

�19

Page 30: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoinbevareralletupleriR:• R(X,Y,Z)⊇S(X,Y)⨝T(X,Z)

• La<x,y,z>∈R(X,Y,Z)• Daer<x,y>∈S(X,Y)og<x,z>∈T(X,Z)• NaturligjoinbrukerXsomjoinattributt

�19

Page 31: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoinbevareralletupleriR:• R(X,Y,Z)⊇S(X,Y)⨝T(X,Z)

• La<x,y,z>∈R(X,Y,Z)• Daer<x,y>∈S(X,Y)og<x,z>∈T(X,Z)• NaturligjoinbrukerXsomjoinattributt• Så<x,y,z>∈S(X,Y)⨝T(X,Z)

�19

Page 32: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoingirikkefleretuplerennR:• R(X,Y,Z)⊆S(X,Y)⨝T(X,Z)

�20

Page 33: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoingirikkefleretuplerennR:• R(X,Y,Z)⊆S(X,Y)⨝T(X,Z)

• La<x,y,z>∈S(X,Y)⨝T(X,Z)

�20

Page 34: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoingirikkefleretuplerennR:• R(X,Y,Z)⊆S(X,Y)⨝T(X,Z)

• La<x,y,z>∈S(X,Y)⨝T(X,Z)• Daer<x,y>∈S(X,Y)og<x,z>∈T(X,Z)

�20

Page 35: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoingirikkefleretuplerennR:• R(X,Y,Z)⊆S(X,Y)⨝T(X,Z)

• La<x,y,z>∈S(X,Y)⨝T(X,Z)• Daer<x,y>∈S(X,Y)og<x,z>∈T(X,Z)• Dafinnesyʹogzʹmed<x,y,zʹ>∈R(X,Y,Z)ogmed<x,yʹ,z>∈R(X,Y,Z)

�20

Page 36: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoingirikkefleretuplerennR:• R(X,Y,Z)⊆S(X,Y)⨝T(X,Z)

• La<x,y,z>∈S(X,Y)⨝T(X,Z)• Daer<x,y>∈S(X,Y)og<x,z>∈T(X,Z)• Dafinnesyʹogzʹmed<x,y,zʹ>∈R(X,Y,Z)ogmed<x,yʹ,z>∈R(X,Y,Z)• HuskFDX→Y:likXmedførerlikY:y=yʹ!

�20

Page 37: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoingirikkefleretuplerennR:• R(X,Y,Z)⊆S(X,Y)⨝T(X,Z)

• La<x,y,z>∈S(X,Y)⨝T(X,Z)• Daer<x,y>∈S(X,Y)og<x,z>∈T(X,Z)• Dafinnesyʹogzʹmed<x,y,zʹ>∈R(X,Y,Z)ogmed<x,yʹ,z>∈R(X,Y,Z)• HuskFDX→Y:likXmedførerlikY:y=yʹ!• Dermed:<x,y,z>∈R(X,Y,Z)

�20

Page 38: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Hvorfor?

• GittR(X,Y,Z)medFDX→Y,ogprojeksjonerS(X,Y),T(X,Z)• <x,y>∈S(X,Y)hvisogbarehvis∃zʹmed<x,y,zʹ>∈R(X,Y,Z)• <x,z>∈T(X,Z)hvisogbarehvis∃yʹmed<x,yʹ,z>∈R(X,Y,Z)

• NaturligjoingirnøyaktigdesammetuplenesomR:• R(X,Y,Z)=S(X,Y)⨝T(X,Z)

�21

Page 39: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�22

Bruk av regelen på Eksemplet

FD:• BestNr→ KundeNr• S(BestNr,KundeNr),T(BestNr,ProdNr,KundeAdr,AntBestilt)• BstKnd(BestNr,KundeNr),Best(BestNr,ProdNr,KundeAdr…)

• BestNr→ KundeAdr• BstKnd(BestNr,KundeAdr),Best(…,KundeNr,AntBestilt)

• BestNr→ KundeNr,KundeAdr• BestKunde(BestNr,KundeNr,KundeAdr)• BestAnt(BestNr,ProdNr,AntBestilt)

Bestilling(BestNr,ProdNr,KundeNr,KundeAdr,AntBestilt)

Page 40: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Anomalier fikset?

BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• INSERTanomali:• Kanstartemeden«tom»bestillingutenetantallprodukter✅ • Kanikkeleggeinnkundeadresseutenbestilling❌

• UPDATEanomalier:• Endringavkundenienbestillingkreveroppdateringettsted✅ • Endringavadressentilenkundekreveroppdateringfleresteder❌

• DELETEanomali:• Slettingavenpostienbestillingkanikkemedføreslettingavkundeinformasjon✅ • Slettingavenbestillingkanmedføreslettingavkundeinformasjon❌

�23

Page 41: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Normalisering til 2NF

• Huskbruddpå2NF:• FDX→AhvorXutgjørnoenav,menikkealle,attributteneienavkandidatnøkleneogAeretikke-nøkkelattributt.

• Observasjon:deterbareendeligmangeikke-nøkkelattributter• Kanvifiksebruddforikke-nøkkelattributterettogett?• Mådasjekkeatdekomponeringikkeførertilnyebrudd…

�24

Page 42: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Normalisering til 2NF (forts.)

• LaX→Aværeetbruddmot2NF:• FDX→AhvorXutgjørnoenav,menikkealle,attributteneienavkandidatnøkleneogAeretikke-nøkkelattributt.

• Men«minimalt»,altsåikkeXʹ→AforXʹ⊂ X• R(W,X,A,Y)medkandidatnøkkelWX,ogminimalFDX→A• DekomponertilS(X,A)ogT(W,X,Y)etterregelen

• Sernåi2NF,sidenXerkandidatnøkkelforS.• TinneholderikkelengerA,fortsettmedflerebruddforandreikke-nøkkelattributteriY

�25

Page 43: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�26

Tredje normalform

• EnrelasjonRer3NFhvisenhverikketriviellFDX→Atilfredsstillerminstettavfølgendetokrav:• Xinneholderenkandidatnøkkel• Aeretnøkkelattributt

• Rbryter3NFhvisdetfinnesenikketriviellFDX→AhvorXikkeinneholdernoenkandidatnøkkelogAeretikke-nøkkelattributt.

Page 44: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�27

Brudd på tredje, men ikke andre, normalformFDX→AhvoringenkandidatnøklerinneholderX,Xikkeinneholdernoenkandidatnøkkel,ogAeretikke-nøkkelattributt.

Eksempler:

X A

X A

Page 45: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�28

Eksempel på brudd mot 3NF

Page 46: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�28

Eksempel på brudd mot 3NF

• Eksempletetternormaliseringtil2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

Page 47: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�28

Eksempel på brudd mot 3NF

• Eksempletetternormaliseringtil2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• FortsattFDKundeNr→KundeAdriBestKunde!• Ikkebruddmot2NF• Ikketriviell,KundeAdrerikke-nøkkelattributt,ingenkandidatnøklerinneholderAdresse.• Bruddmot3NF

Page 48: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

Page 49: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

• I2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

Page 50: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

• I2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• BrukesammeregelmedKundeNr→KundeAdr

Page 51: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

• I2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• BrukesammeregelmedKundeNr→KundeAdr Kunde(KundeNr,KundeAdr)

Page 52: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

• I2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• BrukesammeregelmedKundeNr→KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr,KundeNr)

Page 53: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

• I2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• BrukesammeregelmedKundeNr→KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr,KundeNr) BestAnt(BestNr,ProdNr,AntBestilt)

Page 54: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

• I2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• BrukesammeregelmedKundeNr→KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr,KundeNr) BestAnt(BestNr,ProdNr,AntBestilt)

• Denneeri3NF

Page 55: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

• I2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• BrukesammeregelmedKundeNr→KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr,KundeNr) BestAnt(BestNr,ProdNr,AntBestilt)

• Denneeri3NF

Page 56: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�29

Videre dekomponering

• I2NF:BestKunde(BestNr,KundeNr,KundeAdr)BestAnt(BestNr,ProdNr,AntBestilt)

• BrukesammeregelmedKundeNr→KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr,KundeNr) BestAnt(BestNr,ProdNr,AntBestilt)

• Denneeri3NF

Page 57: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

Anomalier fikset?

Kunde(KundeNr,KundeAdr) BestKunde(BestNr,KundeNr) BestAnt(BestNr,ProdNr,AntBestilt)

• INSERTanomali:• Kanstartemeden«tom»bestillingutenetantallprodukter✅ • Kanleggeinnkundeadresseutenbestilling✅

• UPDATEanomalier:• Endringavkundenienbestillingkreveroppdateringettsted✅ • Endringavadressentilenkundekreveroppdateringettsted✅

• DELETEanomali:• Slettingavenpostienbestillingkanikkemedføreslettingavkundeinformasjon✅ • Slettingavenbestillingkanikkemedføreslettingavkundeinformasjon✅

�30

Page 58: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�31

Boyce-Codd normalform

• EnrelasjonRerBCNFhvisenhverikketriviellFDX→Atilfredsstillerfølgendekrav:• Xinneholderenkandidatnøkkel

• RbryterBCNFhvisdetfinnesenikketriviellFDX→AhvorXikkeinneholdernoenkandidatnøkkel

Page 59: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�32

Brudd på Boyce-Codd, men ikke tredje, normalformFDX→AhvorAeretnøkkelattributtogXikkeinneholdernoenkandidatnøkkel.

Eksempler:

X A

X A

X A

Page 60: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�33

Normalisering til 3NF

• Detlarsegalltidgjøreånormalisere(dekomponere)til3NF• Menhvisenrelasjonerpå3NFogikkepåBCNF,betyrdetatdetkanfinnesnoenfunksjonelleavhengighetersommåsjekkesvedalleinnsettingerogoppdateringer• (Itilleggmåselvfølgeligprimær-ogkandidatnøkleralltidsjekkes)

Page 61: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�34

Normalisering til BCNF • Detlarsegalltidgjøreånormalisere(dekomponere)tilBCNF• MenhvisvihardekomponerttilBCNF,kandetværeatvietterpåharnoenfunksjonelleavhengighetersomgårpåtversavrelasjonene,ogdervivedalleinnsettingerogoppdateringermåjoinedeinvolverterelasjoneneforåkunnesjekkeatdefunksjonelleavhengighetenefortsatteroppfylt.

Page 62: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

�35

Normalisering til 3NF vs. BCNF • Vikanalltidnormaliseretil3NFutenåfåfunksjonelleavhengigheterpåtversavrelasjonene.• Derforvilmansomregelnøyesegmedånormaliserebaretil3NFidetilfellenehvoralternativeternormaliseringtilBCNFmedfunksjonelleavhengigheterpåtvers.• Ipraksishardeflesterelasjonerikkesåmangeulikekandidatnøkler.Derforvilrelasjoneri3NFoftealleredeværeiBCNF.

Page 63: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

NormalformerGittenrelasjonR,medetsettFD-erpåformenX→ A,derXogAeretsettavattributter

1NF:• Rinneholderkunatomæreverdier/attributter2NF:• XerensupernøkkeliR,eller• Aeretnøkkelattributt,eller• XerikkeendelmengdeavnoennøkleriR3NF:• XerensupernøkkeliR,eller• AeretnøkkelattributtBCNF:• XerensupernøkkeliR

1NF

2NF

3NF

BCNF

Ikke-normalisertlagring

�36

Page 64: Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF · Brudd på 2NF i Eksemplet FDer: 1.BestNr, ProdNr → KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i

ViharFD-en X→A

ErXensupernøkkel?

Nei:X→AbryterBCNF

Ja:X→AoppfyllerBCNF

ErAetnøkkel-attributt?

Ja:X→AbryterBCNF,men

oppfyller3NF

Nei:X→Abryter3NF

ErXendelmengdeavennøkkel?

Nei:X→Abryter3NF, menoppfyller2NF

Ja:X→Abryter2NF, menoppfyller1NF

1NF:Bareatomæreverdier/attributter2NF:XerensupernøkkeliR,ellerAeretnøkkelattributt,ellerXerikkeendelmengdeavnoennøkleriR3NF:XerensupernøkkeliR,ellerAeretnøkkelattributtBCNF:XerensupernøkkeliR

�37