Functionele afhankelijkheid

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken

Een functionele afhankelijkheid is een bepaald soort constraint (voorwaarde) op de mogelijke waarden in een relatie (tabel) van een relationele database. Een verzameling attributen (kolommen) van de relatie wordt functioneel afhankelijk genoemd van een tweede verzameling attributen als altijd wanneer twee tupels (rijen) van de relatie gelijke waarden hebben voor de tweede verzameling attributen, ze ook gelijke waarden hebben voor de eerste verzameling attributen: A \rightarrow B \ \stackrel{D}{\Longleftrightarrow} \ \forall t_1,t_2: \forall a \in A: t_1(a)=t_2(a) \Rightarrow \forall b \in B: t_1(b)=t_2(b)

De beide verzamelingen attributen worden de gedetermineerde respectievelijk de determinant van de functionele afhankelijkheid genoemd.

Een verzameling attributen waarvan alle attributen functioneel afhankelijk zijn wordt een kandidaatsleutel van de relatie genoemd.

Functionele afhankelijkheden spelen een grote rol bij databanknormalisatie.

Voorbeelden[bewerken]

Om het wat visueler te maken staan hier twee eenvoudige tabellen met de attributen X en Y. In de eerste tabel geldt de functionele afhankelijkheid \{X\}\rightarrow \{Y\}, in de tweede tabel niet.

X Y Z
a b c
a b d
b a d
c b c


X Y Z
a b c
a c d
a b d
b a c

In de eerste en tweede rij ziet u dat de functionele afhankelijkheid wordt verbroken, doordat de waarde in de kolom Y zowel b en c hebben, terwijl de waarde in kolom X bij beide a is.

Functionele afhankelijkheden komen in databases zeer veel voor. Zo zou bijvoorbeeld voor een telefoongids kunnen gelden: \{plaatsnaam\} \rightarrow \{netnummer\} ("een plaatsnaam heeft maar een netnummer"). Dat betekent niet dat het omgekeerde ook moet gelden: bij één netnummer horen vaak meerdere plaatsnamen.

Axioma's[bewerken]

De volgende axioma's zijn van toepassing op functionele afhankelijkheden. De eerste drie worden ook wel axioma's van Armstrong genoemd:

  • Reflexiviteitsregel: Wanneer \alpha een attribuutset is en \beta\subseteq\alpha geldt, dan geldt \alpha\rightarrow\beta.
  • Augmentatieregel: Wanneer \alpha \rightarrow \beta geldt en \gamma is een verzameling attributen, dan geldt \alpha\gamma\rightarrow\beta\gamma.
  • Transiviteitsregel: Wanneer \alpha\rightarrow\beta en \beta\rightarrow\gamma gelden, dan geldt ook \alpha\rightarrow\gamma.

De volgende drie axioma's kunnen logisch afgeleid worden uit de axioma's van Armstrong:

  • Verenigingsregel: Wanneer \alpha\rightarrow\beta en \alpha\rightarrow\gamma geleden, dan geldt ook \alpha\rightarrow\beta\gamma.
  • Decompositieregel: Wanneer \alpha\rightarrow\beta\gamma geldt, dan gelden ook \alpha\rightarrow\beta en \alpha\rightarrow\gamma.
  • Pseudotransiviteitsregel: Wanneer \alpha\rightarrow\beta en \gamma\beta\rightarrow\delta gelden, dan geldt ook \alpha\gamma\rightarrow\delta.