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

解决方案 »

  1.   

    你要首先弄懂多值依赖与函数依赖的关系,其实多值依赖就是一种间接的依赖关系!有这样一个关系 <仓库管理员,仓库号,库存产品号> ,假设一个一个产品只能放到一个仓库中,但是一个仓库可以由若干管理员,那么对应于一个 <仓库管理员,库存产品〉有一个仓库号,而实际上,这个仓库号只与库存产品号有关,与管理员无关,就说这是多值依赖。
      

  2.   

    其实多值依赖按照我的理解就是属性间独立的一对多关系,或者说独立依赖集。
    这里我先抄下多值依赖的数学定义:
    设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是相互独立的