多值依赖与部分函数依赖

多值依赖的定义:

设R(U)是一个属性集合U上的一个关系模式,X,Y,和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一Y的值,这组值仅仅决定于X值而与Z值无关。

若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。

可以看出,如果把上面的一改为一,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。

如下表:

课程C教师T 参考书B

数学 邓军数学分析

数学 邓军 高等代数

数学 邓军微分方程

表中,U = C+T+B,(C,T)确定一组B,但是这组B其实与T无关,仅由C确定,所以(C,T)->->B。又因为T不是空集,所以(C,T)->->B为非平凡多值依赖。

要想消除多只依赖,可以分解为:(C,T),(C,B)及

表1:

课程C 教师T

数学邓军

表2:

课程C 参考书B

数学 数学分析

数学 高等代数

数学 微分方程

对于R中的每个非平凡多值依赖X->->Y(Y不属于X),X都含有候选码,则R属于4NF。

分析:对于每一个非平凡多值依赖X->->Y,X若含有候选码,也就是X->Y,所以4NF所允许的非平凡多值依赖是函数依赖。

"

.

百度知道

"

函数依赖是唯一确定的关系,例如在一个表 授课(课程号,课程名,课程学分,教师号,教师姓名,参考书号,参考书名)。当然这个表的主键是(课程号,教师号,参考书号)

课程名和课程学分函数依赖课程号,也就是说课程号唯一确定名字和学分;

同理,教师姓名函数依赖教师号;参考书名函数依赖参考书号。

但是,教师号可能多值依赖课程号,因为给定一个(课程号,参考书号)的组合,可能有对应多个教师号。这是因为多个老师可以使用相同或不同的参考书上同一门课。

简单点讲,函数就是唯一确定的关系;多值依赖却不能唯一确定。

"

.

我是看了百度知道才明白的,标公式的都去使啊看都看不懂,部分函数依赖是一种特殊的多值依赖,多值依赖是有多个教师依赖到同一个(课程号,参考书号)组合里了,而部分函数依赖只是一个教师依赖一个(课程号,参考书号),就是单单老王依赖于(01,数据库)中的01了,这是部分函数依赖,如果还有个老五也依赖于(01,数据库)中的01的话,就是多值依赖了,有n个值部分函数依赖于一个东西上了

.

贴一个分解为4NF的步骤

"

一般情况求主键只看函数依赖,但一般也不是与多值依赖无关
你说的问题有点象将一个关系分解成4NF,分解成4NF的步骤
1.先将该关系模式分解成BCNF,消除了基于函数依赖的多值依赖不包含码,因为各个子模式中的函数依赖的左部都包含码(书上有分解成BCNF的方法)
2.再在各个分解成BCNF的关系模式中,看是否有不是基于函数依赖的非平凡的多值依赖,也就是说例如一个子模式存在X-->Y,X-->Z,Z=U-X-Y,Z非空集,此时必定X不->Y且X不->Z,
分解成(X,Y)和(X,Z)就将该子模式分解成4NF了,理论上是这样,当然在一般的数工考试题目中不需要这样,有时当分解成3NF和BCNF时,原有的多值依赖就破坏了.

"

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...