首页 > 数据库 >数据库开发规范

数据库开发规范

时间:2022-12-28 15:00:11浏览次数:31  
标签:存储 数据库 规范 索引 开发 使用 主键 字段名

1 命名规范

命名采用英文单词或业务缩写,可使用字母/数字/下划线三种,建议见名知义,从名称上基本可以看出对象的使用,禁止拼音或中文命名数据对象。

对象名称字符可以多个单词组合,单词过长可采用缩写,命名对象的字符长度不能超过30个,单词间根据情况加下划线分割,例如:v_rds_user。

表/视图/索引等对象的命名格式: 前缀类型_对象名。_

  • 数据库命名

应用名称_dev 开发库;示例:order_dev_

应用名称_test 测试库;示例:order_test _

如有多套环境,则在数据库名后加数字,示例: rds_dev_01

  • 数据表命名

t_业务名称_表的作用;示例:t_user_role,t_order_detail,t_project_task

临时表:tmp_业务名称_表的作用

  • 视图命名

v_业务名称_表的作用;示例:v_mps_user,v_ct_order

  • 索引命名

idx_表名_字段名;示例:idx_t_user_user_code

  • 字段命名

从字段可以看出字段作用及存储的值,如user_dept应该改为user_dept_code

2 数据库开发规范

  1. 禁止使用存储过程,存储过程难以调试和扩展,更没有移植性;
  2. 使用 IN 或 NOT IN 子句时,特别是当子句中有多个值且表数据较多时,速度会明显下降。推荐采用连接查询或外连接查询来提高性能;或者使用EXISTS 替代 IN;若实在避免不了,需要仔细评估 IN 后边的集合元素数量,控制在1000个之内;
  3. 对于数据库中表记录的查询和变更,只要涉及多个表,必须在列名前加表的别名(或表名)进行限定;**
  4. 禁止使用select *,只获取必要字段,减少cpu/io/内存/带宽的消耗;
  5. insert必须指定字段,禁止使用insert into T values()。指定字段插入,在表结构变更时,能保证对应用程序无影响;
  6. 禁止负向查询 (where 子句中使用!=或<>操作符),以及%开头的模糊查询,会导致不能命中索引,全表扫描;
  7. 禁止大表JOIN和子查询;
  8. 禁止在where条件列使用函数或者表达式, 导致不能命中索引,全表扫描;
  9. 每张表必须增加两个字段创建时间(created_at),最后一次修改时间(updated_at),建议添加两个字段创建人(created_by),变更人(updated_by);
  10. 推荐使用CHINER工具进行数据库设计;
  11. 建议日志库与业务库分离。

3 建表规范

  1. 表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是tinyint(1表示是,0表示否); 正例:表达逻辑删除的字段名is_deleted,1表示删除,0表示未删除

  2. 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑;

    说明:MySQL在Windows下不区分大小写,但在Linux下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。

    正例:rdc_config,level3_name

    反例:rdcConfig,level_3_name

  3. 表名不使用复数名词; 说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量。

  4. 主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名; 说明:pk_ 即primary key;uk_ 即 unique key;idx_ 即index的简称。

  5. 小数类型为decimal,禁止使用float和double;

    说明:在存储的时候,float 和 double 都存在精度损失的问题,很可能在比较值的时候,得到不正确的结果。

  6. 如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数并分开存储。如果存储的字符串长度几乎相等,使用char定长字符串类型;

  7. varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率;

  8. 必须为表、字段等添加注释。如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释;

  9. 单表的字段数量不要超过60个;

  10. 多表中的相同列,必须保证列名一致,数据类型一致;

  11. 每个表必须设置唯一主键,可以使用分布式全局ID(如基于Snowflake算法生成的ID)作为主键,避免使用UUID以及长字符类型字段作为主键,尽可能避免联合主键;

  12. 禁止将有业务属性的字段直接作为主键使用;

  13. 单表索引数量尽量控制在5个以内,Order by、distinct、group by后的字段尽量建立索引;update、delete语句的where尽量使用有索引的字段或主键

  14. 建议选择合适的数据类型,有助于节约数据库表空间、节约索引存储,更重要的是提升检索速度。

数据类型 使用说明
char 能够避免数据变长的场景选择,如编码字段
varchar 变长的数据选择,根据业务情况设置字段长度;
int/tinyint 如果用该类型存储状态值,尽量设置为非空;避免NULL这种容易产生歧义的值;
number/decimal 存储多位小数的精确的数值时优先选择这种类型;
blob/image 存储文件内容,尽可能规避这种用法,如果必须用数据库存储,则建议与业务库分离;
(medium/long)text (长)文本字段,避免出现在查询子句中,避免对该类型字段建立索引,涉及长文本检索可考虑ES或程序内配合缓存实现

标签:存储,数据库,规范,索引,开发,使用,主键,字段名
From: https://www.cnblogs.com/fightmonster/p/17010150.html

相关文章