数据库基本概念回顾笔记
数据库完整性
实体完整性
主码必须唯一
参照完整性
外码必须与参照表中的一致
用户自定义完整性
用户自定义的约束
规范化
关系也是一个二维表,每行对应一个元组,每列对应一个域,每列称为属性
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码(Candidate key)
若一个关系有多个候选码,则选定其中一个或多个为主码(Primary key)
候选码的多个属性称为主属性(Prime attribute),不包含在任何候选码中的属性称为非主属性
完全函数依赖和部分函数依赖
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化
1NF
如果一关系模式r(R)的每个属性对应的域值都是不可分的(即原子的),则称r(R)属于第一范式,记为r(R)Î1NF.
第一范式的目标是:将基本数据划分成称为实体集或表的逻辑单元,当设计好每个实体后,需要为其指定主码。
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
2NF
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。
第二范式的目标:将只部分依赖于候选码(即依赖于候选码的部分属性)的非主属性移到其他表中。
S-L-C这个函数依赖图中非主属性Sdept和Sloc部分函数依赖于码(Sno, Cno)
将其分为两个表后使得非主属性对其各自的码都是完全函数依赖
2NF范式虽然消除了由于非主属性对候选码的部分依赖所引起的冗余及各种异常,但并没有排除传递依赖。因此,还需要对其进一步规范化
3NF
若R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码
第三范式的目标:去掉表中不直接依赖于候选码的非主属性
Sno→Sdept Sdept → Sno Sdept→Sloc 可得: Sno→Sloc,即S-L中存在非主属性对码的传递函数依 赖,S-L ∉ 3NF
采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖:
BCNF
通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。
一个满足BCNF的关系模式有:
所有非主属性都完全函数依赖于每个候选码 所有的主属性都完全函数依赖于每个不包含它的候选码 没有任何属性完全函数依赖于非码的任何一组属性 BCNF范式排除了:
任何属性(包括主属性和非主属性)对候选码的部分依赖和传递依赖; 主属性之间的传递依赖。 例子:
关系模式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都是主属性,以上不满足“所有的主属性都完全函数依赖于每个不包含它的候选码”
总结: