MySQL数据库表的设计
可选字段
- `is_active` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否启用 0.禁用 1.启用'
编码与排序编码
- 数据库字符集使用
utf8mb4
- 数据库排序规则使用
utf8mb4_general_ci
- 表与字段的编码使用
utf8mb4
字段和表名统一使用小写字母和下划线组成,表中必须存在的字段
- `is_delete` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除 0.未删除 1.已删除'
- `created_time` datetime(0) NOT NULL DEFAULT '1000-01-01 00:00:00'
- `created_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT ''
- `updated_time` datetime(0) NOT NULL DEFAULT '1000-01-01 00:00:00'
- `updated_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT ''
字段不允许DEFAULT NULL
- varchar 默认空字符串:DEFAULT ''
- int,decimal 默认
0
- datetime 默认:’1000-01-01 00:00:00'
- 布尔类型的字段以
is_
作为前缀,tinyint(1) 0代表假 1代表真
关于索引
- 合理添加索引,根据
where
,join on
,group by
,order
的字段合理添加- 值变化范围不大的字段不建议加索引(也就是不经常改变的)
- 合理使用
唯一索引
和联合唯一索引
提升数据的正确性- 索引命名:主键索引用
pk_字段名
- 唯一索引用
uk_字段名
- 普通索引用
idx_字段名
关于注释
- 表必须加注释,最好加上模块信息
- 字段除固定字段以外,其他字段必须加注释,字段如果是其他表的主键还需要加上
table_name
.column_name
数据类型
- 小数类型:数据类型是
decimal
,禁止使用 float 和 double,float 和 double 存在精度损失,如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数并分开存储 - varchar类型:varchar是
可变
长度字符串,不预先分配存储空间,长度不要超过5000
个字符,如果长度大于5000就换text
(独立出一张表来,用主键来对应,避免影响其他字段的索引效率)
ORM映射
- 禁止使用
*
作为查询的字段列表,需要哪些字段必须自己明确- POJO 类的布尔属性不能加
is
,而数据库字段必须加is
,要求在Mybatis中的resultMap
中进行字段与属性之间的映射指明- mapper.xml 配置参数使用
#{}
,不要使用 ${},${} 容易出现SQL注入不安全的问题- 禁止直接使用
HashMap
、HashTable
作为查询结果集的封装,避免属性值的类型不可控