范式

关系数据库中的关系是满足一定要求的,满足不同程度要求的为不同范式。满足最低要求的为第一范式,简称1NF;在第一范式基础上满足进一步要求的为第二范式,依此类推。

对于各种范式之间的关系如下图所示:

image

1. 第一范式

数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。如果实体中的某个属性有多个值时,必须拆分为不同的属性。

列的原子性,列不能再分割为其他列。

2. 第二范式

若R ∈ 1NF,则每一个非主属性完全函数依赖于任何一个候选码,则R ∈ 2NF。

第二范式主要任务是消除部分函数依赖,即在一个表中,不是主键的列必须要完全依赖主键,而不是依赖主键的一部分(主键可以是好几个列)

例如 一个表中有如下字段:

student_no,
student_name,
student_age,
class_no,
class_name

其中student_no和class_no是主键,而class_name 依赖于class_no,这就违反了第二范式,需要拆分为两个表,如下:

表一

student_no,
student_name,
student_age

表二

class_no,
class_name

3. 第三范式

关系模式R 中若不存在这样的码X、属性组Y及非主属性Z(Z  Y), 使得X→Y,Y→Z,成立,则称R ∈ 3NF

满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。

第三范式主要解决非主属性的传递依赖问题。即非主属性既不传递依赖于主键,也不部分依赖于主键。

4. BCNF

设关系模式R∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。

任何属性都不能传递依赖任一候选关键字。

5. 第四范式

关系模式R∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y  X),X都含有候选码,则R∈4NF。

第四范式是消除表中的多值依赖,也就是说可以减少维护数据一致性的工作。

参考:

results matching ""

    No results matching ""