1.名字
1.1见名知意
1.2大小写
1.3分隔符 auto_test_info
1.4表名 对于表名,在言简意赅,见名知意的基础之上,建议带上业务前缀。
1.5索引名 在数据库中,索引有很多种,包括:主键、普通索引、唯一索引、联合索引等。
2.字段类型
2.1尽可能选择占用存储空间小的字段类型,在满足正常业务需求的情况下,从小到大,往上选。
2.2如果字符串长度固定,或者差别不大,可以选择char类型。如果字符串长度差别较大,可以选择varchar类型。
2.3是否字段,可以选择bit类型。
2.4枚举字段,可以选择tinyint类型。
2.5主键字段,可以选择bigint类型。
2.6金额字段,可以选择decimal类型。
2.7时间字段,可以选择timestamp或datetime类型。
3.字段长度
4.字段个数 建议每表的字段个数,不要超过20个。
5.主键 在单个数据库中,主键可以通过AUTO_INCREMENT,设置成自动增长的。主键建议保存跟业务无关的值,减少业务耦合性,方便今后的扩展。
6.存储引擎
在mysql5.1以前的版本,默认的存储引擎是myslam,而mysql5.1以后的版本,默认的存储引擎变成了innodb。建议我们在使用mysql8以后的版本时,直接使用默认的innodb存储引擎即可,无需额外修改存储引擎。
7.NOT NULL 在innodb中,需要额外的空间存储null值,需要占用更多的空间。null值可能会导致索引失效。因此,建议我们在定义字段时,能定义成NOT NULL,就定义成NOT NULL。
8.外键 外键存在的主要作用是:保证数据的一致性和完整性。只有存储引擎是innodb时,才能使用外键。如果只有两张表的关联还好,但如果有十几张表都建了外键关联,每删除一次主表,都需要同步删除十几张子表,很显然性能会非常差。
9.索引 建议单表的索引个数不要超过:5个。如果在建表时,发现索引个数超过5个了,可以删除部分普通索引,改成联合索引。在创建联合索引的时候,需要使用注意最左匹配原则,不然,建的联合索引效率可能不高。
10.时间字段 优先推荐使用datetime类型保存日期和时间,可以保存的时间范围更大一些。
11.金额字段 float和double可能会丢失精度,因此推荐大家使用decimal类型保存金额。
12.唯一索引 创建唯一索引时,相关字段一定不能包含null值,否则唯一性会失效。
13.字符集 建议在建表时字符集设置成:utf8mb4,会省去很多不必要麻烦。
MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。其实,utf8mb4是utf8的超集,理论上原来使用utf8,然后将字符集修改为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。当然,为了节省空间,一般情况下使用utf8也就够了。