本文内容总结自阿里Java开发关于MySQL建表规范的内容
以下:
1、表达是与否概念的字段,必须使用is_XXX的方式命名,数据类型是unsigned tinyint,任何字段如果非负数,必须是unsigned。
2、表名、字段名必须使用小写字母或者数字,禁止出现数字开头,禁止两个下划线中间出现数字。
3、表名不实用复数名词,表明应该仅仅表示表里面的实体内容,不应该表示实体数量,对应的DO类名也是单数形式,符合表达习惯。
4、禁止使用保留字,如desc、range、match、delayed等。
5、主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名。
6、小数类型为decimal,禁止使用float和double,float和double在存储的时候存在精度损失的问题,很可能在值比较时得不到不正确的结果,如果存储的数据范围超过decimal范围,建议将数据拆分存储。
7、如果存储的字符串长度几乎相等,使用char定长字符串类型。
8、varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,若超过则应定义字段类型为text,独立出来一张表,避免影响其他字段索引效率。
9、表必备三字段:id,gmt_create,gmt_modified,id类型为unsigned bigint、单表时自增,步长为1,gmt_create,gmt_modified类型为date_time。
10、表的命名最好是加上“业务名称_表的作用”如:alipay_task。
11、库名与应用名称尽量一致。
12、应该给每个字段备注字段的含义。
13、字段允许适当冗余,以提高查询性能,但是必须考虑数据一致。冗余字段不能是频繁修改的字段,不是varchar或者text等长字段
14、单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表,如果预计3年后数据量根本达不到这个级别,请不要在创建表示就分库分表。
15、合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的时提升索引速度。