Andre normalform
Andre normalform (2NF) er en normalform som brukes i databasenormalisering. En relasjon er på andre normalform hvis den oppfyller følgende to krav:
- Det er på første normalform.
- Den har ikke noen ikke-primær attributt som er funksjonelt avhengig av noen ekte delmengde av hvilken som helst kandidatnøkkel til relasjonen (altså at den er uten delvise avhengigheter). En ikke-primær attributt for en relasjon er en attributt som ikke er en del av noen kandidatnøkkel til relasjonen.
Enkelt sagt er en relasjon (eller tabell) 2NF hvis:
- Den er på 1NF og har en enkeltattributts unik identifikator (EA-UID) (isåfall er hver ikke-nøkkel-attributt avhengig av hele den unike identifikatoren), eller
- Den er på 1NF og har en multiattributts unik identifikator (MA-UID), og hver vanlige attributt (ikke en del av UID) er avhengig av alle attributter i multiattributts-UID-en, altså ikke bare en attributt (eller del) av UID.
Dersom noen vanlige (ikke-primære) attributter er forutsigbare (avhengige) av en annen (ikke-primær) attribut, håndteres det i tredje normalform .
Historie
[rediger | rediger kilde]Andre normalform ble opprinnelig definert i 1971 av Edger Frank Codd.[1]
2NF og kandidatnøkler
[rediger | rediger kilde]En funksjonell avhengighet av en ekte delmengde til en kandidatnøkkel (UID) er et brudd på 2NF. I tillegg til primærnøkkelen kan relasjonen inneholde andre kandidatnøkler, og det er nødvendig å fastslå at ingen ikke-primære attributter (vanlige eller ikke-UID-attributter) har delnøkkel-avhengigheter (altså at de er del av noen av disse kandidatnøklene/ UID-ene). Sagt på en annen måte: Hvis noen vanlige attributter (ikke-UID-attributter) er forutsigbare fra en attributt til UID-en (eller del av UID-en) så er den ikke på 2NF.
Dekomponering av 1NF til 2NF
[rediger | rediger kilde]For å gjøre en 1NF-relasjon til en 2NF-relasjon fjernes de funksjonelt avhengige attributtene i de partielle avhengighetene av den første normalform-relasjonen, og disse delvis avhengige attributtene plasseres i en relasjon hvor deres korresponderende determinante attributter utgjør en hel kandidatnøkkel.
Eksempel
[rediger | rediger kilde]Følgende relasjon tilfredsstiller ikke 2NF fordi:
- Det er en multiattributts unik identifikator bestående av {Produsent} og {Modell}.
- {Produsentland} er funksjonelt avhengig (forutsigbar) utifra {Produsent}.
- {Produsentland} er ikke en del av en kandidatnøkkel, og er derfor en ikke-primær-attributt. (Det antas at det er mulig for to produsenter fra samme land å lage ulike typer tannbørster med samme modellnavn, og dermed er {Produsentland, Modell} ikke en kandidatnøkkel selv om paret i gjeldende tabell identifiserer rader unikt.)
- {Produsent} er en ekte delmengde av kandidatnøkkelen {Produsent, Modell}.
Med andre ord, siden {Produsentland} er en ikke-primær-attributt som er funksjonelt avhengig av en ekte delmengde av en kandidatnøkkel er relasjonen i strid med 2NF.
Produsent | Modell | Produsentland |
---|---|---|
Forte | X-Prime | Italia |
Forte | Ultrarent | Italia |
Dent-o-Fresh | EZbrush | USA |
Brushmaster | SuperBrush | USA |
Kobayashi | ST-60 | Japan |
Hoch | Toothmaster | Tyskland |
Hoch | X-Prime | Tyskland |
For å få designet til å samsvare med 2NF er det nødvendig å ha to relasjoner. For å opprette disse relasjonene kan man gjøre følgende:
- Fjern de funksjonelt avhengige attributtene fra de partielle avhengighetene til den første normalforms-relasjonen. I dette eksemplet er {Produsentland} den funksjonelt avhengige attributten som vil bli fjernet.
- Plasser de partielt avhengige attributtene (altså {Produsentland}) i en relasjon der deres tilsvarende determinante attributter er en kandidatnøkkel (altså {Produsent}).
Som vist nedenfor har {Produsentland} blitt fjernet fra den opprinnelige tabellen:
Produsent | Modell |
---|---|
Forte | X-Prime |
Forte | Ultraclean |
Dent-o-Fresh | EZbrush |
Brushmaster | SuperBrush |
Kobayashi | ST-60 |
Hoch | Toothmaster |
Hoch | X-Prime |
Som vist nedenfor settes den den partielle avhengigheten inn i en ny relasjon der avhengigheten kan eksistere uten å være en partiell avhengighet:
Produsent | Produsentland |
---|---|
Forte | Italia |
Dent-o-Fresh | USA |
Brushmaster | USA |
Kobayashi | Japan |
Hoch | Tyskland |
Se også
[rediger | rediger kilde]Referanser
[rediger | rediger kilde]- ^ Codd, E. F. "Further Normalization of the Data Base Relational Model". (Presented at Courant Computer Science Symposia Series 6, "Data Base Systems", New York City, May 24–25, 1971.) IBM Research Report RJ909 (August 31, 1971). Republished in Randall J. Rustin (ed.), Data Base Systems: Courant Computer Science Symposia Series 6. Prentice-Hall, 1972.