150 likes | 347 Vues
Normalisering. Hva er normalisering? side 2 Normaliseringens plass i utviklingsprosessen side 3 Eksempel side 4 Funksjonell avhengighet side 5-6 Første normalform (1NF) side 7 Andre normalform (2NF) side 8-9
E N D
Normalisering Hva er normalisering? side 2Normaliseringens plass i utviklingsprosessen side 3 Eksempel side 4 Funksjonell avhengighet side 5-6 Første normalform (1NF) side 7 Andre normalform (2NF) side 8-9 Tredje normalform (3NF) side 10Generelle definisjoner av 2NF og 3NF side 11-13 Boyce-Codd normalform (BCNF) side 13-15 Framstillingen avviker noe fra læreboka, der normalisering gjennomgås i kapittel 3.
Hva er normalisering? • Normalisering er en formell metode for å designe relasjonsdatabaser • Mål: • Å unngå unødvendig dobbeltlagring av data (redundans) pga dobbeltlagring lett fører til inkonsistente data. • Dobbeltlagring er kun nødvendig for å kople tabeller sammen (referanseintegritet, primærnøkkel – fremmednøkkel) • Middel: • Dele opp eksisterende tabeller • Normaliseringen legger stor vekt på å finne kandidatnøkler. • Det stilles formelle krav til sammenhengen mellom attributtene i en tabell. Jo strengere krav, desto høyere normalform. 1NF, 2NF, 3NF, BCNF, 4NF, 5NF,…? • 4NF og 5NF kun av teoretisk betydning. Gjennomgås ikke. Datamodellering og databaserElse Lervik, oktober 2011
Normaliseringens plass i utviklingsprosessen • Som kvalitetssikring: • For å forstå en eksisterende database: Normalisering ”Enda bedre” relasjonsmodell Relasjonsmodell basert på EER-diagram Klargjør funksjonelle avhengigheter Grunnlag for å lage EER-modell Et sett med tabeller Datamodellering og databaserElse Lervik, oktober 2011
Har fått følgende dataeksempel til vurdering Det er fullt mulig å ta tak i dette via EER-modellering, men vi velger normalisering ettersom dataene allerede er gitt på tabellform. Kan vi bruke denne tabellen i databasen? Skal gjennomgå Codds tre-trinns-prosess (1972) 1NF 2NF 3NF Forutsetter kun én kandidatnøkkel. Datamodellering og databaserElse Lervik, oktober 2011
Funksjonell avhengighet • Gitt en relasjon R med (bl.a.) attributtene X og Y. X og Y kan være sammensatte. • Y er funksjonelt avhengig (f.a.) av X hvis og bare hvis det til hver X-verdi er assosiert eksakt en Y-verdi. R.X ---> R.Y • Eller: X bestemmer (”determinerer”) Y. X er en determinant. • Eks.: leveranse1.lev_nr ---> leveranse1.status leveranse1. lev_nr ---> leveranse1. (lev_navn, status) leveranse1.(lev_nr, lev_navn) ---> leveranse1.lev_by • Dersom X er en supernøkkel må alle de øvrige attributtene være funksjonelt avhengig av X. • Y er fullt funksjonelt avhengig (f.f.a.) av X, hvis den er funksjonelt avhengig av X, og det ikke fins en delmengde Z av X som Y er funksjonelt avhengig av. • Eks.: leveranse1.(lev_nr, lev_navn) ---> leveranse1.lev_by f.a., men ikke f.f.a.leveranse1.(lev_nr) ---> leveranse1.lev_by f.f.a. (og dermed f.a.) • Heretter betyr f.a. det samme som f.f.a. Datamodellering og databaserElse Lervik, oktober 2011
Viser funksjonelle avhengigheter i et diagram lev_by status lev_nr lev_navn Dette er en modell av virkeligheten. prod_nr antall Merk at lev_by bestemmer status! Datamodellering og databaserElse Lervik, oktober 2011
Første normalform (1NF) Første normalform (1NF): Det eksisterer en primærnøkkel, og ingen del av denne er NULL. Tabellen inneholder ikke repeterende grupper. - Kun én verdi i hver rute i tabellen. Tabellen foran ser slik ut på 1NF: Hva er primærnøkkelen? Problemer med oppdatering? Datamodellering og databaserElse Lervik, oktober 2011
Andre normalform (2NF) • Andre normalform (2NF): En relasjon er på 2NF hvis og bare hvis den er på 1NF, og den ikke inneholder partielle avhengigheter (en ikke-nøkkel-attributt er f.a. av en del av primærnøkkelen). • Fra 1NF til 2NF: Splitt opp relasjonen i flere nye relasjoner slik at partielle avhengigheter unngås. (”Ingen piler krysser bokser”) lev_by lev_nr lev_nr antall status lev_navn prod_nr Datamodellering og databaserElse Lervik, oktober 2011
Splitter 1NF-tabellen i to • Splitter ved å foreta en projeksjon. • En naturlig forening bringer relasjonene tilbake til utgangspunktet. • De nye tabellene kan inneholde mer informasjon enn de opprinnelige, men ikke mindre. Hva er primærnøklene i disse to tabellene? Problemer med oppdatering? Datamodellering og databaserElse Lervik, oktober 2011
Tredje normalform (3NF) • Fra 2NF til 3NF: Transitive avhengigheter fjernes. • Transitiv avhengighet: • lev_nr lev_by status, det vil si lev_nr status • Tredje normalform (3NF): En relasjon er på 3NF, hvis og bare hvis den er på 2NF, og den ikke inneholder transitive avhengigheter. (”Alle piler utgår fra primærnøkkelen.”) lev_by lev_by status lev_nr lev_navn Hva er primærnøklene i disse to tabellene? Problemer med oppdatering? Datamodellering og databaserElse Lervik, oktober 2011
Generelle definisjoner av 2NF og 3NF • Hva hvis flere kandidatnøkler? • 2NF • En relasjon er på 2NF hvis og bare hvis den er på 1NF, og den ikke inneholder partielle avhengigheter (en ikke-nøkkel-attributt er f.a. av en del av en kandidatnøkkel). • 3NF • En relasjon er på 3NF, hvis og bare hvis den er på 2NF, og den ikke inneholder transitive avhengigheter, dvs at det ikke fins ikke-nøkkelattributter som er funksjonelt avhengig av andre ikke-nøkkelattributter. Datamodellering og databaserElse Lervik, oktober 2011
Eksempel med flere kandidatnøkler • Anta at også lev_navn entydig identifiserer en leverandør. Ellers noe forenklet: To kandidatnøkler: (lev_nr, prod_nr)(lev_navn, prod_nr) lev_navn lev_nr Sjekk mot de generelle definisjonene av 2NF og 3NF prod_nr antall Datamodellering og databaserElse Lervik, oktober 2011
Eksempel med flere kandidatnøkler, forts lev_navn lev_nr prod_nr antall Problemer med oppdatering? Datamodellering og databaserElse Lervik, oktober 2011
Boyce-Codd normalform (BCNF) • Boyce-Codd normalform (BCNF): En relasjon tilfredsstiller BCNF hvis enhver determinant er en kandidatnøkkel. Hvis en tabell har bare én kandidatnøkkel, er 3NF og BCNF ekvivalente. To kandidatnøkler: (lev_nr, prod_nr)(lev_navn, prod_nr) lev_navn lev_nr prod_nr Er BCNF oppfylt? antall Datamodellering og databaserElse Lervik, oktober 2011
Splitter slik at BCNF er tilfredsstillt Kandidatnøkler i disse tabellene? Konklusjon: Unødvendig å gå gjennom 1NF 2NF3NF prosessen. I praktisk arbeid er det nok å sjekke at BCNF er oppfylt. BCNF kan også brukes dersom de tre kravene midt på side 93 i læreboka ikke er oppfylt. Datamodellering og databaserElse Lervik, oktober 2011