Sjette normalform

Fra Wikipedia, den frie encyklopedi

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[rediger | rediger kilde]

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].[1]

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. [2]

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.[3] For en annen tilnærming, se TSQL2.[4]

Bruk[rediger | rediger kilde]

Den sjette normalformen brukes for tiden per 2009 i enkelte datavarehus der fordelene veier opp for ulempene,[5] 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[6]) der de ikke er påkrevd og dermed øke hastigheten på spørringer som bare aksesserer flere attributter.

Eksempler[rediger | rediger kilde]

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:[7] I brukertabellen er hver attributt ikke ikke-null og primærnøkkelen er brukernavnet:

Brukertabell
Brukernavn Avdeling Status

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:

Brukere
Brukernavn Status
Brukerens_avdeling
Brukernavn Avdeling

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

Følgende er et annet eksempel:

Tabell 1
Lege-ID Legens navn Fagområde Type Års erfaring
1 Ole Pettersen Ortoped Spesialist 23
2 Andreas Nilsen Ortoped Prøveansatt 4
3 Nina Strand Nevrolog Prøveansatt 5
4 Inger Andersen Ortoped Spesialisering 1
5 Marit Dahl Nevrolog Spesialist 12
6 Lars Berg Øyelege Prøveansatt 3
7 Morten Hagen Øyelege Spesialist 7
8 Ingrid Lund Nevrolog Spesialisering 1
9 Liv Iversen Øyelege Spesialisering 2

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:

Tabell 2.1
Lege-ID Legens navn
1 Ole Pettersen
2 Andreas Nilsen
3 Nina Strand
4 Inger Andersen
5 Marit Dahl
6 Lars Berg
7 Morten Hagen
8 Ingrid Lund
9 Liv Iversen
Tabell 2.2
Lege-ID Fagområde
1 Ortoped
2 Ortoped
3 Nevrolog
4 Ortoped
5 Nevrolog
6 Øyelege
7 Øyelege
8 Nevrolog
9 Øyelege
Tabell 2.3
Lege-ID Års erfaring
1 23
2 4
3 5
4 1
5 12
6 3
7 7
8 1
9 2
Tabell 2.4
Lege-ID Type
1 Spesialist
2 Prøveansatt
3 Prøveansatt
4 Spesialisering
5 Spesialist
6 Prøveansatt
7 Spesialist
8 Spesialisering
9 Spesialisering

Andre betydninger[rediger | rediger kilde]

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.[8]

Se også[rediger | rediger kilde]

Referanser[rediger | rediger kilde]

  1. ^ Date, Darwen & Lorentzos 2003.
  2. ^ Date, Darwen & Lorentzos 2014.
  3. ^ Zimanyi 2006.
  4. ^ Snodgrass.
  5. ^ See the Anchor Modeling website for a website that describes a data warehouse modelling method based on the sixth normal form
  6. ^ «What is Table Elimination?». MariaDB KnowledgeBase. Besøkt 24. april 2024. 
  7. ^ Example provided by: http://www.anattatechnologies.com/q/2011/07/normalization-6nf/
  8. ^ dbdebunk.