库表命名规范

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

对于创建时间修改时间一般要有默认值。以下四个字段,每张表都应该附在最后,由系统自行维护,一般不应承载额外的业务意义。

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据更新时间',

`create_by` bigint(20) NOT NULL DEFAULT 0 COMMENT '操作人ID',

`update_by` bigint(20) NOT NULL DEFAULT 0 COMMENT '最后操作人ID',

字段设计

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,批量查询后拼接

03-28 12:45