Sjette normalform

**Sjette normalform** (**6NF**) er en normalform som brukes i normalisering av relasjonsdatabaser som utvider relasjonsalgebraen og generaliserer relasjonsoperatorer (som skjøt) for å støtte intervalldata, hvilket kan være nyttig i temporale databaser.

Denne formen er uviktig i ikke-temporale databaser, men er nyttig for temporale data, for eksempel for å spore endringshistorikk.

Til forveksling har begrepet 6NF historisk også blitt brukt for å referere til en annen normaliseringsgrad som i dag er mer kjent som domene-nøkkel normalform (DKNF) (se Andre betydninger). Denne artikkelen handler imidlertid om sjette normalform som definert av Date med flere.

## Definisjon
Christopher John Date og andre har definert sjette normalform som en normalform basert på en utvidelse av relasjonsalgebraen.

Relasjonsoperatorer som skjøt (*join*) blir generaliserte for å støtte naturlig behandling av intervalldata, for eksempel sekvenser av datoer eller tidspunkter (*points in time*), for eksempel i temporale databaser. Sjette normalformen er derved basert på en generalisert skjøt som følger:En relvar R [tabell] er på sjette normalform hvis og bare hvis den ikke tilfredsstiller noen ikke-trivielle skjøteavhengigheter i det hele tatt, hvor en skjøteavhengighet (*join dependency*) er triviell hvis og bare hvis minst en av projeksjonene (muligens U_projeksjoner) som er involvert tas over hele mengden av alle attributter i den aktuelle relvar [tabellen].Date og kolleger har også gitt følgende definisjon:En relvar R er på sjette normalform hvis og bare hvis hver skjøteavhengighet av R er triviell, hvor en skjøteavhengighet er triviell hvis og bare hvis en av komponentene er lik den relevante overskriftsraden i sin helhet. Enhver relasjon på 6NF er også på 5NF.

Sjette normalform er ment å dekomponere relasjonsvariabler til irreduserbare komponenter. Selv om dette kan være relativt uviktig for ikke-temporale relasjonsvariabler kan det være viktig når man arbeider med temporale variabler eller andre intervalldata. For eksempel dersom en relasjon omfatter en leverandørs {navn}, {status} og {tettsted} kan det hende vi også ønsker å legge til temporale data som for eksempel tidene eller tidsrommet da disse verdiene er eller var gyldige (for eksempel for historiske data), men de tre verdiene kan variere uavhengig av hverandre og med forskjellige hastigheter. Vi kan for eksempel ønske å spore endringshistorikken til {status}, og en gjennomgang av produksjonskostnadene kan avsløre at en endring ble forårsaket av at en leverandør byttet by og dermed hva de tok betalt for levering.

For ytterligere diskusjon om temporal aggregering i SQL, se også Zimanyi. For en annen tilnærming, se TSQL2.

## Bruk
Den sjette normalformen brukes for tiden per 2009 i enkelte datavarehus der fordelene veier opp for ulempene, for eksempel ved bruk av ankermodellering. Selv om bruk av 6NF fører til en eksplosjon av tabeller kan moderne databaser trimme (*prune*) tabellene fra select-spørringer (ved å bruke en prosess som kalles tabelleliminering - slik at en spørring kan løses uten engang å lese enkelte av tabellene som spørringen refererer til) der de ikke er påkrevd og dermed øke hastigheten på spørringer som bare aksesserer flere attributter.

## Eksempler
For at en tabell skal være på sjette normalform må den først være i femte normalform, og deretter kreves det at hver tabell kun tilfredsstiller trivielle skjøteavhengigheter. Følgende er et enkelt eksempel med utangspunkt i en tabell som allerede er på 5NF: I brukertabellen er hver attributt ikke ikke-null og primærnøkkelen er brukernavnet:

Denne tabellen er på 5NF fordi hver skjøteavhengighet impliseres av den unike kandidatnøkkelen til tabellen (brukernavn). Mer spesifikt er de eneste mulige skjøteavhengighetene {brukernavn, status} og {brukernavn, avdeling}.

6NF-versjonen vil dermed se slik ut:

Dermed har man med utgangspunkt i en 5NF-tabell produsert to 6NF-tabeller.

Følgende er et annet eksempel:

Skjøteavhengighetene til tabellen er {legens navn, fagområde}, {legens navn, års erfaring} og {legens navn, type}. Dermed er det tydelig at denne tabellen er på 2NF (på grunn av den ser ut til å ha transitiv avhengighet). Den kan deles opp i følgende tabeller for å gjøre den om til 6NF-tabeller:

## Andre betydninger
Sjette normalform (6NF) brukes noen ganger i stedet som et synonym for domene-nøkkel normalform (DKNF). Denne bruken av begrepet stammer fra før Date og kolleger sitt arbeid.

## Se også
* Databaseteori
* Temporal database
* Ankermodellering
* Datahvelvmodellering

## Referanser