网站开发公司一站式服务,抚州市企业网站建设,wordpress美化下载页面,服务器出租网站欢迎大家到我的博客浏览。MySQL三范式 | YinKais Blog
简介
三大范式是 MySQL 数据库设计表结构所遵循的规范和指导方法#xff0c;目的是为了减少冗余#xff0c;建立结构合理的数据库#xff0c;从而提高数据存储和使用的性能。
三大范式之间是有依赖关系的#xff0c…欢迎大家到我的博客浏览。MySQL三范式 | YinKais Blog
简介
三大范式是 MySQL 数据库设计表结构所遵循的规范和指导方法目的是为了减少冗余建立结构合理的数据库从而提高数据存储和使用的性能。
三大范式之间是有依赖关系的比如第二范式是在第一范式的基础上建设的第三范式是在第二范式的基础上建设的。
简单来说就是原子性、唯一性、无传递性。
第一范式 - 1NF
遵循原子性。即表中字段的数据不可再分。例如下述表结构
员工编号姓名年龄001运营部小明19002技术部小美28003销售部小张20
上述表结构中姓名字段是可以进行再拆分的因此它不符合第一范式。符合第一范式的表结构如下
员工编号部门姓名年龄001运营部小明19002技术部小美28003销售部小张20
但也并不是所有情况都需要符合第一范式例如
员工编码姓名省市区001小张江西省南昌市东湖区002小黄广东省佛山市禅城区003小高湖北省武汉市新洲区
所以范式只是一个参考更多的是需要根据实际情况设计表结构。
第二范式 - 2NF
在满足第一范式的情况下遵循唯一性消除部分依赖。即 表中任意一个主键或任意一组联合主键可以确定除该主键外的所有的非主键值。
通俗一点讲就是一个表只能描述一件事情且由该表的主键确定。
例如主键为学号则可以确定姓名、年龄等学生信息。
学号姓名年龄001小美18002小张19003小明20
主键为课程名称就可以确定该课程学分、成绩等信息。
课程名称成绩学分语文903数学902英语903
不遵循第二范式可能会造成下述后果 数据冗余将不同类型的信息存储在同一张表中可能导致数据冗余。例如在学生表中如果每个学生都有多个课程将学生和课程信息合并存储可能导致数据复制。如果有两名学生每人选修三门课程表中会包含6条记录其中的学生信息将重复。 更新数据不方便当需要更新特定信息时如果数据存储在同一张表中更新可能变得不太方便。举例来说如果需要更改某门课程的学分必须在整个表中搜索相关记录并更新这可能是一个繁琐的过程。但如果将数据拆分到不同的表中只需在包含相关信息的表中进行更新更加便捷。 插入数据不方便或可能导致异常情况在某些情况下插入数据可能变得复杂或引发异常。举例如下 假设主键是学号或课程名称当需要插入新的课程信息时必须精心规划哪些学生将选择该课程。这可能需要指定为哪些学生插入对应的课程信息。此外如果还没有相关成绩信息可能需要将成绩字段置为空以后再进行更新。 假设主键是学号和课程名称的联合主键插入课程信息时如果没有学生选择该课程可能会导致学号主键字段缺失从而无法插入相关信息。
第三范式 - 3NF
在满足第二范式的情况下 消除传递依赖。即在任一主键都可以确定所有非主键字段的情况下不能存在某非主键字段 A 可以获取 某非主键字段 B。
举个例子如下
学号姓名班级班主任001小美一年级3班陈老师
这个表中学号是主键它可以唯一确定姓名、班级、班主任符合第二范式但是在非主键字段中我们可以可以通过班级推导出该班级的班主任所以他不符合第三范式。
上述的表要满足第三范式可以像下面这样设计
1.学生表
学号姓名班级001小美一年级3班
2.班级表
班级班主任一年级3陈老师
通过把班主任和班级的映射关系做成另一张表就可以消除表中的传递依赖。
总结 第一范式1 NF字段不可再拆分 第二范式2 NF表中任意一个主键或者任意一组联合主键可以唯一确定除该主键外的所有非主键值。 第三范式3 NF在任一主键都可以确定所有非主键字段值的情况下不能存在某非主键字段 A 可以获取 某非主键字段 B。