表名字段名尽量简短,但是要见名知意,单词间以下划线分割
每个表都要有自增主键,主键id以表名_id形式命名
每个字段都要标明注释
对于枚举类型字段,都使用tinyInt类型(能节省长度的时候尽量节省),写好每个枚举值对应的含义,有枚举值添加的时候,要记得更新
如果可以,尽量设计字段的默认值;尽量把字段设计为not null,null查询不会走索引
对于可预见的常用查询,一定要添加对于的索引
逻辑删除字段时候enabled_status
如果没有特殊情况,建议选择InoDB索引
存储时间时,建议使用timestamp类型,因为timestamp使用的是4字节,datetime使用的是8字节
每个表必须要有创建时间和最后更新时间
如果需要有创建人和更新人的信息,使用create_user_id,update_user_id 两个字段
如果要求数据有强的唯一性,一定要创建唯一索引
不要对数据库字段使用函数,使用函数会导致索引失效
尽量不要使用子查询
能不要join就不使用join,join的表最好在三张表以下
对于索引,普通索引使用idx_开头,后面跟上每个字段的名字即可;对于唯一索引,使用uni_开头。
每次添加字段,最好指定字段所在的位置,前面放比较常用的字段,后面放不怎么常用的字段,随后放创建,更新人以及创建更新时间信息等
对于其他表中,已经有的名词定义,一定要复用
对于乐观锁,使用字段采用version_number
要权衡好数据冗余的必要性(对于在其它表经常查询,但是并不会经常更新的,我们一般可以采用冗余)
不要使用union查询
不要使用外键
如果可以,主键id使用无符号类型
字符串长度使用2的幂次
`create_user_id` BIGINT(20) DEFAULT '0' COMMENT '执行创建操作的用户id',
`update_user_id` BIGINT(20) DEFAULT '0' COMMENT '执行更新操作的用户id',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间',