「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战」
1. 建表规约
1.1 表、字段命名
- 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字
- 表名不能使用复数名词
- 禁用保留字,如desc、range、match、delayed等
- 表达是与否的概念字段,必须使用is_xxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)
- 表必备三字段: id,create_time, update_time
- 表命名应该遵循: 业务名称_表的作用
1.2 数据类型
- 小数类型用decimal,尽可能不使用float和double,因为 float 和 double在存储的时候存在精度损失的问题
- 货币数据使用最小货币单位,数据类型为bigint
- 如果存储的字符串长度几乎相等,可以使用char定长类型
- varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。
2. 索引规约
2.1 索引命名
1. 主键索引名用px_字段名
2. 唯一索引名用uk_字段名
3. 普通索引名用idx_字段名
2.2 创建索引
1. 有唯一特征性的字段必须建成唯一索引
2. 在varchar字段建索引时,必须指定索引长度
3. 建组合索引的时候,区分度最高的在最左边
3. SQL 与 ORM映射
3.1 SQL语句
count查询注意的地方
1. 统计语句用count(*), count(*)是SQL92定义的标准统计行数的语法
2. count(distinct col) 计算该列除NULL之外的不重复行数
3. 使用ISNULL()来判断是否为NULL值
有关于索引查询注意的地方
1. 注意字段类型,防止因字段类型不同造成的隐式转换,导致索引失效
2. 利用覆盖索引来进行查询操作,避免回表
3. 利用有序性,如果有order by的场景,注意利用索引的有序性
4. 页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决
5. 超过三个表禁止join
3.1 ORM映射
- 在查询表中,一律不要使用 * 作为查询的字段列表
- POJO类的布尔属性不能加is, 而数据库字段必须加“is_"
- 查询返回结果都需要使用ResulMap映射
- 不要使用${}
- 不要使用MyBatis自带的queryForList方法
- 不允许直接使用HashMap 与 Hashtable接收结果集
- 更新数据记录时,必须同时更新update_time
- 不要写一个大而全的数据更新接口