数据库设计要使用户删除,更新,插入比较方便,避免产生数据冗余,异常等现象;一般要遵循三大范式,简而言之就是,
1NF:属性不可再分,即不能表中套表
2NF:不存在非主属性对码的部分函数依赖
3NF:不存在非主属性对码的传递函数依赖
BCNF:不存在主属性对码的部分依赖和传递
即使BCNF仍然存在不足,比如下表
科目 老师 参考书
语文 张老师 一点通
语文 李老师 黄冈兵法
语文 王老师 巅峰阅读
数学 张老师 黄冈兵法
数学 王老师 一点通
数学 李老师 巅峰阅读
这个表的码是全码满足1,2,3,BC,范式,可以看出,这个表的数据冗余,这就是多值依赖,为了解决多值依赖的问题,我们引进的4NF即消除非平凡且非函数依赖的多值依赖
至于如何分解,则要利用数据依赖的公理系统,把低级的关系模式分解成若干个高一级的关系模式。当然分解不唯一。
eg:
R(U,F)
U(A,B,C,D,E,F)
F(A->B,AC->D,AC->E,E->F)
分解:码 AC
主属性 A,C
非主属性 B,D,E,F
R是1NF不是2NF
R->R1(A,B)为BCNF
R2(A,C,D,E,F)为2NF不是3NF
R2->R21(A,C,D,E)为BCNF
R22(E,F)为BCNF
故R分解成R1,R21,R22
一点小心得,共同进步
1NF:属性不可再分,即不能表中套表
2NF:不存在非主属性对码的部分函数依赖
3NF:不存在非主属性对码的传递函数依赖
BCNF:不存在主属性对码的部分依赖和传递
即使BCNF仍然存在不足,比如下表
科目 老师 参考书
语文 张老师 一点通
语文 李老师 黄冈兵法
语文 王老师 巅峰阅读
数学 张老师 黄冈兵法
数学 王老师 一点通
数学 李老师 巅峰阅读
这个表的码是全码满足1,2,3,BC,范式,可以看出,这个表的数据冗余,这就是多值依赖,为了解决多值依赖的问题,我们引进的4NF即消除非平凡且非函数依赖的多值依赖
至于如何分解,则要利用数据依赖的公理系统,把低级的关系模式分解成若干个高一级的关系模式。当然分解不唯一。
eg:
R(U,F)
U(A,B,C,D,E,F)
F(A->B,AC->D,AC->E,E->F)
分解:码 AC
主属性 A,C
非主属性 B,D,E,F
R是1NF不是2NF
R->R1(A,B)为BCNF
R2(A,C,D,E,F)为2NF不是3NF
R2->R21(A,C,D,E)为BCNF
R22(E,F)为BCNF
故R分解成R1,R21,R22
一点小心得,共同进步