Normalformer or Normalisering 1NF, 2NF, 3NF, BCNF

Like dokumenter
Dagens tema: Oppdateringsanomalier Normalformer

INF1300 Introduksjon til databaser

Oppdateringsanomalier Normalformer

Oppdateringsanomalier. Normalformer. Institutt for informatikk INF

Relasjonsdatabasedesign

Relasjonsdatabasedesign

UNIVERSITETET. Relasjonsdatabasedesign

Hva kjennetegner god relasjonsdatabasedesign? Eksempel: Grossistdatabase versjon 1

Relasjonsdatabaseteori

Relasjonsdatabasedesign

Relasjonsdatabasedesign

Relasjonsdatabasedesign

Relasjonsdatabasedesign

Relasjonsdatabasedesign

Relasjonsdatabasedesign

Plenum: Nøkler, normalformer og funksjonelle avhengigheter

Relasjonsdatabasedesign

Relasjonsdatabasedesign

IN2090 Databaser og datamodellering. Databasedesign og normalformer

Normalisering. Hva er normalisering?

Relasjonsdatabasedesign

Normalisering. Hva er normalisering?

Normalisering. Hva er normalisering?

Relasjonsdatabasedesign

Oppskriftsbok. FDer og MVDer - oversikt: se s. 3 Relasjonsalgebra - oversikt: se s. 45

Relasjonsdatabasedesign (forts.)

UNIVERSITETET I OSLO. Relasjonsmodellen. Relasjoner og funksjonelle avhengigheter. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

UNIVERSITETET I OSLO. Oppskriftsbok. FDer og MVDer Relasjonsalgebra. Institutt for Informatikk. INF3100 Ellen Munthe-Kaas 1

Relasjonsdatabasedesign

Databaser. - Normalisering -

Relasjonsdatabasedesign (forts.)

INF3100 Databasesystemer

Relasjonsdatabasedesign

Repetisjon: Normalformer og SQL

Normalformer utover 4NF (ikke pensum)

IN2090 Introduksjon til databaser

Relasjonsdatabasedesign. Ekstramateriale: Normalformer utover 4NF (ikke pensum)

Normalisering. Partielle avhengigheter Transitive avhengigheter Normalformer: 1NF, 2NF, 3NF, BCNF Normaliseringsstegene Denormalisering

INF1300 Introduksjon til databaser

Oppgaver INF3100. Oversikt over innholdet

1. Normalisering Kommentarer til læreboka

Dagens tema: Relasjonsmodellen (funksjonelle avhengigheter og nøkler, integritetsregler) Realisering: Fra ORM til relasjoner

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

INF3100 Databasesystemer

Oppgave 1 ER- og relasjonsmodell 10 %

For alle ikke-trivielle FDer X A i R: eller A er et nøkkelattributt i R eller X K for noen kandidatnøkkel K i R

Oppgaver INF3100. Oversikt over innholdet

INF212 - Databaseteori. Kursinnhold

Kunnskapsorganisasjon og gjenfinning 1

Integritetsregler i SQL. Primærnøkler

Det matematisk-naturvitenskapelige fakultet. Kontroller at oppgavesettet er komplett før du begynner å besvare det.

Integritetsregler i SQL

INF1300 Introduksjon til databaser

Databaser: Relasjonsmodellen, del I

Universitetet i Oslo Institutt for informatikk. Relasjonsmodellen og normaliseringsteori. Til bruk i IN 212. Ragnar Normann.

Løsningsforslag for Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Løsningsforslag maskindatabasen på Ifi SQL og normalisering

Integritetsregler i SQL

1. Relasjonsmodellen Kommentarer til læreboka

Løsningsskisse til eksamensoppgave i TDT4145 Datamodellering og databasesystemer

EKSAMEN DATABASER

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

UNIVERSITETET I OSLO

Normalisering. ER-modell

Løsningsskisse til eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Databaser. Relasjonsmodellen 1 Læreboka: Kap. 2 Relasjonsmodellen Faglærere: Tore Mallaug, Kjell Toft Hansen

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Løsningsforslag til eksamen i IN2090 Databaser og datamodellering og INF1300 Introduksjon til databaser 6. desember :30 18:30 (4 timer)

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Relasjonsmodellen og normaliseringsteori

