关系模式设计问题:
![](http://hi.csdn.net/attachment/201107/28/0_1311824154VK14.gif)
![](http://hi.csdn.net/attachment/201107/28/0_1311824182AUlT.gif)
- 插入异常:如果没有职工具有8级工资,则8级工资的工资数额就难以插入
- 删除异常:如果仅有职工赵明具有4级工资,如果将赵明删除,则有关4级工资的工资数额信息也随之删除了
- 数据冗余:职工很多,工资级别有限,每一级别的工资数额反复存储多次
- 更新异常:如果将5级工资的工资数额调为620,则需要找到每个具有5级工资的职工,逐一修改
函数依赖
X函数决定Y”,或“Y函数依赖于X”,记作X->Y,称X为决定因素
如S# -> SN, (S#,C#)-> G
如果X -> Y,但Y 不包含于 X,则称其为非平凡的函数依赖,否则称为平凡的函数依赖
如(S#,SN)-> SN是平凡的函数依赖
在R(U)中,如果X->Y,且对于任意X的真子集X′,都有X′->Y,则称Y对X完全函数依赖,否则为部分函数依赖
传递函数依赖 S# ->SD,SD -> DEAN
范式
- 范式是对关系的不同数据依赖程度的要求
- 通过模式分解将一个低级范式转换为若干个高级范式的过程称作规范化(概念的纯粹化)
2NF:若R属于1NF,且每个非主属性完全依赖于码,则称R属于2NF;消除非主属性对码的部分依赖
分解为
3NF: 消除非主属性对码的传递依赖
S_SD 不属于3NF,因为有S#->SD,SD->DEAN
BCNF:
(S# , C# , ORDER),表示学生选修课程的名次
Armstrong公理
X,Y,Z是属性集,
自反律(reflexivity):若Y 包含于 X, 则X -> Y
【例】 属性集U={A,B,C}, 函数依赖集F={A ® B,B ® C}
则
A+ = ABC
B+ = BC
C+ = C
【例】 R<U, F >, U = (A, B, C, G, H, I), F = {A->B, A->C, CG->H, CG->I, B->H},计算 (AG) F +所用依赖
A->B AGB
A->C AGBC
CG->H AGBCH
CG->I AGBCHI
= AGBCH I
模式分解
- 投影
- 自然连接
- 无损连接分解
- 保持函数依赖
- 达到更高级范式
判断无损连接方法:
无损连接分解方法:
关系模式R(U)的分解r={R1,R2},则r是一个无损连接分解的充要条件是 R1∩R2->R1-R2(或R1∩R2->R2-R1)成立
![](http://hi.csdn.net/attachment/201107/28/0_1311831010evm1.gif)
判断是否保持函数依赖
数据库表的设计