Redigerer
Domene–nøkkel normalform
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
'''Domene–nøkkel normalform''' ('''DKNF''') er en [[Databasenormalisering|normalform]] som brukes i [[databasenormalisering]] som krever at [[Database|databasen]] ikke inneholder andre begrensninger enn [[Datadomene|domenebegrensninger]] og [[Nøkkel (database)|nøkkelbegrensninger]]. En domenebegrensning spesifiserer de tillatte [[Verdimengde|verdiene]] for en gitt [[attributt]], mens en nøkkelbegrensning spesifiserer attributtene som unikt identifiserer en [[Oppføring|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-[[Temporal database|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 [[Lagret prosedyre|lagrede prosedyrer]] (ofte av [[Databaseutløser|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 [[Funksjonell avhengighet|funksjonelle]], [[Flervaluert avhengighet|flervaluerte]] eller [[Tapsfri dekomposisjon|skjøte]]-avhengigheter som kan konverteres til [[Supernøkkel|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 == Et brudd på DKNF forekommer i følgende tabell: {| class="wikitable" |+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. {| class="wikitable" |+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 |} {| class="wikitable" |+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 [[Nøkkel (database)#Fremmednøkkel|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 == <references/> {{Databasenormalisering}} [[Kategori:Databaser]]
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Maler som brukes på denne siden:
Mal:Databasenormalisering
(
rediger
)
Mal:Hlist/styles.css
(
rediger
)
Mal:Navbox
(
rediger
)
Modul:Arguments
(
rediger
)
Modul:Navbar
(
rediger
)
Modul:Navbar/configuration
(
rediger
)
Modul:Navbar/styles.css
(
rediger
)
Modul:Navbox
(
rediger
)
Modul:Navbox/configuration
(
rediger
)
Modul:Navbox/styles.css
(
rediger
)
Modul:TableTools
(
rediger
)
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Side
Diskusjon
norsk bokmål
Visninger
Les
Rediger
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon