数据库设计范式

数据库设计范式是合理设计数据库所需要满足的相关规范。而合理的数据库设计有利用数据库的维护。按照规范设计的数据库时简介、结构清晰的,数据可以方便的增删改,同时可以减少不需要的冗余数据。
数据库设计范式共有6种:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)、第六范式(6NF)
1NF:First Normal Form
一般来讲,数据库只需满足第三范式即可。

注意:数据库设计范式只是一种理论的先期参考,即在数据库设计时会首先使用标准范式进行设计,但是为了避免项目的某些需求中需要的复杂查询,往往还会采用冗余字段的方式进行设计。

==============================================================================
第一范式主要针对单表关系
定义:数据表中的内阁字段都是不可再分原子数据项,不能是数组、集合等复合属性,只能是数字、字符串、日期时间、LOB等基本数据类型。

eg:
用户:id、密码、联系方式(包括地址、手机、邮箱)
练习方式包括很多子项,不符合
用户:id、密码、地址、手机、邮箱 符合


==============================================================================
第二范式主要针对多对多关系,在第一范式基础上
是取消依赖于部分主键的非主属性
定义:数据库表中不存在非关键字段对任意一候选关键字的部分函数依赖(部分函数依赖是指存在组合关键字中的某些字段决定非关键字段的情况),即所有非关键字段都完全依赖于任意一组候选关键字。

eg:班级号、班级名称、学科名、老师工号、老师姓名
这个表的主键是(班级号、学科名),(班级号、学科名)决定了(班级名称、老师工号、老师姓名)
但是因为班级名称只依赖于部分的主键(班级号)
所以不符合第二范式2NF

修改之后为:
1)班级号、班级名
2)班级号、学科名、老师工号、老师姓名


==============================================================================
第三范式主要针对一对多关系,在第二范式基础上
是取消依赖于非主键的非主属性
定义:数据表中如果不存在非关键字段对任意候选关键字段的传递函数依赖,则符合第三范式。

eg:
在上面的例子基础上,
班级号、学科号、老师工号、老师姓名
这个表的主键是:班级号、学科号, 班级号、学科号决定了老师工号,老师姓名
但是老师姓名只依赖于老师工号。所以这个例子满足了2NF,但是不满足3NF。

修改之后为:
1)班级号、班级名
2)老师工号、老师姓名
3)班级号、学科名、老师工号

原文地址:https://www.cnblogs.com/pro-simian/p/7207417.html