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
Andre normalform ble opprinnelig definert i 1971 av Edger Frank Codd.

## 2NF og kandidatnøkler
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
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
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.

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:

Som vist nedenfor settes den den partielle avhengigheten inn i en ny relasjon der avhengigheten kan eksistere uten å være en partiell avhengighet:

## Se også
* Attributt–verdi-system

## Referanser