认识范式
范式是数据库的理论基础,也是设计数据库结构过程中要遵循的规则和指导方法,基本范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(3.5范式或BCNF)、第四范式(4NF)
第一范式(1NF)
第一范式的数据表必须是二维数据表,每一列都是不可再分割的基础数据,强调列的原子性,某一属性不能拥有几个值;同一列的类型相同,行的上下关系互不影响。
举🌰:
姓名 | ID | 生日 | 职业 |
---|---|---|---|
张三 | 001 | 1996/2/14 | 职业规划师 |
李四 | 002 | 1997/2/16 | 自由职业者、画家 |
王五 | 003 | 1996/3/15 | 数据分析师 |
*李四职业同时有两个不符合第一范式
第二范式(2NF)
第二范式建立在第一范式的基础上,要求数据表每一个实例或者行必须被唯一标识。除满足第一范式外还有两个条件:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
非主属性与主属性:在关系中,由一组属性决定另一组属性,即为超键。候选健集合中的属性为主属性,非候选键集合中的属性为非主属性。
比如,身份证号和姓名可以决定性别,(姓名,身份证号}为超键;其中身份证号这一单一属性即可决定性别,则姓名为多余属性,{身份证号}为候选键,主属性。
完全依赖与部分依赖:完全依赖是指不能存在仅依赖于主关键字一部分的属性,如果存在,则该属性与主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
简单来说,就是要消除非主属性对主属性的部分依赖
举🌰:
姓名 | 性别 | 生日 | 职业 | 城市id | 城市 | 城市人数 |
---|---|---|---|---|---|---|
张三 | 男 | 1996/2/14 | 职业规划师 | 001 | 北京 | 2600 |
李四 | 男 | 1997/2/16 | 画家 | 002 | 上海 | 2500 |
王五 | 男 | 1996/3/15 | 数据分析师 | 002 | 上海 | 2500 |
城市人数(非主属性)部分依赖于姓名(主属性)
城市id和城市都可以决定城市人数
*拆分为以下即可
姓名 | 性别 | 生日 | 职业 |
---|---|---|---|
张三 | 男 | 1996/2/14 | 职业规划师 |
李四 | 男 | 1997/2/16 | 画家 |
王五 | 男 | 1996/3/15 | 数据分析师 |
和
城市id | 城市 | 城市人数 |
---|---|---|
001 | 北京 | 2600 |
002 | 上海 | 2500 |
第三范式(3NF)
第三范式在第二范式的基础上,要求消除非主属性对候选键的传递依赖
举🌰:
学号 | 姓名 | 所在系 | 系地址 |
---|---|---|---|
001 | 张三 | 计算机 | 地址1 |
002 | 李四 | 自动化 | 地址2 |
003 | 王五 | 自动化 | 地址2 |
主属性
学号
非主属性
姓名、所在系、系地址
*通过学号可以得出系地址;
因学号得出所在系,所在系得出系地址
拆分为以下即可:
学号 | 姓名 | 所在系 |
---|---|---|
001 | 张三 | 计算机 |
002 | 李四 | 自动化 |
003 | 王五 | 自动化 |
所在系 | 系地址 |
---|---|
计算机 | 地址1 |
自动化 | 地址2 |
总结
1NF:列的原子性,保证表的每一列都不可再分割
2NF:在1NF的基础上,非关键字段必须依赖唯一的主键
3NF:在2NF的基础上,表中的每一列键都和主键直接相关,不能存在传递依赖