库表命名规范
1、数据库名以_db后缀结尾,例如searchcloud_db;
2、表名称以t_开头,根据需要再要带上对应模块的前缀,例如t_index_datasource
3、字段名称可读性一定要高,如果需要多个单词能表述清楚,单词与单词间请用"_"分割,比如:report_user_id
4、表名和所有字段都要有注释
5、普通索引:idx_<字段名>,唯一索引udx_<字段名>,后面下划线加上索引的字段例如,idx_agent_id_date, udx_user_id
6、字段名称尽可能的避免使用关键字例如desc,where等,请使用MySQL客户端或者编辑器的提醒功能提前检查。
7.库表请使用UTF-8编码,如可能请使用UTF8-bin,可以进行大小写区分
数据类型
一、数字类型
1、一般数字类型都用有符号INT(11),对应JAVA Integer
2、ID类字段用有符号BIGINT(20),对应Java Long
3、状态、字典类字段,统一使用tinyint(4),对应java Integer
4、尽量不要使用浮点型数据类型,可以进行倍数放大后用整型进行存储
二、字符串类型
1、如无特殊需要,一般都是用varchar,但是注意每个表数据的最大长度不能超过65,535
2、TEXT LONGTEXT BLOB等不推荐使用
三、日期和时间类型
一般建议使用TIMESTAMP,DATETIME
对于创建时间修改时间一般要有默认值。以下四个字段,每张表都应该附在最后,由系统自行维护,一般不应承载额外的业务意义。
|
字段设计
1、建议所有字段都是NOT NULL,同时设计默认值0或''
2、主键设计建议都是 bigint(20) NOT NULL AUTO_INCREMENT,并且主键ID不应具备任何业务含义,用于各表间的数据关联。
3、禁用外键
4、状态类型、字典类型的字段,统一设计为以下格式,
xxx_status tinyint(4) NOT NULL DEFAULT '1' COMMENT '成交状态(1未成交/2平台成交/3标记成交)'
注:所有字典项应从1开始;禁用 status、is_delete此类的命名;
5、根据业务场景设置合适的查询索引和唯一约束
查询规范
1、不要使用select *
2、数据库事务不要开太大,特别是一个事务里面不要做访问第三方API,调用RPC等耗时操作。
3、避免N+1问题,不要在查到一个列表时,在循环按照某ID查第二张表,建议拿出所有关联的ID,批量查询后拼接