首页 > 数据库 > Oracle > 1.2.4 数据库规范化
数据库范式是建立数据库关系表的规范,遵守范式的级别越高,能够让数据冗余越少,下一级别的范式包含上一级别的所有范式;但是对于特定的的冗余数据(数据属性的对应关系不变)能够提高查询速度(无需连表查询)。
第一范式 ( 1NF 1 Normal Form ) :确保每列原子 性
确保每个字段不可再分,下表area可再分
第二范式 ( 2NF 2 Normal Form ) :非键字段必须依赖于键字段
一个表只能描述一件事,下表描述了两件事情,所以需要拆分
第三范式 ( 3NF 3 Normal Form ) :消除传递依赖
在所有的非键字段中,不能有传递依赖,
下表cityid和cityname是一种数据,由cityid可以查到cityname
下表 因为语文和数学确定了,总分就确定了。所以 设计不满足第三范式
总结:表字段{A,B,C,D}
关联关系:{A->BC,B->C,A->B,AB->C}
可拆分关系: A->B, A->C, B->C, A->B, AB->C
因为 A->C,所以 AB->C可以不要, A->B重复,A可以关联到B和C
可以得到最简表: {A,D}
反三范式
当性能和规范化冲突的时候, 性能更重要 。比如统计大量学生各科分数及总分的时候,就是如下设计
BC范式(BCNF Boycee Codd Normal Form):任何函数依赖(X->Y),X必须是候选键。意思是:任何属性(包括非主属性和主属性)都不能被非主属性所决定;BC范式要求主属性不能依赖于非主属性,这个也是第三范式和BC范式的主要区别,先拆分成3NF,再进行拆分
第四范式 ( 4NF ) : 消除多值依赖; 如果属性A依赖于B,属性C也依赖于B,且属性A和属性C没有依赖关系,但是造成了数据冗余,可以把表ABC分为BA,BC两个表来消除冗余数据
第五范式 ( 5NF ) : 拆分表为更小的表,每个小表不可再分,且每个小表都能够通过候选键推导出来
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70017124/viewspace-2888680/ ,如需转载,请注明出处,否则将追究法律责任。