表设计规范
-
每张表都要有主键
id int(10) unsigned not null auto_increment
-
强烈建议字段定义为not null
需要为空的字段可定义为not null default ‘’ 或0(0不要赋予实际意义)
-
库名、表名、字段名
- 必须使用小写,并且单词间使用下划线(“_”)分割
- 命名尽量不超过12个字符
- 应尽量做到见名知意,尽量使用名词而不是动词
- 禁止出现数字开头
- 禁止两个下划线中间只出现数字
- 禁止表名使用复数形式
- 禁止使用保留字,请参考MySQL官方保留字
- 表的命名最好是“业务名称_表的作用”
- 库名与应用名称应尽量一致
- 追加字段或对字段表示的状态追加时,必须及时更新字段注释
说明:MySQL在windows下不区分大小写,但在Linux下默认是区分大小写的。因此数据库名,表名,字段名都不允许出现任何大写字母,避免节外生枝
-
小数类型字段数据类型为decimal,禁止使用float、double
-
建议使用unsigned存储非负数值
如tinyint,取值范围为[-128,127],加了unsigned之后,取值范围为[0,255]
-
建议使用int unsigned存储IPV4
-
整形定义中建议采用int(10),而不是int(1)、int**(**13)或其他
-
存储状态等,用tinyint(3)
- 表示是与否概念的字段,必须使用is_xxx的方式命名,且1表示是,0表示否
-
不建议使用enum,用tinyint代替
-
尽量不使用text、blob类型
-
varchar(N),N表示的是字符数而不是字节数,比如varchar(255),可以最大存储255个汉字,需根据实际情况来定义N的大小。N尽可能小,因为MySQL一个表中所有varchar字段最大长度为65535个字节,、21845个汉字(UTF-8编码格式下),进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存
说明:
- varchar(N),如果N < 256时会使用一个字节来存储长度,如果M >= 256则使用两个字节来存储长度
- 使用UTF-8字符集,如果是汉字,占3个字节,但ASCII码字符还是一个字节
-
表字符集选择UTF-8
-
存储年使用year类型
-
存储日期使用date类型
-
存储日期(精确到秒)建议使用TIMESTAMP类型,因为timestamp使用4字节,datetime使用8个字节,timestamp类型保存的值不能早于1970年或晚于2038年
-
禁止在表中使用varbinary、blob存储图片、文件等
-
如果存储的字符串长度几乎相等,使用char定长字符串类型
-
表必须由create_time、update_time字段(或表示相同含义的字段名如阿里的gmt_create、gmt_modified)
说明:前者表示记录创建时间、后者表示记录更新时间
-
字段允许适当冗余、以减少关联查表,提高查询性能。但必须考虑数据一致。
冗余字段应遵循:
- 不是频繁更新的字段
- 不是varchar超长字段,更不能是text字段