4.2.3 函数依赖和主码的唯一性

4.2.3 函数依赖和主码的唯一性

主码是由一个或多个属性组成的可唯一标识元组的最小属性组。主码在关系中总是唯一的,即主码函数决定关系中的其他属性。因此,一个关系,主码值总是唯一的(如果主码的值重复,则整个元组都会重复)。否则,违反实体完整性规则。

与主码的唯一性不同,在关系中,一个函数依赖的决定因素可能是唯一的,也可能不是唯一的。如果知道A决定B,且A和B在同一关系中,但仍无法知道A是否能决定除B以外的其他所有属性,所以无法知道A在关系中是否是唯一的。

【例4.2】 有关系模式:学生成绩(学生号,课程号,成绩,教师,教师办公室)此关系中包含的四种函数依赖为:

(学生号,课程号)→成绩

课程号→教师

课程号→教师办公室

教师→教师办公室

其中,课程号是决定因素,但它不是唯一的。因为它能决定教师和教师办公室,但不能决定属性成绩。决定因素(学生号,课程号)除了能决定成绩外,当然也能决定教师和教师办公室,因此它是唯一的。所以,学生成绩关系的主码应取(学生号,课程号)。

函数依赖性是一个与数据有关的事物规则的概念。如果属性B函数依赖于属性A,那么,若知道了A的值,则完全可以找到B的值,这并不是说可以导算出B的值,而是逻辑上只能存在一个B的值。

例如,在人这个实体中,如果知道某人的唯一标识符,如身份证号,则可以得到此人的性别、身高、职业等信息,所有这些信息都依赖于确认此人的唯一的标识符。通过非主属性如年龄,无法确定此人的身高,从关系数据库的角度来看,身高不依赖于年龄。事实上,这也就意味着主码是实体实例的唯一标识符。因此,在以人为实体来讨论依赖性时,如果已经知道是哪个人,则身高、体重等就都知道了,主码指示了实体中的某个具体实例。