Skjøteavhengighet

Fra testwiki
Hopp til navigering Hopp til søk

I databaseteori er en skjøteavhengighet en begrensning på mengden tillatte relasjoner i et databaseskjema. En tabell T omfattes av en skjøteavhengighet hvis T alltid kan gjenskapes ved å skjøte sammen flere tabeller som hver har en delmengde av attributtene til T. Dersom en av tabellene i skjøten har alle attributtene til tabellen T kalles skjøteavhengigheten triviell.

Skjøteavhengighet spiller en viktig rolle i femte normalform (5NF), også kjent som projeksjonsskjøt normalform, fordi det kan bevises at hvis et skjema R er dekomponert i tabellene R1 til Rn, så vil dekomponeringen være en tapsfri-skjøt-dekomponering dersom de lovlige relasjonene på R er begrenset til en skjøteavhengighet på R kalt *(R1,R2,,Rn).

En annen måte å beskrive en skjøteavhengighet på er å si at relasjonene i skjøteavhengigheten er uavhengige av hverandre.

I motsetning til funksjonelle avhengigheter er det ingen korrekt og komplett aksiomatisering for skjøteavhengigheter,[1] selv om aksiomatisering eksisterer for mer uttrykksfulle avhengighetsspråk, som for eksempel fullt typiserte avhengigheter.[2]Mal:Rp Imidlertid er implikasjon av skjøteavhengigheter avgjørbar.[2]Mal:Rp

Formell definisjon

La R være et relasjonsskjema og la R1,R2,,Rn være en nedbryting av R.

Relasjonen r(R) tilfredsstiller skjøteavhengigheten:

*(R1,R2,,Rn) hvis i=1nΠRi(r)=r.

En skjøteavhengighet er triviell hvis en av Ri selv er R.[3]

En binær skjøteavhengighet kalles flervaluert avhengighet av historiske årsaker på grunn av at de ble studert før det generelle tilfellet. Mer spesifikt, hvis U er en mengde attributter og R en relasjon over den, så vil R tilfredsstille XY hvis og bare hvis R tilfredsstiller *(XY,X(UY)).

Eksempel

Anta at en pizzakjede modellerer innkjøp i tabellen Ordre = {ordrenummer, kundenavn, pizzanavn, kurer}.

Følgende relasjoner kan utledes:

  • Kundenavnet avhenger av ordrenummeret
  • Pizzanavnet avhenger av ordrenummeret
  • Kureren avhenger av ordrenummeret

Siden relasjonene er uavhengige har vil følgende skjøteavhengighet: *((ordrenummer, kundenavn), (ordrenummer, pizzanavn), (ordrenummer, kurer)).

Hvis hver kunde har sin egen kurer, kan det imidlertid være en skjøteavhengighet som dette: *((ordrenummer, kundenavn), (ordrenummer, pizzanavn), (ordrenummer, kurer), (kundenavn, kurer)), men *((ordrenummer, kundenavn, kurer), (ordrenummer, pizzanavn)) vil også være gyldig. Dette eksempelet gjør det åpenbart at bare å ha en skjøteavhengighet ikke er nok til å normalisere et databaseskjema.

Se også

  • Chase-algoritmen, enkel fikspunktalgoritme for å teste og håndheving av implikasjoner av dataavhengigheter i databasesystemer
  • Antakelsen om den universelle relasjonen, ideen om at alle dataattributter i en relasjonsdatabase kan plasseres i en tabell, som deretter kan dekomponeres etter behov

Referanser

Mal:Databasenormalisering