Relasjonsalgebraen. Algebra

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

SQL Structured Query Language. Definere tabeller Skranker Fylle tabeller med data

Innhold Forord Innledning Kapittel 1 Introduksjon til databaser og databasesystem

Løsning til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

EKSAMEN 6102 / 6102N DATABASER

SQL Structured Query Language

Skolekorpset. Løsningsforslag til oppgave gitt i forelesning om normalisering LC238D Datamodellering og databaser: Normalisering

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas

UNIVERSITETET I OSLO RELASJONSALGEBRA. Regning med relasjoner. Institutt for Informatikk. INF Ellen Munthe-Kaas 1

Oppgave 1a Definer følgende begreper: Nøkkel, supernøkkel og funksjonell avhengighet.

Skisse til løsning av eksamensoppgave i TDT4145 Datamodellering og databasesystemer

INF1300 Introduksjon til databaser

Samtidighetsfenomener og anomalier i eksekveringsplaner. INF Ellen Munthe-Kaas 1

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

INF3100 V2018 Obligatorisk oppgave nr. 1

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

INF1300 SQL Structured Query Language del 1. Stoff som blir/ble forelest i oktober 2013

Transkript:

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

Agenda Nytt eksempel Med funksjonelle avhengigheter 1NF (veldig kort) 2NF, Grundig Hva er vitsen? anomalier Få eksemplet til 2NF Hva skjedde med anomaliene? Hvordan går det generelt? 3NF BCNF 2

Eksempel: Bestillinger Bestilling(BestNr, ProdNr, KundeNr, KundeAdr, AntBestilt) Integritetsregler: 1. BestNr, ProdNr KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i Bestilling 2. BestNr KundeNr: hele bestilling for samme kunde 3. KundeNr KundeAdr: kunde har kun en adresse 4. BestNr KundeAdr: konsekvens av 2 og 3 5. ProdNr og KundeNr er fremmednøkler for andre relasjoner 3

Eksempeldata Bestilling(BestNr, ProdNr, KundeNr, KundeAdr, AntBestilt) BestNr ProdNr KundeNr KundeAdr AntBestilt 1 111 A Askim 10 2 222 B Bærum 20 2 202 B Bærum 15 3 111 A Askim 50 3 202 A Askim 10 4

Sekundærinformasjon Bestilling(BestNr, ProdNr, KundeNr, KundeAdr, AntBestilt) BestNr ProdNr KundeNr KundeAdr AntBestilt 1 111 A Askim 10 2 222 B Bærum 20 2 202 B Bærum 15 3 111 A Askim 50 3 202 A Askim 10 Sekundærinformasjon 5

Oppdateringsanomalier i eksemplet INSERT anomali: Kan ikke starte med en «tom» bestilling uten et antall produkter Kan ikke legge inn kundeadresse uten bestilling UPDATE anomalier: Endring av kunden i en bestilling krever oppdatering flere steder Endring av adressen til en kunde krever oppdatering flere steder DELETE anomali: Sletting av en post i en bestilling kan medføre sletting av kundeinformasjon Sletting av en bestilling kan medføre sletting av kundeinformasjon 6

Dekomposisjon Dekomposisjon bryter ned en relasjon i flere mindre relasjoner. Den bryter ned en tabelle i flere tabeller. Det skal være mulig å rekonstruere innholdet i den opprinnelige tabllen fra komponentene Dekomposisjon flytter sekundær informasjon fra en tabelle Den kan altså forhindre oppdateringsanomalier Og dermed forbedre et databaseskjema 7

Normalformer Normalformer er et uttrykk for hvor godt vi har lykkes i en dekomposisjon Jo høyere normalform, jo færre oppdateringsanomalier Det finnes algoritmer for å omforme fra lavere til høyere normalformer 8

Utgangspunkt for normalformene 1NF BCNF Alle integritetsregler er i form av FDer (i tillegg til domeneskranker og fremmednøkler) 9

