作者:whisper
链接:http://proprogrammar.com:443/article/579
声明:请尊重原作者的劳动,如需转载请注明出处
例: 关系模式STJ(S, T, J)中, S表示学生, T表示教师, J表示课程
语义:
假设每一教师只教一门课 T→J
每门课由若干教师教,但某一学生选定某门课,就确定了一个固定的
教师 (S, J) →T
某个学生选修某个教师的课就确定了所选课的名称 (S, T)→J
T→J ,(S, J) →T, (S, T)→J
1 候选码: (S, J)和(S, T)
2 S T J 都是主属性
3 不存在非主属性对码的部分函数依赖
和传递依赖
3 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的定义
即,在关系模式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的关系模式所具有的性质
⒈所有非主属性对每一个码都是完全函数依赖。
⒉所有主属性对每一个不包含它的码也是完全函数依赖。
3.没有任何属性完全函数依赖于非码的任何一组属性。
关系模式规范化的基本步骤
规范化的基本思想:
• 让一个关系描述一个概念、一个实体或者实体间的一种联系。
• 若多于一个概念就把它“分离”出去。
1. 举例子说明属于3NF的关系模式有的属于BCNF,但有的不属于BCNF。
2. 在关系数据库中,任意一个二元关系模式R至少可以达到第几范式?(指在函数依赖的范畴内,可达到的最高范式)
3. 如果一个关系模式R的主码是全码,则R至少可以达到第几范式?
亲爱的读者:有时间可以点赞评论一下
全部评论