关系数据库规范化理论是数据库逻辑设计的工具
一种关系,如果是分量不可分离的数据项,是规范化的关系,但这只是最基本的规范化
规范化程度有六个不同的层面,即六种范式
正规化程度过低的关系不一定能很好地表现现实世界,可能存在插入的差异
典型地,诸如异常删除、复杂修改、数据冗馀等的问题,解决方案是对其进行规范
转换为高级范式。
通过模式分解可以转换为几个高层范式的低层范式的关系模式
关系模型的集合。 这个过程称为关系模型的规范化。
1 .关系模型规范化的步骤
消除确定属性集非代码的非平凡函数依赖
1NF-消除部分非主属性对代码的函数依赖
2NF-消除非主属性对代码的传递函数依赖
3NF-消除主属性对代码部分和传递函数的依赖
BCNF-消除非平凡且非函数依赖的多值依赖
4NF-消除未包含在候选代码中的连接依赖
5NF
规范化的基本思想是,逐步消除数据依存中的不恰当部分,将模式中的各关系
模式达到一定程度的“分离”
也就是说,采用“一事一地”的模式设计原则,使一个关系描述一个概念、一个实体
或实体间的联系
如果有多个概念,则将其“分离”。 因此,规范实质上是概念的单一
化
不能说规范化程度越高的关系模式越好
在设计数据库模式结构时,必须适应现实世界的实际情况和用户APP的需要
进一步分析,确定能够反映现实世界的合适模型
上述归一化步骤可以通过任意一个步骤结束
关系模型的规范化过程是通过关系模型的分解来实现的
-将低级别关系模式分解为几个高级别关系模式的方法不是唯一的
-在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的人
法才有意义
将一个关系模型r(u,f )分解为多个关系模型R1(U1,F1 )、R2 (U2,F2 )、rn (un,Fn )
-其中U=U1U2. Un,并且不存在UiUj,其中Fi是f在Ui上的投影
意味着相应地把存储在一个二维表t中的数据分布在几个二维表t1、t2、tn中
-其中ti是t在属性集Ui上的投影
判断关系模型分解是否等效于原始关系模型的标准
1 .分解不破坏连通性
2分解保持函数依赖
不破坏连通性的模分解
假设关系模型r(u,f )被分解为几个关系模型r1(u1,F1 ),R2 ) u2,F2 ),rn ) UN,Fn ) )
-其中U=U1U2.Un,并且不存在UiUj,其中Fi是f在Ui上的投影
-R和R1,R2,Rn的自然连接结果相等时,关系模型r的这种分解具有无损连接性(Lossless join )
保证只有不破坏连接性的分解才不会丢失信息
不破坏连接性并不一定能解决插入异常、删除异常、修正复杂性、数据冗馀性等问题
保持函数依赖的模式分解
假设关系模型r(u,f )被分解为几个关系模型r1(u1,F1 ),R2 ) u2,F2 ),rn ) UN,Fn ) )
-其中U=U1U2.Un,并且不存在UiUj,Fi在逻辑上包含在向f的Ui的投影f中的函数依赖也一定可以通过分解得到
如果某个关系模型中的函数依存Fi在逻辑上被包含,则关系模型r的该分解被称为维持函数依存关系。
关系模型的分解
如果分解不破坏连接性,则可以避免信息丢失
如果分解保持函数依赖关系,则可以减少或解决各种异常
分解具有无损连接性和分解保持函数依赖性是相互独立的两个标准
-不破坏连接性的分解,不一定能维持函数依赖性
-同样,维持函数依赖的分解也不一定会破坏连接性
-如果要求分解不破坏连接性,模式分解必须达到4NF
-当需要依赖于分解保持函数时,模式分解一定达到3NF,但不一定达到BCNF
-在要求不损害结合性、维持函数依赖性的分解的情况下,图案分解一定会达到3NF,但不一定能达到BCNF
规范化理论为数据库的逻辑设计提供了理论指导和工具
只有指南和工具
归一化程度越高,图案并不是越好
应根据APP应用环境和现实世界的情况合理选择数据库模式
总结:
判断关系模型分解与原始关系模型等价性的标准:
不破坏连接性:自然连接后的数据与原始数据一致吗
保持数据相关性:自然连接后,是否失去了原始函数相关性