Normalformer, oversikt 1NF 2NF 3NF BCNF 10

Første normalform Definisjon 1NF (Codd 1972): Alle domener består av atomære verdier Verdien av et gitt attributt i et tuppel for et gitt attributt skal være en slik atomær verdi (eller nil) 11

Andre normalform En relasjon R er 2NF hvis enhver ikketriviell FD X A tilfredsstiller minst ett av følgende tre krav: X inneholder en kandidatnøkkel A er et nøkkelattributt Ingen kandidatnøkler inneholder X "Ikketriviell FD X A" betyr at X R og A R, men A X. 12

Hvordan ser brudd mot 2NF ut? Anta at en relasjon R ikke er 2NF. 13

Hvordan ser brudd mot 2NF ut? Anta at en relasjon R ikke er 2NF. Finnes en ikketriviell FD X A som ikke tilfredsstiller noen av disse: X inneholder en kandidatnøkkel A er et nøkkelattributt Ingen kandidatnøkler inneholder X 13

Hvordan ser brudd mot 2NF ut? Anta at en relasjon R ikke er 2NF. Finnes en ikketriviell FD X A som ikke tilfredsstiller noen av disse: X inneholder en kandidatnøkkel A er et nøkkelattributt Ingen kandidatnøkler inneholder X Finnes en ikketriviell FD X A slik att X inneholder ingen kandidatnøkkel, OG A er ikke-nøkkelattributt, OG Det finnes en kandidatnøkkel W som inneholder X, X W 13

Hvordan ser brudd mot 2NF ut? Anta at en relasjon R ikke er 2NF. Finnes en ikketriviell FD X A slik att X inneholder ingen kandidatnøkkel, OG A er ikke-nøkkelattributt, OG Det finnes en kandidatnøkkel W som inneholder X, X W 14

Hvordan ser brudd mot 2NF ut? Anta at en relasjon R ikke er 2NF. Finnes en ikketriviell FD X A slik att X inneholder ingen kandidatnøkkel, OG A er ikke-nøkkelattributt, OG Det finnes en kandidatnøkkel W som inneholder X, X W Finnes en ikketriviell FD X A slik att A er ikke-nøkkelattributt, Det finnes en kandidatnøkkel W som strengt inneholder X, X W 14

Hvordan ser brudd mot 2NF ut? Anta at en relasjon R ikke er 2NF. Finnes en ikketriviell FD X A slik att X inneholder ingen kandidatnøkkel, OG A er ikke-nøkkelattributt, OG Det finnes en kandidatnøkkel W som inneholder X, X W Finnes en ikketriviell FD X A slik att A er ikke-nøkkelattributt, Det finnes en kandidatnøkkel W som strengt inneholder X, X W (med X = W hadde X vært kandidatnøkkel) 14

Omvendt Anta en ikketriviell FD X A slik att A er ikke-nøkkelattributt Det finnes en kandidatnøkkel W som strengt inneholder X, X W Siden W er kandidatnøkkel er ingen delmengde av W det 15

Omvendt Anta en ikketriviell FD X A slik att A er ikke-nøkkelattributt Det finnes en kandidatnøkkel W som strengt inneholder X, X W Siden W er kandidatnøkkel er ingen delmengde av W det Spesielt inneholder ikke X en kandidatnøkkel. 15

Omvendt Anta en ikketriviell FD X A slik att A er ikke-nøkkelattributt Det finnes en kandidatnøkkel W som strengt inneholder X, X W Siden W er kandidatnøkkel er ingen delmengde av W det Spesielt inneholder ikke X en kandidatnøkkel. Det finnes altså en ikketriviell FD X A som ikke tilfredsstiller noen av disse: X inneholder en kandidatnøkkel A er et nøkkelattributt Ingen kandidatnøkler inneholder X 15

