第23章:范式

一、范式

1.什么是范式

关于数据表设计的基本原则,规则就是范式NF。

2.范式都包括哪些?

第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF - Boyce Codd Normal Form)、第四范式(4NF)和第五范式(5NF,又称完美范式)

3.键和相关属性的概念

球员表(player) :球员编号 | 姓名 | 身份证号 | 年龄 | 球队编号

球队表(team) :球队编号 | 主教练 | 球队所在地

①候选键:可以作为主键的所有字段。比如球员表的(球员编号),(身份证号)

②主键:非空且唯一的,从候选键选择一个。比如球员表的(球员编号)或(身份证号)

③超键:主键+其他字段的组合。(球员编号+姓名),(身份证号+年龄)

④外键:父表的主键,球队表(team) 的球队编号

⑤主属性:只包括主键的字段。比如球员表的(球员编号),(身份证号)。反之其他字段就是非主属性

第一范式1st NF

1.什么是第一范式

数据表的每一列都是不可分割的基本数据项,同一个列不能有多个属性,是不可再次拆分的最小单元。

2.举例

user 表的设计不符合第一范式

 user_info可以进一步拆分最小的单元

第二范式2st NF

1.什么是第二范式

在第一范式的基础上,数据表里的每一条数据记录都是唯一的。所有的非主键字段都完全依赖主键字段,不能部分依赖主键的某个部分。一张表只表达一个意思

举例1

成绩表 (学号,课程号,成绩)关系中,(学号,课程号)可以决定成绩,但是学号不能决定成绩,课程号也不能决定成绩,所以“(学号,课程号)→成绩”就是 完全依赖关系 。

举例2

比赛表 player_game ,里面包含球员编号、姓名、年龄、比赛编号、比赛时间和比赛场地等属性,这里候选键和主键都为(球员编号,比赛编号),我们可以通过候选键(或主键)来决定如下的关系:

(球员编号, 比赛编号) → (姓名, 年龄, 比赛时间, 比赛场地,得分)

符合第二范式的分析:

(球员编号) → (姓名,年龄)

(比赛编号) → (比赛时间, 比赛场地)

(球员编号, 比赛编号) → (得分)

第三范式3st NF

1.什么是第三范式

满足第二范式,非主键直接和主键关联。数据表中的非主键之间没有任何关联。

举例1

部门信息表 :每个部门有部门编号(dept_id)、部门名称、部门简介等信息。

员工信息表 :每个员工有员工编号、姓名、部门编号。列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。

举例2:

商品类别名称依赖于商品类别编号,不符合第三范式。

修改:

表1:商品类别表

 表2:商品表

小结

1.数据表的设计遵循的三个范式:

①第一范式(1NF),确保每列保持原子性

数据库的每一列都是不可分割的原子数据项,不可再分的最小数据单元,而不能是集合、数组、记录等非原子数据项。

②第二范式(2NF),确保每列都和主键完全依赖

尤其在复合主键的情况下,非主键部分不应该依赖于部分主键。

③第三范式(3NF)确保每列都和主键列 直接相关,而不是间接相关

2.范式的优缺点

范式的优点:数据的标准化有助于消除数据库中的数据冗余,第三范式(3NF) 通常被认为在性能、扩展性和数据完整性方面达到了最好的平衡。

范式的缺点:范式的使用,可能降低查询的效率。因为范式等级越高,设计出来的数据表就越多、越精细,数据的几余度就越低,进行数据查询的时候就可能需要 关联多张表 ,这不但代价昂贵,也可能使一些 索引策略无效。

猜你喜欢

转载自blog.csdn.net/jbkjhji/article/details/131633514