**Domenenø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.

Domenenø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 domenenø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å domenenøkkel normalform enn det er å konvertere fra databaser av lavere normaliseringsgrad som kan inneholde mange uregelmessigheter. Å lykkes med å bygge en database på domenenø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 domenenø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 domenenø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 domenenøkkel normalform ikke alltid være en avhengighetsbevarende transformasjon, og er derfor ikke alltid mulig.

Eksempel
--------

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
-------------

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å
-------

* Referanseintegritet
* Databasenormalisering

Referanser
----------


| * v
* d
* r
Databasenormalisering |
| --- |
| 
* Unormalisert form (0NF)
* Første normalform (1NF)
* Andre normalform (2NF)
* Tredje normalform (3NF)
* Elementærnøkkel normalform (EKNF)
* Boyce–Codd normalform (3.5NF / BCNF)
* Fjerde normalform (4NF)
* Femte normalform (5NF / PJNF)
* Domene–nøkkel normalform (DKNF)
* Sjette normalform (6NF)

 |
| Denormalisering |