Omvendt Anta en ikketriviell FD X A slik att A er ikke-nøkkelattributt Det finnes en kandidatnøkkel W som strengt inneholder X, X W Siden W er kandidatnøkkel er ingen delmengde av W det Spesielt inneholder ikke X en kandidatnøkkel. Det finnes altså en ikketriviell FD X A som ikke tilfredsstiller noen av disse: X inneholder en kandidatnøkkel A er et nøkkelattributt Ingen kandidatnøkler inneholder X Derfor er ikke relasjonen i 2NF. 15

Brudd på andre normalform FD X A hvor X utgjør noen av, men ikke alle, attributtene i en av kandidatnøklene og A er et ikke-nøkkelattributt. Eksempel: X A X er skravert (lyseblått/grått). Kandidatnøkler er markert med lyseblått. 16

Brudd på 2NF i Eksemplet Bestilling(BestNr, ProdNr, KundeNr, KundeAdr, AntBestilt) FDer: 1. BestNr, ProdNr KundeNr, KundeAdr, AntBestilt fordi (BestNr, ProdNr ) er primærnøkkel i Bestilling 2. BestNr KundeNr: hele bestilling for samme kunde Brudd på 2NF! 3. KundeNr KundeAdr: kunde har kun en adresse 4. BestNr KundeAdr: konsekvens av 2 og 3 Brudd på 2NF! 17

Normalisering Normalisering går ut på å dekomponere relasjoner med lav normalform til relasjoner med høyere normalform. Regel: Gitt en relasjon R(XYZ) med en FD X Y. Hvis R dekomponeres til S(XY), T(XZ), vil vi aldri kunne få falske tupler ved naturlig join av S og T. Hvis vi dekomponerer R(XYZ) til S(XY), T(XZ) og det ikke er slik at X Y holder, vil vi generelt få falske tupler ved naturlig join av S og T. Her uttrykker R(XYZ) at attributtene i R kan deles inn i tre (ikketomme) disjunkte mengder X, Y og Z. 18

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) 19

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join bevarer alle tupler i R: R(X,Y,Z) S(X,Y) T(X,Z) 19

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join bevarer alle tupler i R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> R(X,Y,Z) 19

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join bevarer alle tupler i R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> R(X,Y,Z) Da er <x,y> S(X,Y) og <x,z> T(X,Z) 19

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join bevarer alle tupler i R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> R(X,Y,Z) Da er <x,y> S(X,Y) og <x,z> T(X,Z) Naturlig join bruker X som join attributt 19

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join bevarer alle tupler i R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> R(X,Y,Z) Da er <x,y> S(X,Y) og <x,z> T(X,Z) Naturlig join bruker X som join attributt Så <x,y,z> S(X,Y) T(X,Z) 19

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join gir ikke flere tupler enn R: R(X,Y,Z) S(X,Y) T(X,Z) 20

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join gir ikke flere tupler enn R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> S(X,Y) T(X,Z) 20

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join gir ikke flere tupler enn R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> S(X,Y) T(X,Z) Da er <x,y> S(X,Y) og <x,z> T(X,Z) 20

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join gir ikke flere tupler enn R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> S(X,Y) T(X,Z) Da er <x,y> S(X,Y) og <x,z> T(X,Z) Da finnes yʹ og zʹ med <x,y,zʹ> R(X,Y,Z) og med <x,yʹ,z> R(X,Y,Z) 20

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join gir ikke flere tupler enn R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> S(X,Y) T(X,Z) Da er <x,y> S(X,Y) og <x,z> T(X,Z) Da finnes yʹ og zʹ med <x,y,zʹ> R(X,Y,Z) og med <x,yʹ,z> R(X,Y,Z) Husk FD X Y: lik X medfører lik Y: y = yʹ! 20

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join gir ikke flere tupler enn R: R(X,Y,Z) S(X,Y) T(X,Z) La <x,y,z> S(X,Y) T(X,Z) Da er <x,y> S(X,Y) og <x,z> T(X,Z) Da finnes yʹ og zʹ med <x,y,zʹ> R(X,Y,Z) og med <x,yʹ,z> R(X,Y,Z) Husk FD X Y: lik X medfører lik Y: y = yʹ! Dermed: <x,y,z> R(X,Y,Z) 20

