mysql三大范式

设计关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小,但相对的数据库性能会有所下降。

目前关系型数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般来说,数据库只需要满足第三范式就行了。

第一大范式(1NF)

保证每列的原子性。即每一个字段都不能再分割。
在这里插入图片描述
这里可以看到home列保存的应该是家庭信息,但是这个字段是可以分成家庭人口和家庭住址的,所以应该改成下面这样
在这里插入图片描述

第二大范式(2NF)

一张表只描述一件事情。必须满足第一大范式。

mysql三大范式_第1张图片
这么做的问题有:

  • 数据冗余:假如说一个学生选了多门课程,则学号和学生姓名将会重复
  • 更新异常:假如修改了某个课程的编号,则必须修改所有数据的"编号"值
  • 插入异常:假设要开一门新课程,暂时没有人选修,那么由于没有"学号"、"学生姓名"关键字,"课程"与"编号"也无法记录入数据库。
  • 删除异常:假设一批学生已经完成课程,这些记录就应该从数据库表中删除。但是,与此同时,"课程"和"学分"也被删除了,显然,这最终可能会导致插入异常。

所以必须将一张表拆分成两张表
mysql三大范式_第2张图片
mysql三大范式_第3张图片

第三范式(3NF)

表中的字段和主键直接对应不依靠其他中间字段,说白了就是,决定某字段值的必须是主键。
mysql三大范式_第4张图片

“班级名称”、“班级信息"等字段不能直接和“学号”字段对应,必须通过"班级编号”,才可以对应到"学号"。同样会造成和第二范式一样的问题。修改之后如下:
mysql三大范式_第5张图片

范式和性能的问题

  • 实际开发考虑商业化的需求和目标(成本、用户体验),性能比规范性更加重要
  • 在考虑性能的同时,需要适当的考虑一下规范性
  • 故意增加一些冗余字段(为了多表查询变成单表查询)
  • 关联查询的表不得超过三张
  • 增加计算列:计算列是由表中的其它多个列计算所得 增加派生列可以减少统计运算 在数据汇总时可以大大缩短运算时间

你可能感兴趣的:(mysql,数据库,database)