6.2.6 BC范式
举个栗子:关系模式STJ(S, T, J)中,S表示学生,T表示教师,J表示课程
语义:
假设每个教师只能教一门课程 T → J
每门课程由若干教师教授,但某一学生选修某门课,就选定了一个固定的教师 (S, J) → T
某个学生选修某个教师的课程就确定了所选课的名称 (S, T) → J
T → J,(S, J) → T,(S, T) → J
- 候选码:(S, J)和(S, T)
- S T J都是主属性
- 不存在非主属性对码的部分函数依赖和传递函数依赖
- STJ ∈ 3NF
虽然STJ(S, T, J)∈3NF,单它扔存在增删改等异常,还不是一个理想的关系模式
(1)插入异常
如果某个教师开设了某门课程,但尚未有学生选修,则有关信息也无法存入数据库中。
(2)删除异常
如果选修某门课程的学生全部毕业了,在删除这些学生元组时,相应教师开设该门课程的新消息也同时丢掉了。
(3)数据冗余度大
虽然一个教师只教一门课,但每个选修该教师该门课程的学生元组都记录这一信息。
(4)修改复杂
某个教师开设的某门课程改名后,所有选修了该教师该门课程的学生元组都要进行相应的修改
♥ 原因:
主属性J部分函数依赖于码(S, T)。因为T → J
♥ 解决方法:
采用投影分解法,将STJ分解为两个关系模式:SJ(S,J);TJ(T,J)
♥ SJ的码为(S,J),TJ的码为T
在分解后的关系模式中没有任何属性对码的部分函数依赖和传递函数依赖
他解决了上述四个问题:
(1)TJ关系中可以存储所开课程尚未有学生选修的教师信息
(2)选修过某门课程的学生全部毕业了,只是删除SJ关系的相应元组,不会影响TJ关系中想用教师开设该门课程的信息
(3)关于每个教师开设课程的信息只在TJ关系中存储一次
(4)某个教师开设的某门课程改名后,只需修改TJ关系中的一个相应元组即可
♥ BCNF(Boyce Codd Normal Form)是由Boyce和Codd提出的,比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩展的第三范式。
♥ BCNF的定义
定义6.8 设关系模式R<U, F>∈1NF,如果对于R的每个函数依赖X→Y,且⊉Y时,X必含有码,那么R∈BCNF。
即,在关系模式R<U, F>中,如果每一个决定因素都包含码,则R∈BCNF
例:STJ(S, T, J)∈ 3NF, T→J,(S,J)→T,(S,T)→J
SJ(S, J)∈ BCNF, SJ的码为(S, J),all-key
TJ(T, J)∈ BCNF, TJ的码为T,T→J
♥ BCNF的关系模式所具有的性质
- 所有非主属性对每一个码都是完全函数依赖
- 所有主属性对每一个不包含它的码也是完全函数依赖
- 没有任何属性完全函数依赖于非码的任何一组属性
♥ 如果关系模式R∈BCNF,必定有R∈3NF
♥ 如果关系模式R∈3NF,不一定有R∈BCNF(比如上面的STJ(S, T, J))
♥ 如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范围内,它已实现了模式的彻底的分解,达到了最高的规格化程度,消除了操作异常的诸多问题。
♥ 一个关系模式只要其分量都是不可分的数据项,他就是规范化的关系模式,但这只是最基本的规范化
♥ 规范化程度过低的关系模式不一定能够很好地描述现实世界,可能会存在插入异常、删除异常、修改复杂、数据冗余等问题,解决方法就是对其进行规范化,转换成高级范式
♥ 一个低一级的范式的关系模式,通过通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化
♥ 关系数据库的规范化理论是数据库逻辑设计的工具
♥ 关系模式规范化的基本步骤:
♥ 规范化的基本思想:
◾ 逐步消除数据依赖中不合适的部分,使模式中的各关系模式打掉某种程度的“分离”
◾ 采用“一事一地”的模式设计原则
● 让一个关系描述一个概念、一个实体或者实体间的一种联系
● 若多于一个概念就把它“分离出去”
◾ 规范化实质上就是概念的单一化