MySQL 设计规范
一. 建表规范
解决对于数据库取名的难题,给字段选择合适类型和长度信息。
1. 表字段命名
名称必须小写字母或者数字及下划线
不能以数字为字段开头
不可使用复数名词
禁用保留字
表达是否概念字段,需使用“is_xx”的写法
2. 数据类型选择
小数类型使用“decimal”
货币数据使用最小货币单位,数据类型使用“bigint”。
如果一个字段的内容是固定的长度,要使用char。原因是会节约两个字符的空间,但是如果长度不一样不要使用char,这样长度小的字段取出来的数据会被自动填充,要使用trim才行。
varchar的长度最好不要超过5000。如果超过了,推荐使用text,longtext,blob等,而且这里有个细节,如果一个字段的长度够长,推荐使用另外一个表存储这些信息,可以提高查询的效率
3. 表的设计
表必须具备三个字段:id,create_time,update_time。
二. 索引规范
1. 索引分类
a) 按索引特性
持久性
有序性
b) 按存储形式
聚簇索引
非聚簇索引
c) 按索引数量
单列索引
组合索引
d) innoDB索引相关
可以创建
l 主键索引
l 唯一索引
l 普通索引
不可创建
l 覆盖索引
2. 索引数据结构
a) 演变路线
二叉查找树->平衡二叉树->btree->b+tree
3. 索引命名
主键索引:pk_字段名,uk_字段名,idx_字段名
4. 建索引规范
在varchar字段上面建立索引,必须指定其长度
建立组合索引时,区分度最高的要在组合索引为的左边。比如idx_name_age (name,age)
三. SQL 和ORM映射规约
1. SQL 优化
注意字段类型。防止因为类型不同造成隐式转换,导致索引的失效。
利用覆盖索引来进行查询,避免回表。
尽量少用左模糊和全模糊匹配。如果实在要用,可以考虑走搜索引擎。
2. ORM 映射规约
在表查询中,一律不要用*作为查询的字段列表
查询的返回结果要用ResultMap映射,不能使用HashMap和HashTable作为结果集。