mysql建库建表规范

本规范旨在帮助开发人员逐步建立合理使用数据库的意识,对数据库相关的资源申请、业务规范使用等提供规范性的指导,从而为公司业务系统稳定、健康地运行提供保障。

[TOC]

对象命名规范

所有对象命名应该遵循下述原则:

  • 凡是需要命名的对象,其标识符不能超过30个字符
  • 名称必须以英文字母开头,不得以 _(下划线) 作为起始和终止字母;
  • 所有名称的字符范围为:a-z, 0-9 和_(下划线),禁用大写、特殊符号、保留字、汉字和空格;
  • 采用英文单词或英文缩写作为名称,不使用无意义的字符或汉语拼音;
  • 名称应该清晰明了,能够准确表达事物的含义,最好可读,遵循“见名知意”的原则;

新增数据库

数据库命名规范

  • 数据库名称统一使用小写,采用下划线_分割,禁止以中划线-或小数点.分割,比如 platform-2.3
  • 数据库以 xxx_ 开头,再加业务系统代号,再加上具体业务名称,比如支付网关:xxx_pay_gateway;

注:xxx 可以是公司的英文标识,请根据实际修改。

申请者提供信息

  • 具体跑的什么业务,以便dba登记用途
  • 上线后的压力情况,比如qps、最大并发如何
  • 预计占用多大空间,每月增长速度。比如上线占用100G,每月增长10G

    注:如果已有同类业务的mysql实例,则新库优先创建在已有实例上

    注:推荐一个业务线使用一个mysql实例,若mysql单实例超过20个数据库,则应拆分多个实例;

MySQL建库示例

CREATE DATABASE xxx_pay_gateway DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'user_pay_gateway'@'%' IDENTIFIED BY 'wSgjBrY5lqe!mbIu';
GRANT SELECT,INSERT,UPDATE ON xxx_pay_gateway.* TO 'user_pay_gateway'@'%';
FLUSH PRIVILEGES;

示例解析

  • 强制:字符集utf8mb4,排序规则utf8mb4_unicode_ci

    注:utf8最大支持3个字节的UTF-8字符(真正的UTF-8是每个字符最多四个字节),支持大部分汉字;而utf8mb4是utf8的超集,专门兼容4个字节的unicode,支持Emoji表情、很多不常用的汉字,以及任何新增的Unicode字符等;

  • 默认权限:SELECT,INSERT,UPDATE。无DELETE权限,删数据请使用is_deleted逻辑删除

    特例:若为开源项目,因为初始化过程需要创建相关资源,权限可以设为 ALL PRIVILEGES

  • 密码复杂度:长度16位、包含大小写和特殊字符

新增数据表

数据表命名规范

  • 以表的具体内容进行描述。如:用户基础信息的表名为 users
  • 关联表可以使用两个表组合方式,比如 user_class
  • 每个表/字段都要有注释,说明其含义,对于外键字段请说明参照哪个表

MySQL建表示例

USE xxx_pay_gateway;
CREATE TABLE IF NOT EXISTS users (
  id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK',
  user_id bigint(20) NOT NULL comment '用户id',
  user_name varchar(10) NOT NULL comment '用户姓名',
  insert_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '插入时间',
  update_time timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT '更新时间',
  is_deleted tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除状态位,1删除0保留',
  PRIMARY KEY pk_users(id), 
  KEY idx_insert_time(insert_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户基础表' /*# Owner: 张开发; Manager: 李经理 #*/ ;

示例解析

  • 强制自增id为bigint(20),且为主键,业务不要使用
  • 表中必须包含4个固定列:id, insert_time, update_time, is_deleted
  • is_deleted=1 则认为该行已删,不允许再变更
  • 所有字段强制 NOT NULL+默认值,比如int默认0,varchar默认''
  • 表和字段必须有comment注释
  • 建新表必须填写创建人/负责人
  • 禁止使用大字段,比如varchar(2000+)、text、image、blob,大字段建议存放到oss
  • 如果对时间精度有要求,建表的时候请注意一下时间精度,比如 timestamp 与 timestamp(3)

新增索引

  • 索引的命名可参考如下:
索引类型 命名规范 备注
主键 pk_表名 主键具有唯一性,以表名命名
普通索引 idx_字段1_字段n 不用加上表名,有点冗余
唯一索引 udx_字段1_字段n u表示unique,唯一
  • 创建索引可参考如下:
ALTER TABLE users ADD INDEX idx_update_time(update_time);
Copyright © www.sqlfans.cn 2024 All Right Reserved更新时间: 2024-03-11 15:04:39

results matching ""

    No results matching ""