当表中存在一个或多个行时,意味着同一表中存在一个或多个其他行,则发生多值依赖关系。
如果表具有属性P,Q和R,则Q和R是P的多值事实。
用双箭头表示-
->-> |
对于我们的示例:
P->-> Q P->-> R |
在上述情况下,仅当Q和R是独立属性时,才存在多值依赖关系。
具有多值依赖关系的表违反了4NF。
让我们看一个例子&mins;
<学生>
学生姓名 | 课程学科 | 活动项目 |
阿米特 | 数学 | 唱歌 |
阿米特 | 数学 | 跳舞 |
尤夫拉吉 | 电脑 | 蟋蟀 |
阿卡什 | 文学 | 跳舞 |
阿卡什 | 文学 | 蟋蟀 |
阿卡什 | 文学 | 唱歌 |
在上表中,我们可以看到Student Amit 和Akash 对不止一项活动感兴趣。
这是多值依赖关系,因为学生的CourseDiscipline 独立于“活动”,但依赖于学生。
因此,多值依赖关系-
StudentName->-> CourseDiscipline StudentName->->活动 |
上述关系违反了归一化中的第四范式。
要更正它,请将表分为两个单独的表,然后中断多值依赖关系-
<StudentCourse>
学生姓名 | 课程学科 |
阿米特 | 数学 |
阿米特 | 数学 |
尤夫拉吉 | 电脑 |
阿卡什 | 文学 |
阿卡什 | 文学 |
阿卡什 | 文学 |
<学生活动>
学生姓名 | 活动项目 |
阿米特 | 唱歌 |
阿米特 | 跳舞 |
尤夫拉吉 | 蟋蟀 |
阿卡什 | 跳舞 |
阿卡什 | 蟋蟀 |
阿卡什 | 唱歌 |
这打破了多值依赖关系,现在我们有了两个功能依赖关系-
StudentName-> CourseDiscipline StudentName->活动 |