[总结]关系型数据库规范化

1、关系模式定义

关系型数据的关系模式是一个五元组: 数据库

R(U,D,DOM,F) 
R —— 关系名; 
U —— 属性名的集合,即属性组; 
D —— U中属性所来自的域(相同类型的值的集合); 
DOM —— 属性(U)到域(D)的映射; 
F —— 属性组U上的一组数据依赖。 
因为D和DOM对模式设计关系不大,本文把关系模式化简成为一个三元组,即:R(U, F)。
函数

2、函数依赖相关定义

设R(U)是属性集U上的关系模式,X、Y是U的子集。 
1. 函数依赖: 
若对R(U)上的任意一个可能的关系r,r中不存在两个元组在X子集上的属性相等而Y子集上的属性不等,即Y函数依赖于X,记做X→Y。(人话就是:Y=f(X),f是一个单值函数)。 
2. 非平凡函数依赖: 
若是X→Y且Y⊈X,则称X→Y是非平凡函数依赖。 
平凡函数依赖 
若是X→Y且Y⊆X,则称X→Y是平凡函数依赖。 
3. 彻底函数依赖 
若是X→Y且对于X的任何一个真子集X’,都有X’不能决定Y,则称Y对X彻底依赖,记做X□(→┴f )Y。(例子:(X’, X’’) →Y,对于X’或者X’’都不能决定Y,即(X’, X’’)□(→┴f )Y) 
4. 部分依赖 
若是X→Y且Y对X不彻底依赖,记做X□(→┴p )Y。 
5. 传递依赖 
若是X→Y,Y⊈X且Y→Z,则Z对X传递依赖。设计

3、范式

(一)第一范式(1NF) 
若关系模式R中的每个份量是不可再分的数据项,则关系模式R属于第一范式。(理解:对属性的原子操做,要求属性具备原子性,不可再分解) 
对于一张二维表来讲,最起码的要求是知足1NF,即:每一个份量都是必须是一个不可分的数据项。这是最基本的范式,若只是知足1NF,则该关系模式可能存在下面的问题:教程

例1:记关系模式R(U, F),U={A, B, C, D, E};,F={A→C, C→D, (A, B) →E};it

  1. 数据冗余: 属性C, D, E等信息在表中可能会重复出现,浪费大量存储空间。(即函数依赖致使了大量的冗余)
  2. 更新异常: 因为属性C, D, E等信息在表中可能会重复出现,所以若是它们须要修改须要重复修改对应的每一项,不然可能致使数据不一致。(即数据冗余致使了更新异常)
  3. 插入异常: 若是属性A, B, E中有新添的元素暂时没有对应的C,D,那么就没法将这个新添元素插入该表。(即函数依赖致使了插入异常)
  4. 删除异常:若须要删除属性B,E的元素,则该元素对应的元组全部元素也将被删除。(即函数依赖致使了删除异常)

(二)第二范式(2NF) 
若关系模式R∈1NF,且每个非主属性彻底依赖于码(属性的组合,能惟一标识实体的属性),则关系模式R属于第二范式,即当1NF消除了非主属性对码的部分函数依赖,则称2NF。(理解:2NF是对记录的惟一性约束,要求记录具备惟一标识,即实体的惟一性)软件

由例1能够看出依赖每每致使了数据冗余、更新异常、插入异常、删除异常等问题,对属性间依赖状况进行规范能够必定程度上减小少这些问题。属性间的依赖程度就是区分不一样范式的依据。由例1能够看出:例1中的码是属性A,B,其中A→C,即属性C是对码的部分函数依赖,则2NF对例1的处理就是是消除非主属性对码的部分函数依赖。以下:im

例2:记关系模式R1(U, F),U={A, B, E};,F={ (A, B) →E};记关系模式R2(U, F),U={A, C,D,};,F={A→C, C→D };数据

例2中经过把例1的表分割成了两个表,下面仍是从上面的几方面分析:图表

  1. 数据冗余:属性C, D,等信息在表中依旧可能会重复出现,浪费大量存储空间,但对比例1的属性E,例2中的属性E则消除了冗余。
  2. 更新异常:除了属性E消除了更新异常其它的和例1中的分析同样。
  3. 插入异常:解决了例1中的问题,但也会存在其它问题,如属性C,D有了新添元素而没有对应的属性A。
  4. 删除异常:解决了例1中的问题,能保留对应属性A,C,D的元素,但也会存在其它问题,如须要删除属性A,C的一个元素,则对应的D属性的元素也要被删除。 
    例2中看来2NF对例1确实可以进行改进,但依然会有一些问题存在,这些问题主要是传递依赖形成的,例2中对例1最大的改进就是使得例2中每个表都的记录都有了惟一的标识。

(三)第三范式(3NF) 
若关系模式R(U, F)中不存在这样的码X,属性组Y及非主属性组Z(Z⊆Y)使得X→Y(Y↛X),Y→Z成立,则关系模式R属于第三范式。(理解:对字段的冗余性的约束(消除了非主属性对码的传递函数依赖),即任何字段不能由其它字段派生出来,它要求字段没有冗余)规范化

例3:记关系模式R1(U, F),U={A, B, E};,F={ (A, B)→E};记关系模式R2(U, F),U={A, C};,F={A→C };记关系模式R3(U, F),U={ A, D,};,F={ A→D};

例3中把例2的传递依赖部分又分红了两个表即R二、R3,如今再次简单检查一下发现上面的冗余和异常解决了(在我目前的水平看来应该解决了)。

(四)其它范式 
还存在其它的范式,如BCNF、4NF。其它的范式我还不是很清楚如何理解表达和应用,下面只是给出我查资料时看到的图表。之后的内容之后有时间再深刻研究和补充。 
数据库规范化

参考文献: 王珊,萨师煊,数据库系统概论[M],第4版,北京:高等教育出版社,2006,5. 胡圣明,软件设计师教程[M],第3版修订版,北京:清华大学出版社,2013,3.

相关文章
相关标签/搜索