Hvorfor? Gitt R(X,Y,Z) med FD X Y, og projeksjoner S(X,Y), T(X,Z) <x,y> S(X,Y) hvis og bare hvis zʹ med <x,y,zʹ> R(X,Y,Z) <x,z> T(X,Z) hvis og bare hvis yʹ med <x,yʹ,z> R(X,Y,Z) Naturlig join gir nøyaktig de samme tuplene som R: R(X,Y,Z) = S(X,Y) T(X,Z) 21

Bruk av regelen på Eksemplet Bestilling(BestNr, ProdNr, KundeNr, KundeAdr, AntBestilt) 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) 22

Anomalier fikset? BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) INSERT anomali: Kan starte med en «tom» bestilling uten et antall produkter Kan ikke legge inn kundeadresse uten bestilling UPDATE anomalier: Endring av kunden i en bestilling krever oppdatering ett sted Endring av adressen til en kunde krever oppdatering flere steder DELETE anomali: Sletting av en post i en bestilling kan ikke medføre sletting av kundeinformasjon Sletting av en bestilling kan medføre sletting av kundeinformasjon 23

Normalisering til 2NF Husk brudd på 2NF: FD X A hvor X utgjør noen av, men ikke alle, attributtene i en av kandidatnøklene og A er et ikke-nøkkelattributt. Observasjon: det er bare endelig mange ikke-nøkkelattributter Kan vi fikse brudd for ikke-nøkkelattributter ett og ett? Må da sjekke at dekomponering ikke fører til nye brudd 24

Normalisering til 2NF (forts.) La X A være et brudd mot 2NF: FD X A hvor X utgjør noen av, men ikke alle, attributtene i en av kandidatnøklene og A er et ikke-nøkkelattributt. Men «minimalt», altså ikke Xʹ A for Xʹ X R(W,X,A,Y) med kandidatnøkkel WX, og minimal FD X A Dekomponer til S(X,A) og T(W,X,Y) etter regelen S er nå i 2NF, siden X er kandidatnøkkel for S. T inneholder ikke lenger A, fortsett med flere brudd for andre ikkenøkkelattributter i Y 25

Tredje normalform En relasjon R er 3NF hvis enhver ikketriviell FD X A tilfredsstiller minst ett av følgende to krav: X inneholder en kandidatnøkkel A er et nøkkelattributt R bryter 3NF hvis det finnes en ikketriviell FD X A hvor X ikke inneholder noen kandidatnøkkel og A er et ikkenøkkelattributt. 26

Brudd på tredje, men ikke andre, normalform FD X A hvor ingen kandidatnøkler inneholder X, X ikke inneholder noen kandidatnøkkel, og A er et ikke-nøkkelattributt. Eksempler: X A X A 27

Eksempel på brudd mot 3NF 28

Eksempel på brudd mot 3NF Eksemplet etter normalisering til 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) 28

Eksempel på brudd mot 3NF Eksemplet etter normalisering til 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) Fortsatt FD KundeNr KundeAdr i BestKunde! Ikke brudd mot 2NF Ikketriviell, KundeAdr er ikke-nøkkelattributt, ingen kandidatnøkler inneholder Adresse. Brudd mot 3NF 28

Videre dekomponering 29

Videre dekomponering I 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) 29

Videre dekomponering I 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) Bruke samme regel med KundeNr KundeAdr 29

Videre dekomponering I 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) Bruke samme regel med KundeNr KundeAdr Kunde(KundeNr,KundeAdr) 29

Videre dekomponering I 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) Bruke samme regel med KundeNr KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr, KundeNr) 29

Videre dekomponering I 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) Bruke samme regel med KundeNr KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr, KundeNr) BestAnt(BestNr, ProdNr, AntBestilt) 29

Videre dekomponering I 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) Bruke samme regel med KundeNr KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr, KundeNr) BestAnt(BestNr, ProdNr, AntBestilt) Denne er i 3NF 29

Videre dekomponering I 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) Bruke samme regel med KundeNr KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr, KundeNr) BestAnt(BestNr, ProdNr, AntBestilt) Denne er i 3NF 29

