MySQL数据库规范

(一) 建表规约

1、 表达是与否概念的字段,建议使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是,0 表示否)。
2、 任何字段如果为非负数,必须是unsigned。
3、 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只 出现数字。
正例:getter_admin,task_config,level3_name
反例:GetterAdmin,taskConfig,level_3_name
4、 表名不使用复数名词,表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于 DO 类名也是单数 形式,符合表达习惯。
5、 禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。
6、 小数类型为 decimal,不建议使用 float 和 double。
7、 表必备字段:id, gmt_create, gmt_modified,is_delete。其中:
1) id 必为主键,类型为 unsigned bigint、单表时自增、步长为 1;
2) gmt_create, gmt_modified 的类型均为 date_time 类型,表示当前操作的服务器时间。
3) is_deleted类型为unsigned tinyint,表达逻辑删除,1 表示删除,0 表示未删除,默认设置为0。
8、 如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。
9、 字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:
1) 不是频繁修改的字段。
2) 不是 varchar 超长字段,更不能是 text 字段。

(二) SQL语句

1、 不要使用 count(列名)或 count(常量)来替代 count(),count()是 SQL92 定义的标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。
2、 当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为 NULL,因此使用 sum()时需注意 NPE 问题。可以使用如下方式来避免 sum 的 NPE 问题:
SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table;
3、 使用 ISNULL()来判断是否为 NULL 值。注意:NULL 与任何值的直接比较都为 NULL。 1) NULL<>NULL 的返回结果是 NULL,而不是 false。
2) NULL=NULL 的返回结果是 NULL,而不是 true。
3) NULL<>1 的返回结果是 NULL,而不是 true。
4、 在代码中写分页查询逻辑时,若 count 为 0 应直接返回,避免执行后面的分页语句。
5、 不得使用外键与级联,一切外键概念必须在应用层解决。
6、 数据订正时,删除和修改记录时,要先 select,避免出现误删除,确认无误才能执 行更新语句。
7、 in 操作能避免则避免,若实在避免不了,需要仔细评估 in 后边的集合元素数量,控 制在 1000 个之内。
8、 所有的字符存储与表示,尽量以 utf-8 编码,注意字符统计函数的区别。
SELECT LENGTH("好好学习"); 返回为 12
SELECT CHARACTER_LENGTH("好好学习"); 返回为 4

(三) ORM 映射

1、 在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。
2、 POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行字段与属性之间的映射。
3、 不要用 resultClass 当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义;反过来,每一个表也必然有一个与之对应,配置映射关系,使字段与 DO 类解耦,方便维护。
4、 sql.xml 配置参数使用:#{},#param# 不要使用${} 此种方式容易出现 SQL 注入。
5、 不允许直接拿 HashMap 与 Hashtable 作为查询结果集的输出。
6、 添加数据表记录时,必须同时设置gmt_create, gmt_modified值为当前时间。
7、 更新数据表记录时,必须同时更新记录对应的 gmt_modified 字段值为当前时间。
8、 更新操作时,不要更新无改动的字段,一是易出错;二是效率低;三是增加 binlog 存储。
9、 < isEqual >中的 compareValue 是与属性值对比的常量,一般是数字,表示相等时带 上此条件;< isNotEmpty >表示不为空且不为 null 时执行;< isNotNull >表示不为 null 值时执行。

未经允许不得转载:小小程序员 » MySQL数据库规范

赞 (1)

评论 0