I en relationsdatabase opstår der en afhængighed, når informationen, der er gemt i den samme databasetabel, entydigt bestemmer anden information, der er gemt i den samme tabel. En afhængighed med flere værdier opstår, når tilstedeværelsen af en eller flere rækker i en tabel antyder tilstedeværelsen af en eller flere andre rækker i den samme tabel. Sagt på en anden måde er to attributter (eller kolonner) i en tabel uafhængige af hinanden, men begge afhænger af en tredje attribut.
En afhængighed med flere værdier forhindrer normaliseringsstandardens fjerde normalform. Relationelle databaser følger fem normale former, der repræsenterer retningslinjer for postdesign. De forhindrer opdateringsanomalier og uoverensstemmelser i dataene. Den fjerde normalform omhandler mange-til-en-relationer i en database.
Functional Dependency vs. Multivalued Dependency
For at forstå en afhængighed med flere værdier er det nyttigt at gense, hvad en funktionel afhængighed er.
Hvis en attribut X entydigt bestemmer en attribut Y, så er Y funktionelt afhængig af X. Dette skrives som X -> Y. For eksempel, i Elev-tabellen nedenfor, bestemmer Student_Name Major:
Student_Name | Major |
---|---|
Ravi | Kunsthistorie |
Beth | Kemi |
Denne funktionelle afhængighed kan skrives: Student_Name -> Major. Hvert Student_Name bestemmer nøjagtigt én major og ikke mere.
Hvis du ønsker, at databasen også skal spore de sportsgrene, disse elever dyrker, tror du måske, at den nemmeste måde at gøre dette på er blot at tilføje endnu en kolonne med titlen Sport:
Student_Name | Major | Sport |
---|---|---|
Ravi | Kunsthistorie | Fodbold |
Ravi | Kunsthistorie | Volleyball |
Ravi | Kunsthistorie | Tennis |
Beth | Kemi | Tennis |
Beth | Kemi | Fodbold |
Problemet her er, at både Ravi og Beth dyrker flere sportsgrene. Det er nødvendigt at tilføje en ny række for hver yderligere sport.
Denne tabel har introduceret en afhængighed med flere værdier, fordi hovedfaget og sporten er uafhængige af hinanden, men begge afhænger af eleven. Dette er et simpelt eksempel og let identificerbart, men en afhængighed af flere værdier kan blive et problem i en stor, kompleks database.
En afhængighed med flere værdier skrives X ->-> Y. I dette tilfælde:
Student_Name ->-> Major
Student_Name ->- > Sport
Dette læses som "Student_Name multidetermines Major" og "Student_Name multidetermines Sport."
En afhængighed med flere værdier kræver altid mindst tre attributter, fordi den består af mindst to attributter, der er afhængige af en tredje.
Multivalued Dependency and Normalization
En tabel med en afhængighed med flere værdier overtræder normaliseringsstandarden for fjerde normalform, fordi den skaber unødvendige redundanser og kan bidrage til inkonsistente data. For at bringe dette op til 4NF, er det nødvendigt at opdele disse oplysninger i to tabeller.
Tabellen nedenfor har nu en funktionel afhængighed af Student_Name -> Major, og ingen afhængigheder med flere værdier:
Student_Name | Major |
---|---|
Ravi | Kunsthistorie |
Ravi | Kunsthistorie |
Ravi | Kunsthistorie |
Beth | Kemi |
Beth | Kemi |
Mens denne tabel også har en enkelt funktionel afhængighed af Student_Name -> Sport:
Student_Name | Sport |
---|---|
Ravi | Fodbold |
Ravi | Volleyball |
Ravi | Tennis |
Beth | Tennis |
Beth | Fodbold |
Normalisering opnås ofte ved at forenkle komplekse tabeller, så de indeholder information relateret til en enkelt idé eller et enkelt tema i stedet for at forsøge at få en enkelt tabel til at indeholde for meget forskellig information.