开发规范

11/13/2023 开发

[toc]

# 开发规范

记录一下开发规范

# mysql数据库开发规范

# 命名规范

# 通用命名规范

  1. 命名应该都使用小写。
  2. 命名只能使用英文字母、数字、下划线,以英文字母开头。
  3. 命名使用具有意义的英文词汇,词汇中间以下划线分隔。
  4. 避免用MySQL的保留字如:backup、call、group,order等

# 库的命名规范

  1. 库命名一般为项目名称+库含义的简写,比如IM项目的用户信息库,可以是 im_user。
  2. 库创建时必须添加默认字符集和校对规则子句。默认字符集为UTF8(或者utf8mb4),排序规则默认选择utf8_general_ci或者utf8mb4_general_ci
  3. 库的命名应该使用小写。

# 表的命名规范

  1. 常规表表名以t_开头,t代表table的意思。命名规则即 t + 模块(包含模块含义的简写)+ 表(包含表含义的简写),比如用户模块的教育信息表:t_user_eduinfo。
  2. 临时表(用于对数据进行临时处理的表),命名规则:temp前缀+模块+表+日期后缀。例如用户模块教育信息临时表:temp_user_eduinfo_20210719
  3. 备份表(用于作为灾备恢复的数据)命名规则,bak前缀+模块+表+日期后缀。例如用户模块的教育信息备份表:bak_user_eduinfo_20210719
  4. 对于相同模块的表应该使用相同前缀。
  5. 表名中的多个单词,应该以下划线连接。并且表名都使用小写

# 字段的命名规范

  1. 字段命名需要表示其实际含义的英文单词或简写,单词之间用下划线 _ 进行连接,如 service_ip、service_port。
  2. 各表之间相同意义的字段必须同名,比如a表和b表都有创建时间,应该统一为create_time,不一致会很混乱。
  3. 多个单词以下划线 _ 分隔
  4. 字段命名应该都使用小写。

# 索引命名规范

  1. 唯一索引使用uni + 字段名 来命名。例如 create unique index uni_uid on t_user_basic(uid) 。
  2. 非唯一索引使用idx + 字段名 来命名。例如 create index idx_uname_mobile on t_user_basic(uname,mobile) 。
  3. 索引的命名应该使用小写,并且用多个单词以下划线 _ 分隔。
  4. 多单词组成的索引名,应该用代表意义的缩写。例如 test_contact表member_id和friend_id上的组合索引:idx_mid_fid。
  5. 理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c)。

# 约束命名规范

  1. 命名应使用小写。
  2. 唯一约束:uk_表名称_字段名。uk是UNIQUE KEY的缩写。例如:ALTER TABLE t_dept ADD CONSTRAINT un_name UNIQUE(name);
  3. 出于性能考虑,如无特殊需要,建议不使用外键。表与表之间的互相联系由代码控制。从程序角度进行完整性控制,但是如果不注意,也会产生脏数据。
  4. 非空约束:如无特殊需要,建议所有字段默认非空(not null),不同数据类型必须给出默认值(default)

# 设计规范

# 通用设计规范

  1. 对于存储引擎,默认使用innodb存储引擎
  2. 对于字符集,如无特殊要求,必须使用utf8或utf8mb4。
-- 如下脚本来查看数据库的编码格式
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
-- 如下脚本来查看数据库的编码格式
SHOW VARIABLES Like '%char%';  
1
2
3
4

# 表设计规范

  1. 不允许使用外键对表之间进行关联,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。目前业内的做法一般 由程序代码来控制表之间的关联性。
  2. 表必须要有primary key,主键的优势是唯一标识、有效引用、高效检索,所以一般情况下必须有主键字段。
  3. 单表字段数不要太多,建议最多不要大于50个。过度的宽表对性能也是很大的影响。
  4. MySQL在处理大表时,性能就开始明显降低。建议单表物理大小限制在16GB,表中数据行数控制在2000W内。
  5. TEXT字段作为大体量文本存储,必须放在独立的表中,然后用PK与主表关联。如无特殊需要,禁止使用TEXT、BLOB字段。

# 字段设计规范

  1. INT:如无特殊需要,存放整型数字使用UNSIGNED INT型,整型字段后的数字代表显示长度。比如 id int(11) NOT NULL
  2. DATETIME:所有需要精确到时间(时分秒)的字段均使用DATETIME,不要使用TIMESTAMP类型。
  3. VARCHAR:所有动态长度的字符串,全部使用VARCHAR类型。类似于状态等有限类别的字段,也使用可以比较明显表示出实际意义的字符串,而不应该使用INT之类的数字来代替。
  4. 对于精确浮点型数据存储,需要使用DECIMAL,严禁使用FLOAT和DOUBLE。
  5. 如无特殊需要,尽量不使用BLOB类型
  6. 如无特殊需要,字段建议使用NOT NULL属性,可用默认值代替NULL
  7. 自增字段类型必须是整型且必须为UNSIGNED,推荐类型为INT或BIGINT,并且自增字段必须是主键或者主键的一部分。

# SQL语句使用规范

  1. 尽量避免使用select *
  2. 严禁使用select * from t_name,而不加任何where条件,这样会变成全表全字段扫描。
  3. 分页查询语句全部都需要带有排序条件 , 否则很容易引起乱序。
  4. 用in 或 union替换or,效率会好一些。
  5. 严禁使用%前缀进行模糊前缀查询:如:select a,b,c from t_name where a like ‘%name’;
  6. 可以使用%模糊后缀查询如:select a,b from t_name where a like ‘name%’;
  7. 避免使用子查询,应该把子查询优化为join操作。
  8. 禁止使用不含字段列表的INSERT语句。例如:insert into values ('a','b','c'); 应该使用insert into t_name(c1,c2,c3) values ('a','b','c');
  9. 大批量写操作(UPDATE、DELETE、INSERT),应该分批多次进行操作。
Last Updated: 12/5/2023, 1:54:07 AM