进阶模板
为您的数据库提供全面保护和最佳实践。
基础模板
保证变更可正确地应用到数据库。
字符集决定了表中可以存储哪些字符,使用错误的字符集可能导致应用中的某些字符无法正确存储与显示,例如中文与 Emoji 表情。建议错误等级:错误
字符序决定了字符比对与排序的规则,例如使用不区分大小写的字符序时 "ABC" 与 "abc" 在查询时将被视为相同字符串。建议错误等级:错误
某些通用列有助于更好的维护应用,例如增加 "ID" 作为业务无关的通用主键避免了业务变化(如业务合并)导致的主键冲突,某些场景还能带来更好的数据插入性能。建议错误等级:警告
滥用列类型可能对系统可维护性与性能带来严重负面影响,例如使用 "LOB" 类列存放大量音视频数据可能导致数据库性能降低、备份恢复时间延长、数据同步工具不兼容等问题。建议错误等级:错误
"CHANGE COLUMN" 是 MySQL 特有的语法,可以同时修改列名与其他属性,但可能导致修改属性时误改了列名,建议仍然使用标准的 "RENAME","MODIFY" 语句区分两类变更。建议错误等级:错误
"CHAR" 是定长类型,例如 CHAR(20) 列即便只存放1个字符也将占用20个字符空间造成浪费,当字符串过长且长度不固定时,MySQL 可考虑用 VARCHAR 替代,PostgreSQL 可考虑用 TEXT 替代。建议错误等级:错误
列需要调用函数获取系统时间的情况一般只包括记录创建时间的 "DEFAULT NOW()" 与记录更新时间的 "DEFAULT NOW() ON UPDATE NOW()",额外的列记录系统时间没有意义且会增加资源开销。建议错误等级:错误
设置符合业务特点的默认值可以有效提升下游统计分析业务的数据质量,此规范不检查 "PRIMARY KEY", "JSON", "BLOB", "TEXT", "GEOMETRY", "AUTO_INCREMENT", "GENERATED" 类型。建议错误等级:警告
如果 DML 语句中使用 LIMIT 不伴随 ORDER BY,影响的行是不确定的,在某些复制模式下可能导致主库与从库变更了不同的行,造成数据不一致。建议错误等级:错误
排序操作是极为耗费资源的,对于更新与删除操作应该尽可能用确定的过滤条件,而不要使用 ORDER BY 加 LIMIT 的方式。建议错误等级:错误
"INSERT INTO table VALUES (...)" 语句没有显式列出列名,一旦发生列顺序变化或列增减,语句就可能失败或写入不符合预期的数据。建议错误等级:错误
在 PostgreSQL 11 之前的版本中,添加带有默认值的列将导致全表锁定无法读写,这可能导致业务中断。在 PostgreSQL 11 及以上版本中该问题已得到优化,无需关注此规范。建议错误等级:警告
在 PostgreSQL 11 之前的版本中,添加 CHECK 约束将对已有数据进行校验并导致全表锁定无法读写,这可能导致业务中断。建议附带 "NOT VALID" 选项只对新数据进行校验,变更完成后再手动校验已有数据。在 PostgreSQL 11 及以上版本中该问题已得到优化,无需关注此规范。建议错误等级:警告
在 PostgreSQL 11 之前的版本中,向表中添加 NOT NULL 约束将对已有数据进行校验并导致全表锁定无法读写,这可能导致业务中断。在 PostgreSQL 11 及以上版本中该问题已得到优化,无需关注此规范。建议错误等级:警告
默认格式为全小写字母,单词之间以下划线分割,长度不超过 63 个字符,例如 "abc","abc_def"。建议错误等级:警告
默认格式为全小写字母,单词之间以下划线分割,长度不超过 63 个字符,例如 "abc","abc_def"。建议错误等级:警告
允许名字为空并由数据库自动命名,若非空则默认格式为 uk_<表名>_<唯一键包含的列名组合> ,且不超过 63 个字符,例如 "uk_my_table_id_name"。建议错误等级:警告
允许名字为空并由数据库自动命名,若非空则默认格式为 pk_<表名>_<主键包含的列名组合> ,且不超过 63 个字符,例如 "pk_my_table_id_name"。建议错误等级:警告
允许名字为空并由数据库自动命名,若非空则默认格式为 idx_<表名>_<索引包含的列名组合> ,且不超过 63 个字符,例如 "idx_my_table_id_name"。建议错误等级:警告
允许名字为空并由数据库自动命名,若非空则默认格式为 fk_<目标表名>_<目标列名>_<被引用表名>_<被引用列名>,且不超过 63 个字符,例如 "fk_my_table_id_foreign_table_id"。
"BLOB" 等类型一般用于存放二进制数据,并不会作为查询条件,如果误在此类列上创建索引,将占用大量资源并产生严重的性能问题。建议错误等级:错误
在 PostgreSQL 11 及以上版本中,使用普通方式创建索引将导致表锁定无法写入数据,使用 "CONCURRENTLY" 模式可以实现无锁创建索引,不影响表的正常访问。建议错误等级:警告
InnoDB 是 MySQL 默认的存储引擎,能够确保事务一致性,同时对高并发低延迟的场景有更好的性能表现,还可以支持在线数据备份与恢复,是 OLTP 业务的首选。建议错误等级:错误