一句话,研究关系数据库理论就是为了设计出合适的关系模式,也即合适、高效的表
一:概念回顾:关系模式
关系模式:关系模式就是对关系的描述,可以表示为
- :关系名
- :组成该关系的属性名集合
- :
- 中属性所来自的域
- :属性向域的映像集合
- :属性间数据的依赖关系集合(此部分属于第六章:关系数据理论的内容)
由于、与模式设计关系不大,所以在本章中把关系模式看作一个三元组
- 并且仅当上的一个关系满足时,称为关系模式的一个关系
二:数据依赖
数据依赖:数据依赖是一个关系内部属性与属性之间的一种约束关系。 这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系。它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。主要有两种类型的数据依赖
- 函数依赖(FD):属性间的这种依赖关系类似于数学中的函数y=f(x),自变量x确定之后,相应的函数值y也就唯一地确定了。比如描述一个学生的关系,可以有学号(
Sno
)、姓名(Sname
)、 系名(Sdept
) 等几个属性,由于一个学号只对应一个学生,一个学生只在一个系学习。因而当“学号”值确定之后,学生的姓名及所在系的值也就被唯一地确定了。记作Sno→Sname
, Sno-> Sdept
- 多值依赖(MVD):后面会说
三:一个例子:不遵循关系数据理论导致的问题
【例】建立一个描述学校教务的数据库,该数据库涉及的对象包括学生的学号
(Sno
)、所在系(Sdept
)、 系主任姓名(Mname
)、课程号(Cno
)和成绩(Grade
)。假设用一个单一的关系模式Student
来表示,则该关系模式的属性集合为
根据现实世界我们所熟知的,会有以下事实
- 一个系有若干学生,但一个学生只属于一个系
- 一个系只有一名(正职)负责人
- 一个学生可以选修多门课程,每门课程有若干学生选修
- 每个学生学习每一门课程有一个成绩
这样的语义限制,将会导致属性上的函数依赖
记作:
下表是关系模式Student
某一时刻的一个实例
我们说,这样的关系模式是失败的,因为它存在以下问题
- 数据冗余:比如,每一个系的系主任姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同,这将浪费大量的存储空间
- 更新异常:比如,某系更换系主任后,必须修改与该系学生有关的每一个元组
- 插入异常:如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库
- 删除异常:如果某个系的学生全部毕业了,则在删除该系学生信息的同时,这个系及其系主任的信息也丢掉了
而如何解决这些问题,就是下一节:规范化所要讨论的内容了
标签:关系,依赖,关系数据,王珊,模式,学生,一个,数据库系统,属性 From: https://blog.51cto.com/u_14913756/6076511