1、关系模式的表示
R:表示关系的名字比如:sc选课表,student学生表。
U:表示一个关系模式的所有属性,比如student表:U(sno,sname,sage,ssex)。
D:表示属性的取值范围比如:性别的取值范围为“男”或“女”。
DOM:表示属性到取值范围的依赖。
F:为属性U上的一组数据依赖。
比如:知道学号sno可以推测出sname,sage,ssex。
2、数据依赖
比如:学号sno可以推测出sname,sage,ssex。
这就是一种数据依赖。
sname函数依赖于sno。
sage函数依赖与sno。
ssex函数依赖于sno。
3、函数依赖在现实生活中的体现
【例】描述一个学生关系,可以有学号、姓名、系名等属性。
一个学号只对应一个学生,一个学生只在一个系中学习,学号确定之后学生所在的系的值就被唯一确定。
Sno函数决定Sname,Sno函数决定Sdept。
sno -> Sname,Sno -> Sdept。
4、数据依赖存在的问题
比如一个选课表:
U(sno,cno,sdept,mname,grade)
sno:学号,cno:课号,sdept:系名,mname:系主任名,grade:学生成绩
(1)数据冗余
浪费大量储存空间,每一个系主任的姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同。
(2)更新异常
数据冗余,更新的时候。维护数据完整性代价太大。如果某系更换系主任后,必须更改与该系学生有关的每一个元组,否则会出现数据不一致的异常。
(3)插入异常
如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。
(4)删除异常
如果某个系的学生毕业了,则删除该系学生信息的同时,把这个系及其主任信息也丢掉了。
5、函数依赖的解决方式
把单一的模式分为多个关系模式,使得每个模式只存在一个函数依赖。