参考文档:阿里巴巴JAVA编程规范之MYSQL规约
一、表命名规则
1.【强制】表的命名要加上“系统名_业务名称_表的作用”。
正例:epc_task_history、ho_object_history、insight_model_history
2.【强制】表名不使用复数名词。
说明:表名应该仅仅表示表里面的实体内容,不应该在后面加s或是es。
3.【强制】表名必须使用小写字母或数字;禁止出现数字开头,禁止两个下划线中间只出现数字。
正例:epc_task_history、level3_name
反例:EpcTaskAdmin、level_3_name
4.【强制】表名称为有意义的单词(而不是拼音),尽量用全名,如果表名由几个单词组成,则单词间用下划线(”_”)分割。
正例:epc_task_history、ho_object_history、insight_model_history
5.【强制】表名限制在30个字符内。当表的全名超过30字符时,可用缩写来减少表名的长度。
6.【强制】中间表命名要加上“系统名_表1名称_表2名称_rel”。
正例:epc_email_node_user_rel
7.【强制】临时表命名以“_tmp”结尾命名、测试表命名以“_test”结尾命名。
8.【推荐】表的设计要符合第一二三级范式。
9.【推荐】单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。
说明:如果预计三年后的数据量根本达不到这个级别,不要在创建表时就分库分表。
二、表字段命名规则
1.【强制】字段名称为有意义的单词,或单词的缩写,全部为小写字母。
2.【强制】如果字段由几个单词组成,则单词间用下划线(“_”)分割。
正例:license_status
反例:licenseStatus
3.【强制】表必备3字段:id、creator、create_time。
说明:其中id必为主键,creator为user表主键,create_time为创建时间。
4.【强制】表达是与否概念的字段,必须使用“is_xxx”的方式命名,数据类型为int,长度1。
5.【强制】对于时间日期类型的字段,一般约定如下:
(1) 如需记录到年月日,字段名称中用“date”标识,如:create_date;
(2) 如需记录到年月日及时间,字段名称中用“time”标识,如:pay_time。
6.【强制】禁用关键字和保留字,如code、desc、range、match、delayed等,请参考MySQL官方保留字。
7.【强制】外键字段命名使用“fk_关联表名(其中的业务名称)_业务名称”。
正例:fk _user_receiver、fk _user_ copier
反例:fk_id
8.【强制】唯一索引名为“uk_字段名”;普通索引名则为“idx_字段名”。
说明:uk_即unique key;idx_即index的简称。
9.【强制】varchar是可变长字符串,不预先分配存储空间,长度不要超过4000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。
10.【推荐】字段允许适当冗余,以提高性能,但是必须考虑数据同步的情况。冗余字段应遵循:
(1) 不是频繁修改的字段。
(2) 不是varchar超长字段,更不能是text字段。
11.【推荐】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。
12.【推荐】如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。