Mysql的设计原则整理记录

2021-08-06  本文已影响0人  54番茄

在项目技术选型时,原则上是选择成熟的平台和技术,同时最好是自己最熟悉的,能做到极致的,用好不用坏,用熟不用生,不然发现问题,你会无从查骑,当然如果你已经有了技术储备,尝鲜未尝不可。

基础规范

索引规范

SQL规范

不推荐:
where date(create_time)='20210000'
推荐:
where create_time >= '20210000' and create_time < '20212000'

关系型数据库设计:三大范式

第一范式: 要求数据库表的每一列都是不可分割的原子数据项。
第二范式: 在第一范式的基础上,需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关
第三范式: 在第二范式的基础上,需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
打破范式标准:
建议建表的时候,就把这些列放在一个表里,比如一开始有student(id, name),class(id, description),student_class(student_id, class_id)三张表,这样是符合数据库范式的(第一范式,第二范式,第三范式,BC范式等),没有任何冗余,但是马上就不符合“编程规范“了,那我们可以用一张大表代替它,student_class_full(student_id, class_id, name, description),这样name和description可能要被存储多份,但是由于不需要join了,查询的性能就可以提高很多了。
任何的规范都是在特定情况下的某种妥协,脱离了这个环境,就不一定成立了。
需要说明的是,这种脱离范式的设计,是互联网业务在设计高并发表时惯用的做法。

表的拆分

原则:
将长度较短,访问频率较高的字段放在一个表中,主表
将长度较长、访问频率比较低的字段放一个表中
将经常访问字段放一个表中。
所有表的并集是全量数据。

大数据表添加字段需要注意

在开发时,有时需要给表加字段,在大数据量且分表的情况下,怎么样稳定的添加。
1:直接alter table add column,数据量大时不建议,(会产生写锁)

alter table ksd_user add column api_pay_no varchar(32) not null  comment '用户扩展订单号'
alter table ksd_user add column api_pay_no varchar(32) not null unique comment '用户扩展订单号'

2:提前预留字段(不优雅:造成空间浪费,预留多少很难控制,拓展性差)
3:新增一张表,(增加字段),迁移原表数据,在重新命名新表作为原表。
4:放入extinfo(无法使用索引)
5: 提前设计,使用key/value方法存储,新增字段时 ,直接加一个key就好了(优雅)

上一篇 下一篇

猜你喜欢

热点阅读