Videre dekomponering I 2NF: BestKunde(BestNr, KundeNr, KundeAdr) BestAnt(BestNr, ProdNr, AntBestilt) Bruke samme regel med KundeNr KundeAdr Kunde(KundeNr,KundeAdr) BestKunde(BestNr, KundeNr) BestAnt(BestNr, ProdNr, AntBestilt) Denne er i 3NF 29

Anomalier fikset? Kunde(KundeNr,KundeAdr) BestKunde(BestNr, KundeNr) BestAnt(BestNr, ProdNr, AntBestilt) INSERT anomali: Kan starte med en «tom» bestilling uten et antall produkter Kan legge inn kundeadresse uten bestilling UPDATE anomalier: Endring av kunden i en bestilling krever oppdatering ett sted Endring av adressen til en kunde krever oppdatering ett sted DELETE anomali: Sletting av en post i en bestilling kan ikke medføre sletting av kundeinformasjon Sletting av en bestilling kan ikke medføre sletting av kundeinformasjon 30

Boyce-Codd normalform En relasjon R er BCNF hvis enhver ikketriviell FD X A tilfredsstiller følgende krav: X inneholder en kandidatnøkkel R bryter BCNF hvis det finnes en ikketriviell FD X A hvor X ikke inneholder noen kandidatnøkkel 31

Brudd på Boyce-Codd, men ikke tredje, normalform FD X A hvor A er et nøkkelattributt og X ikke inneholder noen kandidatnøkkel. Eksempler: X A X A X A 32

Normalisering til 3NF Det lar seg alltid gjøre å normalisere (dekomponere) til 3NF Men hvis en relasjon er på 3NF og ikke på BCNF, betyr det at det kan finnes noen funksjonelle avhengigheter som må sjekkes ved alle innsettinger og oppdateringer (I tillegg må selvfølgelig primær- og kandidatnøkler alltid sjekkes) 33

Normalisering til BCNF Det lar seg alltid gjøre å normalisere (dekomponere) til BCNF Men hvis vi har dekomponert til BCNF, kan det være at vi etterpå har noen funksjonelle avhengigheter som går på tvers av relasjonene, og der vi ved alle innsettinger og oppdateringer må joine de involverte relasjonene for å kunne sjekke at de funksjonelle avhengighetene fortsatt er oppfylt. 34

Normalisering til 3NF vs. BCNF Vi kan alltid normalisere til 3NF uten å få funksjonelle avhengigheter på tvers av relasjonene. Derfor vil man som regel nøye seg med å normalisere bare til 3NF i de tilfellene hvor alternativet er normalisering til BCNF med funksjonelle avhengigheter på tvers. I praksis har de fleste relasjoner ikke så mange ulike kandidatnøkler. Derfor vil relasjoner i 3NF ofte allerede være i BCNF. 35

Normalformer Gitt en relasjon R, med et sett FD-er på formen X A, der X og A er et sett av attributter 1NF: R inneholder kun atomære verdier/attributter 2NF: X er en supernøkkel i R, eller A er et nøkkelattributt, eller X er ikke en delmengde av noen nøkler i R 3NF: X er en supernøkkel i R, eller A er et nøkkelattributt BCNF: X er en supernøkkel i R Ikke-normalisert lagring 1NF 2NF 3NF BCNF 36

Vi har FD-en X A Nei: X A bryter BCNF Er X en supernøkkel? Er A et nøkkelattributt? Ja: X A oppfyller BCNF Ja: X A bryter BCNF, men oppfyller 3NF 1NF: Bare atomære verdier/attributter 2NF: X er en supernøkkel i R, eller A er et nøkkelattributt, eller X er ikke en delmengde av noen nøkler i R 3NF: X er en supernøkkel i R, eller A er et nøkkelattributt BCNF: X er en supernøkkel i R Nei: X A bryter 3NF Er X en delmengde av en nøkkel? Nei: X A bryter 3NF, men oppfyller 2NF Ja: X A bryter 2NF, men oppfyller 1NF 37