Andre normalform
From Wikipedia, the free encyclopedia
Remove ads
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 .
Remove ads
Historie
Andre normalform ble opprinnelig definert i 1971 av Edger Frank Codd.[1]
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.
Remove ads
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:
Remove ads
Se også
Referanser
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads