一、范式
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) 通常被认为在性能、扩展性和数据完整性方面达到了最好的平衡。
范式的缺点:范式的使用,可能降低查询的效率。因为范式等级越高,设计出来的数据表就越多、越精细,数据的几余度就越低,进行数据查询的时候就可能需要 关联多张表 ,这不但代价昂贵,也可能使一些 索引策略无效。