Normalisering Motivasjon Redundans Funksjonelle avhengigheter Determinanter Partielle avhengigheter Transitive avhengigheter Normalformer: 1NF, 2NF, 3NF, BCNF Normaliseringsstegene Denormalisering Pensum: Kapittel 8.2 Databaser Leksjon 8: Normalisering - 1
Redundans: Informasjon som blir gjentatt OrdreNr Ordredato KNr Adresse 20505 20.8.2011 5022 Kongens gate 3 20505 20.8.2011 5022 Kongens gate 3 20506 20.8.2011 5009 Furulia 72 20506 20.8.2011 5009 Furulia 72 20506 20.8.2011 5009 Furulia 72 20507 20.9.2011 5188 Svingen 7 Tabellen inneholder data om både ordrer og kunder. OrdreNr er primærnøkkel, men KNr bestemmer (nåværende) Adresse. Redundans er sløsing med plass og øker sjansen for inkonsistens (hvis vi endrer adresse for en kunde ett sted, men ikke alle). Kunder som ikke har kjøpt noe lar seg ikke representere. Tabellen bør splittes i to enklere tabeller: Kunde og Ordre! Databaser Leksjon 8: Normalisering - 2
Funksjonelle avhengigheter I For en tabell T(A,B,C) vi sier at det er en funksjonell avhengighet B C, hvis for alle rader (a1,b1,c1) og (a2,b2,c2) der b1=b2, gjelder c1=c2. Med andre ord så er tabellen T projisert på B og C en funksjon B C (eller, presisere, en funksjon Π (T) Π (T) ). Eks: Hvis to rader har samme KNr (5022), så må de ha samme Adresse (Kongens gate 3), dvs. KNr Adresse. Vi har en funksjon som tilordner 5009 Furulia 72 5022 Kongens gate 3 5188 Svingen 7 Databaser Leksjon 8: Normalisering - 3
Funksjonelle avhengigheter II Generelt kan vi ha funksjonelle avhengigheter fra en samling av kolonner til en annen samling av kolonner. En funksjonell avhengighet X Y uttrykker en begrensing: Hvis to rader har samme verdi i X må de ha samme verdi i Y. Vi sier at X bestemmer Y, og kaller X en determinant. For å avgjøre om X Y må vi kjenne betydningen til X og Y. Beskrankningen skal gjelde for alle mulige tabellinnhold. Databaser Leksjon 8: Normalisering - 4
Funksjonelle avhengigheter III Eksempler: VareNr Betegnelse VareNr Pris OrdreNr, VareNr Antall Kan disse «forenkles»? VareNr, Betegnelse Pris OrdreNr, VareNr, Antall, Betegnelse Pris VareNr Pris, Kategori Databaser Leksjon 8: Normalisering - 5
Funksjonelle avhengigheter IV Grafisk notasjon: VNr ONr KNr Ant Adr Noen avhengigheter lar vi være underforstått. Databaser Leksjon 8: Normalisering - 6
Funksjonelle avhengigheter IV Grafisk notasjon: A B C D E X kandidatnøkkel: X Y for alle samlinger Y av kolonner i T Noen avhengigheter lar vi være underforstått. Databaser Leksjon 8: Normalisering - 7
Slutningsregler Noen funksjonelle avhengigheter kan utledes fra andre (ved hjelp av slutningsreglene). Eksempel: Antall, KNr Antall Hvis ONr KNr og KNr Adress, ONr, Adresse KNr, Adresse Formelle slutningsreglene: Hvis X Y, så X Y Hvis X Y og Y Z, så X Z Hvis X Y, så X, Z Y, Z så ONr Adresse. Databaser Leksjon 8: Normalisering - 8
Problemer med dårlig design KNr Navn OrdreNr VNr Betegnelse Pris Antall 5022 Østbø 20505 10830 Nisseskjegg 57.50 1 5022 Østbø 20505 77033 Japanbarlind 358.00 5 5009 Lund 20506 10830 Nisseskjegg 57.50 1 5009 Lund 20506 44939 Hobbymaling 115.00 3 5009 Lund 20506 65081 Plantegreip 112.00 5 5188 Bruvik 20507 21032 Furuspon 57.50 3 Viser seg når databasen tas i bruk! Oppdatering: Vi må endre prisen i alle rader som tilhører en vare. Ellers blir databasen inkonsistent! Innsetting: Ikke mulig å ha varer som ikke er bestilt. Hvorfor! Sletting: Hvis vi slette ordre 20506 mister vi informasjon om varen? Databaser Leksjon 8: Normalisering - 9
Dekomponere tabeller KNr Navn ONr VNr Betegnelse Pris Antall 5022 Østbø 20505 10830 Nisseskjegg 57.50 1 5022 Østbø 20505 77033 Japanbarlind 358.00 5 5009 Lund 20506 10830 Nisseskjegg 57.50 1 5009 Lund 20506 44939 Hobbymaling 115.00 3 5009 Lund 20506 65081 Plantegreip 112.00 5 5188 Bruvik 20507 21032 Furuspon 57.50 3 ONr VNr Betegnelse Pris Antall KNr 20505 10830 Nisseskjegg 57.50 1 5022 20505 77033 Japanbarlind 358.00 5 5022 20506 10830 Nisseskjegg 57.50 1 5009 20506 44939 Hobbymaling 115.00 3 5009 20506 65081 Plantegreip 112.00 5 5009 20507 21032 Furuspon 57.50 3 5188 KNr Navn 5022 Østbø 5009 Lund 5188 Bruvik Her tar vi enn normaleseringssteg! Databaser Leksjon 8: Normalisering - 10
Dekomponere tabeller Vi går fra Alt(KNr, Navn, ONr, VNr, Betegnelse, Pris, Antall) til Ordre(ONr, VNr, Betegnelse, Pris, Antall, KNr*) Kunde(KNr, Navn) Hva måtte vi gjøre for å ikke miste informasjon? Hva betyr det at vi ikke mister informasjon? Vi kan rekonstruere den opprinnelige informasjon. Hvordan kan vi utrykke dette presist? Vi få den opprinnelige tabell Alt med hjelp av en likekobling av de nye tabeller Ordre og Kunde! Databaser Leksjon 8: Normalisering - 11
Normalformer Enhver tabell på BCNF er på 3NF, osv. BCNF 3NF 2NF 1NF Databaser Leksjon 8: Normalisering - 12
Normalisering Normalisering består i å dekomponere (splitte opp) tabeller til flere enklere tabeller slik at: Redundans ikke oppstår Informasjonsinnholdet bevares Normaliseringsteori gir oss: Presise regler for å avgjøre om og hvordan tabeller skal dekomponeres basert på kunnskap om funksjonelle avhengigheter. Databaser Leksjon 8: Normalisering - 13
Normaliseringsprosessen Tabell på 1NF Tabell på 2NF Tabell på 3NF Tabell på BCNF Fjern partielle avhengigheter. Fjern transitive avhengigheter. Fjern resterende redundans. Databaser Leksjon 8: Normalisering - 14
Normaliseringssteg A B C D E F A B C D E* E F A B C D* D E* For funksjonell avhengighet E F i tabell T: E og F legges inn i ny tabell med primærnøkkel E. Deklarer E i T som fremmednøkkel mot ny tabell. Fjern F fra T. Databaser Leksjon 8: Normalisering - 15
1. NormalForm (1NF) En tabell tilfredsstiller 1NF hvis alle verdier er atomære. 1NF er kun av historisk interesse; enhver tabell er pr. definisjon på 1NF. Restriksjonen til atomære verdier hindrer «tabeller i tabeller» / «repeterende grupper». Vi har ikke jobbet med tabeller som ikke er på 1NF. Databaser Leksjon 8: Normalisering - 16
2. NormalForm (2NF) En tabell tilfredsstiller 2NF hvis den er på 1NF og dessuten ikke har attributter som er partielt avhengig av primærnøkkelen. A B C D E Brudd! Kan det skje at vi har B A? Resultat av normalisering: A B* C E B D Databaser Leksjon 8: Normalisering - 17
3. NormalForm (3NF) En tabell tilfredsstiller 3NF hvis den er på 2NF og dessuten ikke inneholder transitive funksjonelle avhengigheter. A B C D E Brudd! Hvor har vi her transitivitet? Resultat av normalisering: A B C* D C E Databaser Leksjon 8: Normalisering - 18
Boyce-Codd NormalForm (BCNF) En determinant er en samling av kolonner som bestemmer minst en annen kolonne. En tabell er på BCNF hvis den er på 3NF og enhver determinant bestemmer alle kolonner (supernøkkel). Problemet er overlappende kandidatnøkler! A B C D E Brudd! En mulig løsning: C A B C* D E Databaser Leksjon 8: Normalisering - 19
Normaliseringseksempel I StudNr SNavn KursKode KursNavn StPoeng EksDato Kar 1. Kartlegg funksjonelle avhengigheter. 2. Bestem kandidatnøkler / primærnøkkel. 3. Avgjør normalform. 4. Utfør normalisering til BCNF. Obs! Det lønner seg å behandlefunksjonelle avhengigheter fra en gitt kolonne samlet. Gjenta steg 2-4 for hvert mellomresultat. Databaser Leksjon 8: Normalisering - 20
Normaliseringseksempel II Gitt en tabell T(A, B, C, D). Det er funksjonelle avhengigheter fra A til B, fra B til D og fra C til A. Bestem kandidatnøkkel. Hvilken normalform er tabellen på? Utfør normalisering til BCNF. Det kan virke underlig at vi kan normalisere en tabell som inneholder data vi ikke vet hva er. Hvordan er dette mulig? Databaser Leksjon 8: Normalisering - 21
E/R og normalisering Er normalisering et alternativ til E/R? Mulig strategi: 1. Start med «universalrelasjonen» (alt i èn tabell). 2. Kartlegg funksjonelle avhengigheter. 3. Utfør normalisering. Entiteter med attributter er en mer naturlig tenkemåte E/R kan brukes for å kommunisere med brukere. Normalisering kan brukes for å sjekke en datamodell. Dette er en jobb for databasedesigneren. Databaser Leksjon 8: Normalisering - 22
Denormalisering Normalisering gir flere tabeller. Flere tabeller gir flere likekoblinger. Sikring av visse forretningsregler krever at DBHS ser i flere tabeller. Av effektivitetshensyn kan vi i visse tilfeller forsvare å slå sammen normaliserte tabeller. Dette kalles for denormalisering, og gir en form for «kontrollert redundans». Normalisering fra 3NF til BCNF gir forretningsregler som er tunge for DBHS å sikre. Det er dermed ikke uvanlig å stoppe normalisering ved 3NF. Databaser Leksjon 8: Normalisering - 23