数据库数据库入门

【数据库】数据库入门(八): 数据库规范化(Normalisat

2019-12-24  本文已影响0人  Ulrich蚊子

前言

数据库规范化的产生主要是由模式设计(Schema Design)而推动的。模式设计的目标是为特定的数据库应用程序选择最合适的模式。模式的选择由用户提供和依赖项捕获的应用程序数据的语义信息指导。
常见的方法是从一个普遍的关系开始,并应用分解来创建满足某些形式的新关系,使用范式进行规范化就是其中之一。

范式的种类(Normalisation Form)

根据约束强弱的差别,范式的种类从弱到强依次是:

(弱约束)1NF → 2NF → 3NF → BCNF → ... (强约束)

其中:

下面暂且详细介绍一下 BC 范式和第三范式。

BC范式 (BCNF)

定义

一个数据库 R 满足,对于任意一个非平凡的函数依赖 X → A,X 都是一个超键(superkey)。

根据定义可知,当一个数据模式是 BCNF 时,基于函数依赖的所有数据冗余都会被清除。但是使用 BCNF 设计的数据模式不一定是一个好的设计。该范式的核心在于,不重复在数据库中描述同样的事实(值、函数依赖等)。

BC范式分解算法

输入:关系模式 R',以及 R' 的所有函数依赖的集合 ∑。
输出:满足 BC 范式的所有关系模式的集合 S,且每个关系模式都包含一组函数依赖的集合。
步骤

当我们对关系模式进行分解时,需要考虑以下两个特点:

根据上面的算法,最后得到的 S 中的每一个关系模式 R,都存在对应的函数依赖,且都满足 BC 范式。但最开始 ∑ 中的函数依赖并不一定会完全保留下来,有部分的函数依赖可能在分解过程中丢失了,但是这些依赖可以通过内连接不同的关系模式得到恢复。因此,BCNF 可以生成一个无损耗的分解,但不一定能生成一个既无损耗又能保留依赖的分解。

第三范式(3NF)

第三范式是一种比 BC 范式宽松一点的约束范式。与 BC 范式相比,第三范式总是可以保证无损耗连接和依赖保留,也就是说,满足第三范式的分解结果不会丢失原来的所有函数依赖。

定义

一个数据库 R 满足,对于任意一个非平凡的函数依赖 X → A,X 都是一个超键(superkey)或者 A 是主要属性(prime attributes)。

由定义可知,满足第三范式的关系模式,可能会保留一些数据冗余,但排除了一些多余的函数依赖,比如:

例如,一个关系模式 R = { A,B,C,D},∑ = { A → B,B → C },其中它仅有一个键为 { A,D }。那么

第三范式分解算法

输入:关系模式 R,以及 R 的所有函数依赖的集合 ∑。
输出:满足 3NF 的所有关系模式的集合 S,且每个关系模式都包含一组函数依赖的集合。
步骤

第三范式分解仅仅可以减少数据冗余,但不能完全消除,还是会存在一部分的冗余,因此满足 3NF 的数据模式仍然有可能会出现数据更新异常的现象。要想避免更新异常的情况,就要使用 BC 范式或者约束更强的范式来消除所有的冗余。

上一篇 下一篇

猜你喜欢

热点阅读