I en relationsdatabas uppstår ett beroende när informationen som lagras i samma databastabell unikt bestämmer annan information som lagras i samma tabell. Ett beroende med flera värden uppstår när närvaron av en eller flera rader i en tabell antyder närvaron av en eller flera andra rader i samma tabell. Med andra ord är två attribut (eller kolumner) i en tabell oberoende av varandra, men båda beror på ett tredje attribut.
Ett beroende med flera värden förhindrar normaliseringsstandardens fjärde normalform. Relationsdatabaser följer fem normala former som representerar riktlinjer för postdesign. De förhindrar uppdateringsavvikelser och inkonsekvenser i data. Den fjärde normalformen handlar om många-till-en-relationer i en databas.
Functional Dependency vs. Multivalued Dependency
För att förstå ett beroende med flera värden är det bra att se över vad ett funktionellt beroende är.
Om ett attribut X unikt bestämmer ett attribut Y, är Y funktionellt beroende av X. Detta skrivs som X -> Y. Till exempel, i tabellen Studenter nedan, bestämmer Student_Name Major:
Student_Name | Major |
---|---|
Ravi | Konsthistoria |
Beth | Kemi |
Detta funktionella beroende kan skrivas: Student_Name -> Major. Varje Student_Name bestämmer exakt en major och inte fler.
Om du vill att databasen också ska spåra sporterna dessa elever ägnar sig åt, kanske du tror att det enklaste sättet att göra detta är att bara lägga till en annan kolumn med titeln Sport:
Student_Name | Major | Sport |
---|---|---|
Ravi | Konsthistoria | Fotboll |
Ravi | Konsthistoria | Volleyboll |
Ravi | Konsthistoria | Tennis |
Beth | Kemi | Tennis |
Beth | Kemi | Fotboll |
Problemet här är att både Ravi och Beth spelar flera sporter. Det är nödvändigt att lägga till en ny rad för varje ytterligare sport.
Den här tabellen har infört ett beroende av flera värden eftersom majoren och sporten är oberoende av varandra men båda är beroende av studenten. Detta är ett enkelt exempel och lätt identifierbart, men ett beroende av flera värden kan bli ett problem i en stor, komplex databas.
Ett beroende med flera värden skrivs X ->-> Y. I det här fallet:
Student_Name ->-> Major
Student_Name ->- > Sport
Detta läses som "Student_Name multidetermines Major" och "Student_Name multidetermines Sport."
Ett beroende med flera värden kräver alltid minst tre attribut eftersom det består av minst två attribut som är beroende av ett tredje.
Multivalued Dependency and Normalization
En tabell med ett beroende av flera värden bryter mot normaliseringsstandarden för fjärde normalformen eftersom den skapar onödiga redundanser och kan bidra till inkonsekventa data. För att få upp detta till 4NF är det nödvändigt att dela upp denna information i två tabeller.
Tabellen nedan har nu ett funktionellt beroende av Student_Name -> Major, och inga flervärdiga beroenden:
Student_Name | Major |
---|---|
Ravi | Konsthistoria |
Ravi | Konsthistoria |
Ravi | Konsthistoria |
Beth | Kemi |
Beth | Kemi |
Även om denna tabell också har ett enda funktionellt beroende av Student_Name -> Sport:
Student_Name | Sport |
---|---|
Ravi | Fotboll |
Ravi | Volleyboll |
Ravi | Tennis |
Beth | Tennis |
Beth | Fotboll |
Normalisering åstadkoms ofta genom att förenkla komplexa tabeller så att de innehåller information relaterad till en enskild idé eller ett tema snarare än att försöka få en enda tabell att innehålla för mycket olikartad information.