日期:2014-05-18  浏览次数:20419 次

数据库的题目。求解。
假设有学生选课关系模式 SC(Sno,Cno,Grade) ,其中Sno表示学号,Cno表示课程号,Grade表示成绩,那么Sno->->Cno正确吗?为什么?  
PS:多值依赖怎么看都没懂。没有列子。能给个列子更好。

------解决方案--------------------
其实多值依赖按照我的理解就是属性间独立的一对多关系,或者说独立依赖集。
这里我先抄下多值依赖的数学定义:
设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关。

就是两层意思:
1.一对给定的x,z值对应有一组y值(一对多),这里注意Z是关系属性集中除去X,Y之外的所有属性。
2.与z值无关,换言之x和y的一对多关系是独立的,与z无关。

来看你的学生选课系统 SC(sno,cno,grade)
设学号数据集为X,课程号属性集为Y,那么grade可以看成是Z
对于给定的一个学生,一个分数,对应一组课程(一个学生可能有一门或者几门分数相同)
可是这组课程号不仅跟这个学生有关,也与分数有关。

所以sno->->cno是错误的。

要举多值依赖的例子其实也很简单,你只要把两个独立依赖集放在一起就可以
比如 假设一个系对应一组老师, 一个系对应一组学生,放在一起 关系为 TDS吧
那么TDS(tno,dno,sno) 明显 dno->->tno dno->->sno 其中tno 和 sno是相互独立的