《DBA 修炼之道》总结二之范式

来源:互联网 发布:ubuntu下的下载工具 编辑:程序博客网 时间:2024/05/18 20:46

范式

范式,其实就是一种数据的设计方式,通过规范化来达到优化数据结构的目的。目前范式有常见的三大范式,以及一些额外的范式,如BC范式、第四第五范式。

范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。


三大范式

第一范式(1NF)

第一范式的目标是去除实体中重发分组和非原子数据。换句话说,当数据符合第一范式时,实体的每个属性都是离散的。

但且仅当数据表的所有列只包含原子值时,即满足第一范式。

要想使数据模型满足第一范式,需要将重复分组分裂成单个实体以消除分组。如下表,表中的studentName字段违反了1NF,学生的姓名可分解为名+姓。

studentID studentName 2564 Smith,Jacob 1286 Neeld,Norris 3651 Smith,Norris

第二范式(2NF)

第二范式确保每个实体的所有属性都依赖主码。简单来说,实体实例不应依赖除实体主码外的任何东西。

当且仅当满足第一范式,并且每一个非主属性都完全依赖主码时,即满足第二范式。

要想使其满足第二范式,应该把不依赖主码的属性,将它删除,并且把它连带它所依赖的码一起放到一个新的实体中。如下表,courseName字段就违反了2NF,courseName字段不仅依赖studentID+courseNum字段,还依赖于courseNum字段。这时,需要把courseName字段从原来的表中删除,再加上courseNum字段重新生成一个新的实体。

studentID courseNum courseName 2564 A1 A 2564 C1 C 1286 B1 B 3651 A1 A

第三范式(3NF)

第三范式确保实体实体的属性间不存在关联,该实体的每一个属性只依赖主码。简单来说,就是不存在传递依赖,如A->B,B->C。

当且进当满足第二范式且每一个非主属性既不依赖码也不传递依赖码时,即满足第三范式。

这时,需要把存在不直接依赖主码的字段删除,加上其依赖的字段新建一个实体。如下表,MajorName字段存在依赖MajorID字段,故应把MajorName字段从原表删除,加上MajorID新建一个实体。

studentID MajorID MajorName 2564 MAT 数学 1286 PHI 哲学 3651 MAT 数学

其他范式

一般来说,只会用到上面的三大范式。

BC范式(BCNF)

BC范式是修正的3NF。

当且仅当满足3NF且每一个决定元素都是候选码,即满足BC范式。

额,换个说法,就是说任何非主码不能决定主码的子集,即不存在部分主键依赖非主码。

第四范式(4NF)

第四范式指出如果“一对多”的属性彼此独立,就没有任何实体可以有超过一个“一对多”的关联。

当且仅当满足3NF且没有多个多值依赖时,即满足4NF。

也就是说,在一个关系(A、B、C)中,对于每一个A,有一组独立的(B、C),且B、C独立。

第五范式(5NF)

第五范式指出实体的每一个连接依赖必须是其候选码的结果。


总的来说,第一范式是消除字段的冗余,第二范式是消除非主属性对主属性的部分依赖,第三范式是消除属性的传递依赖,BC范式是消除部分主属性对非主属性的依赖,4NF是消除多值依赖。

原创粉丝点击