数据库原理:范式
目录
参考:
- 链接1:【最全】《数据库原理及应用》知识点整理+习题 (opens new window)
- 链接2:数据库原理 (opens new window)
- 链接3:数据库原理知识梳理 (opens new window)
# 数据库原理:范式
关系模式:关系的描述称为关系模式,可以表示为 R (U, D, Dom. F),R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,Dom为属性向域的映射集合,F为属性间数据的依赖关系集合。
候选码(Candidate key):也称码键,表中的某一属性组的值能唯一标识一个元组,则称该属性组为候选码。
- 主属性(Prime attribute):候选码属性称为主属性,非候选码属性称为非主属性。
# 一、数据依赖问题
数据依赖是一个关系内部属性与属性之间的一种约束关系。有多种类型的数据依赖,其中最重要的是函数依赖和多值依赖。
- 函数依赖(Functional Dependency,FD):设R (U)是属性集U上的关系模式,X, Y是U的子集。若对于R (U)的任意一个可能的关系r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y“或“Y函数依赖于X“,记作X→Y。
- 多值依赖(Multivalued Dependency,MVD):设R (U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R (U)中多值依赖X→→Y成立,当且仅当对R (U)的任一关系r,给定的一对(x,z)值,有一组r的值,这组值仅仅决定于x值而与z值无关。
# 函数依赖
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。
在关系模式R(U)中,对于U的子集X和Y,如果X→Y,但Y不为X的子集?,则称X→Y是非平凡的函数依赖,若X→Y,但Y Í X, 则称X→Y是平凡的函数依赖。
完全函数依赖:
部分函数依赖:
示例
See More
上图中违背了Sno→Sname,应为函数依赖只有在不可能存在两个元组在Sno上的值相等,而在Sname上的值不等时才成立。(左边相等右边必相等)
上图中是完全函数依赖,
是部分函数依赖。
# 二、关系模式规范化
一个不好的关系模式会存在以下一些问题:
(1) 数据冗余太大:信息被重复存储,导致浪费大量存储空间
(2) 更新异常:当重复信息的一个副本被修改,所有副本都必须进行同样的修改。因此当更新数据时,系统要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。
(3) 插入异常:只有当一些信息事先已经存放在数据库中时,另外一些信息才能存入数据库中
(4) 删除异常:删除某些信息时可能丢失其它信息
规范化理论是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决数据冗余、插入异常、更新异常、删除异常这些问题。
# 关系模式规范化(normalzation)
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
1NF
如果一关系模式R(U)的每个属性对应的域值都是不可分的(即原子的),则称R(U)属于第一范式,记为R(U)Î1NF.
第一范式的目标是:将基本数据划分为实体集或表的逻辑单元,当设计好每个实体后,需要为其指定主码。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。
示例
See More
2NF
若关系模式R(U)∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。
第二范式的目标:将只部分依赖于候选码(即依赖于候选码的部分属性)的非主属性移到其他表中。
2NF范式虽然消除了由于非主属性对候选码的部 分依赖所引起的冗余及各种异常,但并没有排除传递依赖。因此,还需要对其进一步规范化。
示例
See More
S-L-C这个函数依赖图中:非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno),将其分为两个表后使得非主属性对其各自的码都是完全函数依赖。
3NF
若R(U)∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
第三范式的目标:去掉表中不直接依赖于候选码的非主属性。
示例
See More
Sno→Sdept、Sdept→Sloc 可得: Sno→Sloc,即S-L中存在非主属性对码的传递函数依 赖,S-L ∉ 3NF。采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖。
BCNF
通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。
一个满足BCNF的关系模式有:
- 所有非主属性都完全函数依赖于每个候选码。
- 所有的主属性都完全函数依赖于每个不包含它的候选码。
- 没有任何属性完全函数依赖于非码的任何一组属性。
BCNF范式排除了:
- 任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖;
- 主属性之间的传递依赖。
示例
See More
关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课,每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。
由语义可得到函数依赖:(S,J)→T;(S,T)→J;T→J
因为没有任何非主属性对码传递依赖或部分依赖,
STJ ∈ 3NF。
因为T是决定因素,而T不包含码,所以STJ 不属于 BCNF 关系。
候选码可以有多个,如上面(S,J)和(S,T)都是候选码,包含在任一一个候选码中的属性称为主属性,那么S,J,T都是主属性,以上不满足“所有的主属性都完全函数依赖于每个不包含它的候选码”,是否可以直接理解为决定因素必须为候选码中的一个?