4NF删除了表中不必要的冗余结构:多值依赖。多值依赖到底是什么???能否举个例子。

解决方案 »

  1.   

    课本知识:
        在关系模式中,函数依赖不能表示属性值之间的一对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖的数据依赖。例如,教师和学生之间没有直接联系,但教师和学生可通过系名,或任课把教师和学生联系起来。
        举例如下,有这样一个关系<仓库管理员,仓库号,库存产品号>,假设一个一个产品只能放到一个仓库中,但是一个仓库可以由若干管理员,那么对应于一个<仓库管理员,库存产品〉有一个仓库号,而实际上,这个仓库号只与库存产品号有关,与管理员无关,就说这是多值依赖。
      

  2.   

    我觉得可以将多值依赖和函数依赖对比来理解:
     函数依赖表示一种一对一的关系,是一种直接确定的关系; 
     多值依赖表示一种一对多的关系,是一种间接相关的关系;
     
    可以用  课程,教师,参考书,这两者的关系来说明;
      同一门课程,可以是多个教师教, 
      同一个教师,可是上多门课;
      同一门课,可以有多本参考书;
    而为什么说4NF删除了不必要的冗余结构呢?如上面那个例子:如果一个表中,
         课程     教师   参考书
         会计     A     管理学入门
         会计     A     基础会计
         会计     B     管理学入门
         会计     B     基础会计
         会计     C     管理学入门
         会计     C     基础会计
         会计     D     管理学入门
         会计     D     基础会计
         ……
    1.在这个关系模式{课程,教师,参考书}里,可以看见,课程只有一门,而参考书有2本,任课老师4个,
      记录数目(元组个数)=2*4=8条;
    2.如果将此模式进行分解,成为{课程,参考书}{课程,教师},则记录数就会减少为6(2+4)条;而随着记录数据的增加,前者的乘法效应会使得数据库的记录出现较大的冗余;后者不仅减少了冗余,而且只要通过连接查询就可以查询到(课程,教师,参考书)的关系了。p.s.虽然这是07年的帖子,也许楼主的问题早就解决完了,但我想也许还会有人检索相似的问题吧,所以尽自己的能力解答,希望可以有用。