Mysql设计范式和物理设计建议

发布于 2023-06-01  98 次阅读


目标:什么是设计范式,设计范式有那几种

设计范式

在关系数据库中,范式是用于规范化数据库设计的一组原则。它们旨在减少数据冗余、提高数据一致性和减少数据更新异常。MySQL数据库可以按照范式设计,常见的范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和BC范式(BCNF)。


第一范式(1NF)

确保每个表中的每一列都是原子的,不可再分的。表中的每个字段应该只包含单一的数据值,而不是重复的数据集合。


第二范式(2NF)

在满足1NF的基础上,确保表中的非主键字段完全依赖于整个主键,而不是部分依赖于主键。换句话说,每个非主键字段必须直接依赖于整个主键。


第三范式(3NF)

在满足2NF的基础上,确保表中的非主键字段不依赖于其他非主键字段。换句话说,表中的每个非主键字段只应该依赖于主键或其他唯一键。


BC范式(BCNF)

在满足3NF的基础上,进一步消除主键和非主键之间的依赖关系。表中的每个非主键字段都不应该依赖于其他非主键字段,而是完全依赖于主键。


范式化设计的优缺点

优点

  • 减少冗余
  • 减少数据的插入、更新、删除异常
  • 让数据的关系之间更清晰明了

缺点

  • 查询需要关联多个表
  • 对查询性能有一定影响

反范式化设计

反范式化(Denormalization)是在数据库设计中的一种技术,旨在提高查询性能和简化复杂查询操作。它违反了范式化的原则,通过增加冗余数据来优化读取操作的性能。在MySQL中,可以使用反范式化设计来满足特定的业务需求,尤其是对于大型数据集或复杂查询场景。

  • 冗余数据:通过将相关数据复制到其他表中,避免了频繁的表关联操作,从而提高查询性能。例如,将某个实体的属性冗余到其他表中,避免多表关联查询。
  • 聚合数据:将多个关联表的数据聚合到一个表中,以减少关联查询的复杂性。例如,将多个子表中的数据聚合到一个父表中,以简化复杂的查询操作。
  • 范式化设计和反范式化设计都需要把握一个度,在效率和少量数据冗余之间平衡选择

物理设计建议

库和表

  • 所有数据库对象名称必须使用小写字母可选用下划线分隔。
  • 所有数据库对象名称定义禁止使用MySQL保留关键字。
  • 数据库队形的命名要能做到见名识义,并且最好不超过32个字。
  • 临时表必须以tmp为前缀并以日期为后缀。
  • 用于备份的库、表必须以bak为前缀并以日期为后缀。
  • 所有存储相同数据的列名和列类型必须一致。

字段类型

字段类型的设计尽量贴合需求:链接


间歇性凌云壮志,持续性混吃等死