数据库范式

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

NF = Normal Form

第一范式(1NF)

在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域
在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。
(列不重复)

第二范式(2NF)

要求数据库表中的每个实例或记录必须可以被唯一地区分。要求实体的属性完全依赖于主关键字,不能存在仅依赖主关键字一部分的属性。如果存在仅依赖主关键字一部分的属性,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键
(行不重复)

第三范式(3NF)

A relation schema R is in third normal form with respect to a set $F$ of functional dependencies if, for all dependencies in $F^+$ of form $\alpha \to \beta$, where $\alpha \subseteq R$ and $\beta \subseteq R$, at least one of the following holds:

  • $\alpha \to \beta$ is a trivial functional dependency(that is, $\beta \subseteq \alpha$).
  • $\alpha$ is a superkey for schema R.
  • Each attribute A in $\beta - \alpha$ is contained in a candidate key for R.

A may be contained in different candidate key.

所有数据元素不但要能惟一地被主关键字所标识,而且它们之间还必须相互独立,不存在其他的函数关系。也就是说,对于一个满足2NF的数据结构来说,表中有可能存在某些数据元素依赖于其他非关键字数据元素的现象,必须消除。
要求一个关系中不包含已在其它关系已包含的非主关键字信息。在2NF基础上消除传递依赖。

巴斯-科德范式(BCNF)(Boyce-Codd Normal Form)

A relation schema R is in BCNF with respect to a set $F$ of functional dependencies if, for all dependencies in $F^+$ of form $\alpha \to \beta$, where $\alpha \subseteq R$ and $\beta \subseteq R$, at least one of the following holds:

  • $\alpha \to \beta$ is a trivial functional dependency(that is, $\beta \subseteq \alpha$).
  • $\alpha$ is a superkey for schema R.

($F^+$是$F$的闭包,也是超集)
在3NF基础上消除对主码子集的依赖。它事实上是对第三范式的修正,使数据库冗余度更小。

  1. 所有非主属性对每一个候选键都是完全函数依赖;
  2. 所有的主属性对每一个不包含它的候选键,也是完全函数依赖;
  3. 没有任何属性完全函数依赖于非候选键的任何一组属性。

完全函数依赖(Full functional dependency):在一个关系中,若某个非主属性数据项依赖于全部关键字称之为完全函数依赖。
如果非主属性B函数依赖于构成某个候选关键字的一组主属性A,而且A的任何一个真子集不能被B函数依赖,则称B完全函数依赖于A( $ A ^\underrightarrow{f} B $ );反之,若B函数能依赖于A的真子集,则称B部分函数依赖于A( $ A ^\underrightarrow{p} B $ )。

例:成绩表(学号,课程号,成绩)关系中,完全函数依赖:$(学号,课程号)\rightarrow 成绩 $
$ 学号 \nrightarrow 成绩 $,$ 课程号 \nrightarrow 成绩 $,所以 $(学号,课程号)\rightarrow 成绩$ 是完全函数依赖

在一个关系中,如一个属性是构成某一个候选关键字的属性集中的一个属性,则称它为主属性。

第四范式(4NF)

定义:关系模式$ R<U,F> \in 1NF $,如果对于R的每个非平凡多值依赖$ X \twoheadrightarrow Y $,X都含有候选码,则$ R\in 4NF $。
如果 $ R \in 4NF $,则 $ R \in BCNF $。
属性之间不允许有非平凡且非函数依赖的多值依赖。因为根据定义,对于每一个非平凡的多值依赖$ X \twoheadrightarrow Y $,X都含有候选码,于是就有$ X \rightarrow Y $,所以4NF所允许的非平凡的多值依赖实际上是函数依赖

函数依赖:某个属性集决定另一个属性集时,称另一属性集依赖于该属性集。(两个实例化的属性集X,Y,如果属性集X中的两个元组取值相同,必有对应的另外一个属性集Y中元组取值相同,则称Y函数依赖于X函数。)

A B C D
a1 b1 c1 d1
a1 b2 c1 d2
a2 b2 c2 d2
a2 b3 c2 d3
a3 b3 c2 d4

这个关系表中:$ A \to C $,但是 $ C \nrightarrow A $ (即C依赖于A,而A不依赖与C)。

多值依赖(multivalued dependencies):在关系模式中,函数依赖不能表示属性值之间的一对多联系,这些属性之间有些虽然没有直接关系,但存在间接的关系,把没有直接联系、但有间接的联系称为多值依赖的数据依赖。

平凡依赖:

In general, a functional dependency of form $\alpha \to \beta$ is trivial if $\beta \subseteq \alpha$.

第五范式(5NF,又称完美范式)

定义:如果关系模式R中的每一个连接依赖均由R的候选码所隐含,则称此关系模式符合第五范式。

键(Key)

超键(super key):在关系中能惟一标识元素属性的集称为关系模式的超键。

Let R be a relation schema. A subset K of R is a superkey if, in any legal relation r(R), for all pairs $t_1$ and $t_2$ of tuples in r such that $t_1 \neq t_2$, then $t_1[K] \neq t_2[K]$.
That is no two tuples in any legal relation r(R) have the same value on attribute set K.

候选键:(Candidate Key):不含有多余属性的超键称为候选键。其真子集不再是超键。

主键(Primary Key):用户选作元组标识的候选键为主键。主关键字是可选的,是从候选关键字挑选出来作表的行的唯一标识。

外键(Froeign Key):如果模式R中的属性k是其他模式的主键,那么k在模式R中称为外键。

候选键

在关系模型中,候选键又称候选码(candidate key),是某个关系变量的一组属性所组成的集合,它需要同时满足下列两个条件:

  1. 这个属性集合始终能够确保在关系中能唯一标识元组。
  2. 在这个属性集合中找不出合适的真子集能够满足条件。

满足第一个条件的属性集合称为超键,因此我们也可以把候选键定义为”最小超键”,即不含有多余属性的超键。

范式分解

关系模式的分解与范式

现有的模式可能会存在一些数据增删改的弊端,比如说:数据冗余太大,更新异常,插入异常,删除异常。因此为了完善数据库的增删改查的功能,需要寻找一种等价的关系模式,使得以上弊端得以解决。
这种等价关系需要满足两个条件:1》保持无损连接性。解释:在分解之后,n个分解关系通过自然连接(自然连接是在等值连接的基础上去掉相同的列,如果自然连接中找不到等值信息那么自然连接就等价于笛卡尔积)形成的二维表和没分解之前关系的二维表是等价的(元组没有增加也没有减少),则称这种分解形成的关系模式保持无损连接性;
2》保持函数依赖性。解释:若分解之后的关系模式中仍然存在和没分解之前属性的函数依赖关系则称保持分解的函数依赖性。

无损判断:

if $R_1 \cap R_2$ forms a superkey of either $R_1$ or $R_2$.

也即:

at least one of the following functional dependencies is in $F^+$:

  • $R_1 \cap R_2 \to R_1$
  • $R_1 \cap R_2 \to R_2$