【例2.2】表2.3所示的学生关系模式student(学号, 姓名, 性别, 专业号)。学号是不允许重复的,如果学号相同的两个学生元组在其他属性上的取值肯定相同,可以推出{学号} →{姓名}, {学号} → {性别}, {学号} → {专业号}。
l 属性间的这种函数依赖关系跟语义有关,它属于语义范畴的概念。
【例子】 如果不允许出现重名的学生元组,则可以有{姓名} →{学号},进而{学号} ↔ {姓名}。
l 如果属性集是由单个属性构成,标志集合的大括号“{”和“}”可以省略,如“{学号} →{姓名}”可以写成“学号→ 姓名”。
l 注意,在实际数据库开发中,可以从用户提供的需求说明中或是从基本常识中获取函数依赖关系,例如上述“学号→ 姓名”就是一个基本常识。
定义2.4 设R(U)是属性集U上的一个关系模式,A,B ⊆ U。若A→B是一个函数依赖,如果B→A,则称A→B为一个平凡函数依赖;如果B⊄A,则称A→B为一个非平凡函数依赖。
Ø 对于任意B⊆A,显然有A→B,它是一种平凡函数依赖。
【例子】“{学号, 姓名} → 姓名”是一种平凡函数依赖。由于平凡函数依赖没有实际意义,一般不予以讨论,在默认情况下提到的函数依赖均指非平凡函数依赖。
定义2.5 设R(U)是属性集U上的一个关系模式,A, B ⊆ U。若A→B是一个函数依赖,并且对于任意C ⊆ A且C非空,均有C B,则称A→B是一个完全函数依赖(Full functional dependency),即B完全函数依赖于A,记为AB;否则称A→B是一个部分函数依赖(Partial functional dependency),即B部分函数依赖于A,记为AB。
【例2.3】表2.5所示的选课关系模式SC(学生编号,课程编号,成绩),{学生编号, 课程编号} 成绩,因为学生编号 成绩且课程编号 成绩。又如,表2.3所示学生关系模式student(学号, 姓名, 性别, 专业号),{学号, 姓名} 性别,确实有{学号, 姓名} → 性别,但学号→性别。
Ø 对于函数依赖A→B,如果A只包含一个属性,则必有A B中,因为这时的A不存在非空真子集。
定义2.6 设R(U)是属性集U上的一个关系模式,A, B, C Í U。若A→B (B⊄A, B A),且B→C成立,则称C传递函数依赖于A,记为A C。
Ø 注意,此处加上条件B A,是因为如果B→A,则实际上变为A↔B,即A→C,而不是A C。