Domene–nøkkel normalform

Fra Wikipedia, den frie encyklopedi
(Omdirigert fra «Domene-nøkkel normalform»)

Domene–nøkkel normalform (DKNF) er en normalform som brukes i databasenormalisering som krever at databasen ikke inneholder andre begrensninger enn domenebegrensninger og nøkkelbegrensninger.

En domenebegrensning spesifiserer de tillatte verdiene for en gitt attributt, mens en nøkkelbegrensning spesifiserer attributtene som unikt identifiserer en rad i en gitt tabell.

Domene–nøkkel normalformen oppnås når enhver begrensning på relasjonen er en logisk konsekvens av definisjonen av nøkler og domener, og håndheving av nøkkelens og domenets begrensninger og betingelser fører til at alle begrensninger blir oppfylt. Dermed unngår DKNF alle ikke-temporale anomalier.

Grunnen til å bruke domene–nøkkel normalformen er å unngå å ha generelle begrensninger i databasen som ikke klart er domenebegrensninger eller nøkkelbegrensninger. De fleste databaser kan enkelt teste domene- og nøkkelbegrensninger på attributter. Imidlertid vil generelle begrensninger normalt kreve spesiell databaseprogrammering i form av lagrede prosedyrer (ofte av utløservarianten) som er dyre å vedlikeholde og dyre for databasen å kjøre. Derfor blir generelle begrensninger delt inn i domene- og nøkkelbegrensninger.

Det er mye lettere å bygge en ny database på domene–nøkkel normalform enn det er å konvertere fra databaser av lavere normaliseringsgrad som kan inneholde mange uregelmessigheter. Å lykkes med å bygge en database på domene–nøkkel normalform er fortsatt en vanskelig oppgave, selv for erfarne databaseurviklere. Dermed, mens domene-/nøkkel normalformen eliminerer problemene som finnes i de fleste databaser pleier det å være den mest kostbare normalformen å oppnå. Hvis man ikke oppnår domene–nøkkel normalformen kan det imidlertid medføre langsiktige, skjulte kostnader på grunn av uregelmessigheter som oppstår i databaser som bare følger lavere normalformer over tid.

Tredje normalform, Boyce–Codd normalform, fjerde normalform og femte normalform er spesielle tilfeller av domene–nøkkel normalformen. Alle har enten funksjonelle, flervaluerte eller skjøte-avhengigheter som kan konverteres til supernøkler. Domenene på disse normaleformene var ubegrensede, slik at alle domenebegrensninger er oppfylt. Imidlertid vil det å transformere disse høyere normalformene til domene–nøkkel normalform ikke alltid være en avhengighetsbevarende transformasjon, og er derfor ikke alltid mulig.

Eksempel[rediger | rediger kilde]

Et brudd på DKNF forekommer i følgende tabell:

Velstående person
Velstående person Velstående persontype Nettoverdi i kroner
Ola Millionær 1 432 500
Kari Millionær 2 455 500
Alexandra Milliardær 5 884 000 000
Kjell Inge Milliardær 19 417 000 000

Anta at:

  • Domenet for {Velstående person} består av navnene på alle velstående personer i et forhåndsdefinert utvalg av velstående personer.
  • Domenet for {Velstående persontype} består av verdiene 'Millionær' og 'Milliardær'.
  • Domenet for {Nettoverdi i kroner} består av alle heltall større enn eller lik 1 000 000.)

Det er en begrensning som knytter {Rik persontype} til {Nettoverdi i kroner}, selv om vi ikke kan utlede det ene fra det andre. Begrensningen tilsier at en millionær vil ha en nettoverdi på 1 000 000 til 999 999 999 inklusiv, mens en milliardær vil ha en nettoverdi på 1 000 000 000 eller høyere. Denne begrensningen er verken en domenebegrensning eller en nøkkelbegrensning. Derfor kan vi ikke stole på domenebegrensninger og nøkkelbegrensninger for å garantere at en inkonsistent kombinasjon av {Velstående persontype} og {Nettoverdi i kroner} ikke kommer inn i databasen.

DKNF-bruddet kan elimineres ved å fjerne kolonnen {Velstående persontype}. Den velstående personens status som millionær eller milliardær bestemmes av nettoverdien i kroner, som definert i {Formuesstatus}-tabellen, altså vil ingen nyttig informasjon gå tapt.

Velstående person
Velstående person Nettoverdi i kroner
Ola 1 432 500
Kari 2 455 500
Alexandra 5 884 000 000
Kjell Inge 19 417 000 000
Formuestatus
Status Minimum Maksimum
Millionær 1 000 000 999 999 999
Milliardær 1 000 000 000 999 999 999 999

Fremmednøkler[rediger | rediger kilde]

Relasjoner som er umulige å uttrykke som fremmednøkler er åpenbare brudd på DKNF.

Et eksempel på brudd på DKNF er hvis en {Foreldre-ID}-attributt peker til en av flere refererte tabeller, dersom den igjen er avhengig av en annen {Foreldretype}-attributt.

Se også[rediger | rediger kilde]

Referanser[rediger | rediger kilde]