数据库范式(数据库设计的范式)

注意:后面的范式一定要满足前面

第一范式:(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)的表,可以通过外键与主表进行关联查询。从表与主表通过外键进行关联查询。

也就是说,在设计表的时候存在一对多的关系,例如: 一个班级 有 多个学生,那么班级中的主键就作为学生中的外键使用,也就是班级表为主表,学生表为从表。

猜你喜欢

转载自www.cnblogs.com/yanpingping/p/10781011.html