本章内容为考核部分:20分 请认真学习 还在更新
(一)为什么要有数据依赖?
李优老师说:若把不相关的数据建立关联,那么可以想象以下例子:
学校有10000个学生,三院有3000个学生,若每个学生选课都和校长或系主任名字联系在一起,那么会出现,当校长和系主任换人时,要更改上万次学生信息。最好是只出现一次。
数据冗余+更新异常+插入异常+删除异常
(二)概念分类
1. 函数依赖+多值依赖+连接依赖
数据依赖是指数据之间的一种约束关系,即某些数据的取值依赖于其他数据的取值。数据依赖分为函数依赖和多值依赖两种类型。下面分别介绍一下这两种依赖类型:
Student <U,F>
U = { Sno,Sdept,Mname,Cname,Grade }
(1)函数依赖 FD (Functional Dependency)
X函数确定Y or Y函数依赖X
举例:
Sno->Sname 对
函数依赖是指在一个关系中,某些属性的值唯一地决定了其他属性的值。例如,在一个学生表格中,每个学生的学号唯一地决定了该学生的姓名和年龄,即学号->姓名、学号->年龄。这种依赖关系可以表示为学号->(姓名, 年龄)。
注意关系依赖是否成立,不是依靠常识,而是在关系表中寻找不成立的特例来反对
(2)多值依赖 MVD()
多值依赖是指在一个关系中,某些属性的值与其他属性的值存在一种多对多的关系。例如,在一个学生选课表格中,每个学生可以选多门课程,每门课程也可以被多个学生选,因此学生和课程之间存在一种多对多的关系。这种依赖关系可以表示为学号、课程号->(选课时间, 授课教师)。
数据依赖是关系数据库设计的基础,它可以帮助我们确定关系模式的属性和属性之间的约束关系,从而保证数据的完整性和一致性。在数据库中,我们通常使用范式理论来对数据依赖进行分析和规范化,以达到优化数据库设计的目的。
例子:
F = { Sno->Sdept, Sdept->Mname, (Sno,Cname)->Grade }
关系依赖越少,数据越独立
2. 函数依赖:
(1)平凡函数依赖与非平凡函数依赖
平凡函数依赖是指一个属性或属性集合对另一个属性的值产生影响,但这个属性或属性集合已经包含在另一个属性集合中。例如,在一个表格中,学号->学号,这就是一个平凡的函数依赖,因为学号在左侧和右侧都出现了,因此它并没有提供任何有用的信息。
非平凡函数依赖是指一个属性或属性集合对另一个属性的值产生影响,而这个属性或属性集合没有被包含在任何其他属性集合中。例如,在一个表格中,学号->姓名,这就是一个非平凡的函数依赖,因为学号可以唯一地确定一个人的姓名,而学号不包含在任何其他属性集合中。
(2)完全函数依赖和非完全函数依赖
完全函数依赖:指在一个关系中,一个属性集合对另一个属性集合产生影响,而且这个属性集合中的任意一个属性都不能被去掉,否则函数依赖就不成立。例如,在一个学生表格中,学号->姓名、年龄,这就是一个完全函数依赖,因为学号可以唯一地确定一个人的姓名和年龄,而学号中的任何一个属性都不能被去掉。
非完全函数依赖:指在一个关系中,一个属性集合对另一个属性集合产生影响,但这个属性集合中的某些属性可以被去掉,仍然可以满足函数依赖的条件。例如,在一个学生选课表格中,学号和课程号->成绩,这就是一个非完全函数依赖,因为学号和课程号可以确定一个人选了哪门课程和这门课程的成绩,但学号和课程号中的任意一个属性都可以被去掉,依然可以满足函数依赖的条件。
(3)传递函数依赖的概念和生动容易理解的例子
传递函数依赖是指在一个关系中,一个属性集合对另一个属性集合产生影响,但这个影响是通过中间属性集合传递的。例如,在一个雇员表格中,部门号->部门名称,部门名称->部门经理,这两个函数依赖都是直接的,但是如果我们将它们组合起来,部门号->部门经理,这就是一个传递函数依赖,因为部门经理的值是通过部门名称传递来的。
一个更生动的例子是,假设我们有一个关系表格,其中包含了人员的姓名、性别和出生日期等信息。如果我们知道一个人的出生日期,就可以确定他的星座,而如果我们知道一个人的星座,就可以推断他的性格特征。因此,出生日期->星座,星座->性格特征,这就是一个传递函数依赖,因为性格特征的值是通过出生日期传递来的。
关系模式中的码是指一个或多个属性组成的组合,可以唯一地标识关系模式中的每个元组。在关系模式中,一个或多个属性可以组成一个或多个码。其中,一个码被称作主码,其他的码被称为备用码。
一个码可以唯一地标识关系模式中的每个元组,因此在实际应用中,主码通常被用作关系模式的主键,以便在数据库中进行查询、修改和删除操作。同时,备用码可以用于加速查询操作,提高数据访问效率。
在设计关系模式时,选择合适的码是非常重要的。通常情况下,应该选择具有唯一性、最小性和稳定性的组合作为码。其中,唯一性指码能够唯一地标识每个元组;最小性指码不能再缩小,否则就失去了唯一性;稳定性指码应该是不变的,不能随着数据的变化而变化。
总的来说,码是关系模式中的重要概念,它能够帮助我们唯一地标识每个元组,并提高数据访问效率。在设计关系模式时,我们应该选择合适的码,以确保数据的完整性和稳定性。