1.命名
数据库命名以环境结尾(_dev);
表命名:模块字头_表名,比如平台模块用户表:p_user,
字段命名:表内字段采用下划线方式,下划线方式支持数据库对大小写不敏感数据库;命名避免java中的关键字和数据库中关键字;
数据库名,表名,字段名全部用英文小写;
索引命名以(IDX_)开头;全部大写;
外键以(FK_)开头,全部大写;
2.字段类型建议:
表时间用timestamp,如果是生日类日期用:datetime;
主键尽量用char(32),会比varchar节省很多性能,varchar是可变长度,每次需要计算长度再存储;
是否标识统一用(_flag),比如是否手机已注册:mobile_flag(Integer),所有1代表是,0代表否
状态标识统一用(_status),比如用户状态:user_status(Integer),1,2,4,6
金钱统一用service_price(decimal(20,2)),保留两位小数,以元为价格单元
每个表基础字段:del_flag(Integer)、create_time(timestamp)、update_time(timestamp),create_by(char(32)),update_by(char(32))
3.注意事项
数据库编码不要用utf-8,要用utf8mb4,不然有些特殊编码会存储不进去;
可能用于查询条件的字段,在设计中尽量避免NULL,NULL也同样会占用存储;
能用联合主键做主键的,尽量用联合主键作为主键;
列类型尽量定义成数值类型,且长度尽可能短,如主键和外键,类型字段等等
当一个表字段有两个或以上text时,尽量考虑建立辅表,辅表以主表主键共用;
SELECT子句,禁止使用*
count(1) 和count(*) 效率上没有本质上的区别,但我们仍推荐用count(1)
如果应用逻辑允许,建议用用EXISTS替代IN
4.索引建立
根据需要建立多列联合索引
多表连接的字段上需要建立索引
where条件字段上需要建立索引
排序字段上需要建立索引
分组字段上需要建立索引
Where条件上不要使用运算函数,以免索引失效