概念回顾
- 关系:描述实体、属性、实体间的关系;从形式上来看,一张二维表;是所涉及属性的一个笛卡尔积;
- 关系模式:用来定义关系;
- 关系数据库:基于关系模型的数据库,利用关系描述现实世界;从形式上来看,是由一组关系组成;
- 关系数据库的模式:定义这组关系的关系模式的全体;
- 关系模式的形式化定义:
R(U, D, DOM, F);R为关系名,U为组成该关系的属性名组合,DOM为属性向域的映象组合,F为属性间数据的依赖关系集合;
可以简化为R(U,F)
当且仅当U上的一个关系r 满足F时,r称为关系模式 R(U, F)的一个关系 - 完整性约束的表现形式:① 限定属性取值范围;② 定义属性间的相互关连(主要体现在值是否相等、参照关系)这就是数据依赖
- 数据依赖:一个关系中属性间值的相等与否体现的数据间的关系
- 数据依赖的类型:① 函数依赖;②多值依赖;③ 连接依赖;
6.1数据依赖对关系模式的影响
描述学校的数据库
- 学生的学号(Sno)、所在系(Sdept) 系主任姓名(Mname)、课程名(Cname) 成绩(Grade)
Student (U,F) U ={ Sno, Sdept, Mname, Cname, Grade }
此关系存在的问题很多?
- 数据冗余太多,同一个系主任的名字要多次出现
- 更新异常,当某一个系主任变更后,有大量元组需要进行修改
- 插入异常,如果一个系刚成立,还没有学生,系主任的信息就存不进去
- 删除异常,某一个系学生全部毕业后,该系主任信息随之删除,查询不到
出现问题的原因
- 数据依赖太严重
解决方法
- 分解关系模式消除数据依赖
6.2规范化
6.2.1 函数依赖
- 函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。
若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。 其中,X称为这个函数依赖的决定属性集, Y=f(x);比如 Y是学生姓名,X是学生的学号。 - 函数依赖不是指某一个或者某些关系满足约束条件,而是所有的关系模式都需要满足条件
平凡函数依赖和非平凡的函数依赖
- 在关系模式R(U)中,对于U的子集X和Y,
- 如果X→Y,但Y 不属于X,则称X→Y是非平凡的函数依赖;如:
(Sno, Cno) → Grade
- 若X→Y,但Y属于X, 则称X→Y是平凡的函数依赖 如:
(Sno, Cno) → Sno
完全函数依赖和不完全函数依赖
传递函数依赖
6.2.2 码
- 候选码、主码、码;
6.2.3 范式
- 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。
6.2.4 2NF
- 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。
- 将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余
所以对于SL模式还需进一步处理
6.2.5 3NF
- 把SL分解为:
SD( Sno码, Sdept) DL(Sdept码 , Sloc)
6.2.6 BCNF
- 设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。
3NF和BCNF的区别
- 如果关系模式R∈BCNF, 必定有R∈3NF
- 如果R∈3NF,且R只有一个候选码, 则R必属于BCNF。
BCNF的关系模式所具有的性质
- ⒈ 所有非主属性都完全函数依赖于每个候选码
- ⒉ 所有主属性都完全函数依赖于每个不包含它的候选码
- ⒊ 没有任何属性完全函数依赖于非码的任何一组属性