DBMS 中的传递依赖

  • Post category:database

传递依赖是关系数据库理论中的一个概念,指的是一个属性依赖于另一个非主属性,也即是,存在一个非主属性A依赖于B,同时B又依赖于另一个非主属性C,那么属性A就具有传递依赖性,也就是说A依赖于C,而不仅仅是B。

下面是传递依赖的完整攻略:

一、基本概念

  1. 主属性:在一个关系模式中,如果某个属性可以唯一地标识元组,则该属性称为主属性。

  2. 非主属性:在一个关系模式中,如果某个属性不能唯一地标识元组,那么该属性称为非主属性。

  3. 完全函数依赖:在一个关系模式中,如果某个非主属性B完全依赖于主属性,则称B对主属性具有完全函数依赖性。

  4. 部分函数依赖:在一个关系模式中,如果某个非主属性B部分依赖于主属性,则称B对主属性具有部分函数依赖性。

  5. 传递函数依赖:在一个关系模式中,如果某个非主属性C传递依赖于非主属性B,且非主属性B传递依赖于主属性,则称C对主属性具有传递函数依赖性。

二、传递依赖的判定

  1. 找到所有的主属性。

  2. 对于每个非主属性B,判定它是否完全依赖于主属性,如果是,则不需要继续判断;否则,继续进行第三步。

  3. 对于每个非主属性B,找出它所依赖的主属性集,对于其中的每个主属性A,判断B是否和其他的非主属性C存在C->A的依赖关系,并且C和B的属性集合不相同。如果是,则B具有传递依赖性。

三、实例说明

假设我们有一个学生选课表,包含以下属性:学生号、课程号、学生成绩、课程名称、学生姓名。其中,学生号和课程号组成主键。

我们现在要判断学生姓名对学生成绩是否具有传递依赖性。按照上述步骤进行分析。

  1. 找到所有的主属性:学生号、课程号。

  2. 判断学生姓名是否完全依赖于主属性,显然不是,因为一个学生可以选多门课程,每门课程对应一个成绩和一个课程名称。

  3. 针对学生姓名和学生成绩,我们找出它们所依赖的主属性集:学生号,课程号。然后分别判断学生姓名和学生成绩是否和其他非主属性具有C->A的传递依赖关系。

  4. 对于学生姓名,假设存在一个课程名称属性,它依赖于课程号,但是课程名称和学生姓名所依赖的属性集不同,因此学生姓名存在传递依赖,即学生姓名传递依赖于课程号。

  5. 对于学生成绩,不存在任何非主属性依赖于它,因此它不存在传递依赖。

综上所述,学生姓名对学生成绩存在传递依赖。