注意:后面的范式一定要满足前面
第一范式:(1NF)
是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域(列不能在分)。
错误一:(
关系型数据库(列固定 行多个)MySQL oracle sqlserver
非关系型数据库NoSQL 是关系型数据库的补充(基于内存)缓存服务 redis
)
id name age sex tel tel1 tel2 tel3 tel4 tel5
错误二:
id name age sex tel
1 张三 18 男
2 李四 18 男 110
3 王五 18 男 120,130,140
正确
User telephone
id name age sex id uid tel
1 张三 18 男 1 2 120
2 李四 19 男 2 3 130
3 王五 19 男 3 3 140
第二范式:(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。
选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。例如:学生表中唯一的标示是学生的编号或ID。
第三范式(3NF)(在实际开发中,适当的冗余能提高开发效率)
第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。
例如:
student学生表:
id name age gname 班主任
1 张三 18 QY97 罗
2 李四 18 QY97 罗
3 王五 18 QY98 罗
4 赵六 18 QY98 萝
将学生的班级设计为一个班级表,关联查询即可
id name age gid id gname
1 张三 18 1 1 QY97
2 李四 18 1 2 QY98
3 王五 18 2
4 赵六 18 2
附:
主表:在数据库中建立的表格即Table,其中存在主键(primary key)用于与其它表相关联,并且作为在主表中的唯一性标识。
从表:以主表的主键(primary key)值为外键 (Foreign Key)的表,可以通过外键与主表进行关联查询。从表与主表通过外键进行关联查询。
也就是说,在设计表的时候存在一对多的关系,例如: 一个班级 有 多个学生,那么班级中的主键就作为学生中的外键使用,也就是班级表为主表,学生表为从表。
原文:https://www.cnblogs.com/yanpingping/p/10781011.html