常用数据库设计规范

常用数据库设计规范


一、 基本原则

  物理数据模型是在逻辑模型的基础上,结合所使用的数据库的性能以及技术实现上的一些特殊要求,如索引、压缩、分表等机制,以最小容量的数据存储和最快的读写响应,综上要素进行设计。

  1. 在基于逻辑模型的三范式基础上,可以基于实际情况进行部分逆范式化设计以更好的满足数据查询的性能以及其他技术要求。

  2. 使用主键实现实体的完整性,主键尽量采用系统生成的值(数据库自增,分布式系统发号器等方式),避免手工操作导致的数据库错误,因此在设计每张实体表时,一定要设定该表主键的生成规则。

  3. 对于所有的非参数、非代码类实体表,增加相应的技术字段(创建时间create_time,创建用户create_user,变更时间update_time,变更用户update_user),用以记录数据操作的记录,以便于数据审计。

 

二、 命名规范:

  1、实体(表)命名规范:
    (1)【建议】表的命名要贴合该表的业务含义和用途,尽量采用英文翻译词汇,或者已有的标准词根;
    (2)【强制】库名、表名、字段名采用26个英文字母和0-9这十个数字,加上下划线'_'组成('_'不能为首字符);
    (3)【强制】库名、表名、字段名禁止超过32个字符;
    (4)【强制】不得使用数据库的关键词或保留字作为表名称;
    (5)【强制】表名统一采用下划线分段命名法,即:单词或短语间用下划线‘_’进行分割,表名禁止使用中文;
       统一格式为“前缀(类型分类)”+“表名英文翻译”+“_后缀”(表用途分类)。
    (6)【强制】前缀规范:
      a. 一般业务表必须以 ‘t_’ 作为前缀. 如 t_user;
      b. 临时库、表名必须以tmp_为前缀,并以日期为后缀. 如tmp_table_20180718;
      c. 备份库、表必须以bak_为前缀,并以日期为后缀。如bak_tablename_20180718;
      d. 视图的前缀为 view_;
      e. 索引的前缀,一般索引以 idx_ 开头;唯一索引以 uk_ 开头;主键索引以 pk_ 开头。
    (7)【建议】后缀规范:
      a. 代码表采用后缀 “_cd” 命名;
      b. 日志表采用后缀 “_log”命名;
      c. 参数表采用后缀 “_prmt”命名;
      d. 关系表采用后缀 “_rela”命名;
      e. 历史表采用后缀 “_his” 命名。
  2、属性(字段)命名规范:
    (1) 不使用各类数据库的关键词和保留字作为字段名称;

    (2)属性字段的命名要符合该字段的业务含义,建议使用统一的标准词根进行命名;

    (3)字段命名统一采用下划线分段命名法。

 

三、 MySQL强制性规范:

  1、为了保障数据库长期运行的稳定以及使用效率的提升,以下是使用MySQL数据库需遵循的开发规范:

    (1)使用字母、数字和下划线组成,一律小写,名称禁止只使用MySQL保留关键字(如user,status,date,data,type等)。不遵循该规范可能存在的问题:运维时命令行连接MySQL对其他特殊字符和保留关键字使用时需要做特殊处理,对自动化运维和批处理增加复杂度;
    (2)禁用procedure、function、trigger、views、event、外键约束。不遵循该规范可能存在的问题:列举的功能会消耗数据库资源,降低数据库实例可扩展性,推荐都在程序端实现;
    (3)非必要,不需要指定库、表、字段字符集,指定库、表和字段的字符集时需要检查是否和集团、公司、团队和系统默认字符集有慢查询的风险;
    (4)创建表时存储引擎类型需为InnoDB。原因:它遵循ACID模式设计,对事物和行锁支持好,读写频繁业务支持并发性支持较好;
    (5)新建表必须有主键,主键类型必须为int或bigint且自增。Innodb是一种索引组织表:数据的存储逻辑顺序按主键排序的。非自增主键会导致innodb内部page分裂和大量随机I/O;
    (6)单个表最多只可以存在一个大字段。原因:MySQL是行存储模式数据库,即使查询只涉及到其中一个或者少量字段,MySQL也会把整行数据都读取到内存里进行过滤处理;
    (7)单个表字段总设置行长度不能超过8k。原因:MySQL最小I/O单位是page,当行越长,一个page能存放的行越少,当范围查询涉及的I/O变高,行长过大更容易造成行迁移,产生碎片;
    (8)字段不能使用enum,set类型,应该使用TINYINT来代替。原因:如果使用enum,set类型,业务新增值时需要对表进行ddl操作,增加维护性,若没提前加会导致数据插入失败,影响业务;
    (9)单个表的索引个数不能超过7个。原因:当表做insert、delete、update时需要对索引进行维护,过多索引会增加维护成本,降低修改insert、update、delete速度;
    (10)所有字段定义为NOT NULL,如需default 空,建议使用default ''。如果null字段建立索引,需要额外的1字节,使索引,索引统计,值的比较变得更复杂;
    (11)表和列必须有comment注释,便于开发和后期维护。

posted @ 2022-01-20 09:46  颜子歌  阅读(1294)  评论(0编辑  收藏  举报