当前位置: 首页 > news >正文

大厂MySQL数据库规范文档

MySQL数据库规范

1.建表规约

1.【强制】表名采用统一采用小写,前缀+定义(+后缀),语义清晰、简短为宜,下划线分隔语义,尽量使用名词作为表名,禁止出现数字开头,禁止两个下划线中间只出现数字。表名不使用复数名词。
说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量
【参考】前缀:

  • 用户体系请以user_ 作为前缀
  • 机构体系请以company_作为前缀
  • 日志体系请以log_作为前缀
  • 系统表体系请以sys_作为前缀,如系统字典表sys_dict
  • 车险相关请以car_作为前缀
  • 产品信息请以product_作为前缀
  • 临时表名须以tmp_作为前缀,并以 _日期为后缀
  • 备份表须以bak_作为前缀,并以 _日期为后缀

【参考】后缀:
两个实体之间的关系请以_map作为后缀
正例:比如我们要设计一个存储用户邀请的表,user_invitation 就比 user_invite 更为合适。
反例:两个下划线中间只出现数字level_3_name。
【参考】敏感数据字段命名:

  • 银行卡卡号 bank_account
  • 姓名 user_name
  • 身份证号 credential_no
  • 港澳居民来往内地通行证号码credential_no
  • 手机号 phone
  • 固定电话号码 tel_phone
  • 电子邮箱 email
  • 家庭住址 family_address
  • 收件地址 delivery_address
  • 车牌号 licence_no
  • 车架号(vin码) vin
  • 发动机号 engine_no
  • MAC地址 mac
  • 设备号(imei) imei

2.【强制】建表说明
1). 表名必须有注释,字段名必须有注释。
2). 唯一索引名为uniq_字段名;普通索引名则为idx_字段名
3). 数据库字符集默认UTF8MB4
4). 存储引擎默认使用innodb
说明:uniq_ 即 unique, idx_ 即index的简称
正例:

CREATE TABLE `car_info` (`id` INT (11) NOT NULL AUTO_INCREMENT COMMENT '主键',`car_ucid` CHAR (32) NOT NULL COMMENT '车辆标识码',`licence_no` VARCHAR (15) NOT NULL COMMENT '号牌号码',`licence_type` CHAR (2) NOT NULL DEFAULT '02' COMMENT '号牌种类',`vin` VARCHAR (17) NOT NULL COMMENT '车架号',`engine_no` VARCHAR (50) NOT NULL COMMENT '发动机号',`car_origin_type` TINYINT (4) DEFAULT 0 COMMENT '车辆产地类型 1:国产 2:进口 3:合资',`sys_ctime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`sys_utime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',`is_delete` TINYINT (4) NOT NULL DEFAULT '0' COMMENT '删除标志位 0:未删除 1:删除',PRIMARY KEY (`id`),UNIQUE KEY `uniq_car_ucid` (`car_ucid`),KEY `idx_licence_vin` (`licence_no`, `vin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车辆信息';

3.【强制】禁用保留字,如desc、range、key、status、user、type、byte、name等,参考官方保留字。
https://dev.mysql.com/doc/refman/8.0/en/keywords.html

2.索引规约

1.【强制】业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。 说明:不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验和控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。
2.【强制】唯一索引必须设为not null。
3.【强制】每个表都需要主键,使用与业务无关的自增bigint/int类型作为主键
说明:因为在MySQL复制环境中,如果binlog format是row格式,则从库上的数据更新时是以主键为依据更新的,如果没有主键将会出现严重的主从延迟。
4.【强制】在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度。

3.SQL规约

1.【强制】不推荐面向C端应用使用聚合函数,如count、sum,涉及扫描行数过多,并发查询超过60就容易引发故障。以下为count优化方法,可根据业务特性,对方案进行选型。
在这里插入图片描述

2.【强制】不要使用count(列名)来替代count(),count()就是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。 说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行。
3.【强制】count(distinct col) 计算该列除NULL之外的不重复数量。注意 count(distinct col1, col2) 如果其中一列全为NULL,那么即使另一列有不同的值,也返回为0。

4.变更规约

1.【建议】各个项目各个版本迭代的的数据库变更语句,需保存在git上。具体git保存示例如下图:
在这里插入图片描述
图1 git保存示例

在这里插入图片描述
图2 git保存示例

注意:

  • sql 文件的命名格式为:逻辑库名_执行顺序.sql 如:wechat_activity_1.sql
  • ddl 和dml需要分开存储,其中ddl指变更语句,dml指 update/insert 等
  • 不同的schema要放到不同的文件中;不同实例的SQL要放到不同的文件中
  • 数据库变更任务每周二18:00之前提交到变更平台,白天不接受大表变更任务。

5.运维规约

1.【强制】项目上测试生产环境数据库变更,必须提供变更SQL,与代码一起统一更新至git处。
2.【强制】业务表内禁止使用mysiam引擎,统一规范使用innodb引擎。
3.【强制】应用账号给最小权限()select、insert、update),业务库默认回收delete权限,只允许软删除,如需delete权限,需走工单申请。
4.【强制】禁止非DBA对线上数据库进行写操作,如需修改生产数据,需走工单申请。
5.【强制】开发测试与线上环境隔离。

6.分库分表规约

名称只允许使用a-z、0-9及下划线的组合,不允许出现其他字符

1.【推荐】分库分表方案推荐

  • 按时间分库:通过时间进行分库分表

  • 单库按年分表

  • 单库按月分表

  • 单库按日分表

  • 按用户id分库:通过 hash(user_id)取模进行分库分表
    单库十表
    十库十表
    百库十表(慎用,分表过多)
    十库百表(慎用,分表过多)

  • 按订单号分库:通过hash(order_id) 取模进行分库分表
    单库十表
    十库十表
    百库十表
    十库百表(慎用,分表过多)

2.【强制】数据库命名规约

  • 数据库名称全部使用小写 不管如何分库,总的原则是同一系列的数据库名称长度相同,不允许出现名称长短不一的情况
  • 如果按百库十表方案分库,则名称为标准库名+下划线+编号后缀,其中编号长度固定为2位,取值范围从00到99,如wechat_car_00、wechat_car_99…

3.【强制】表名命名规约

  • 表名全部使用小写 年份固定格式为YYYY四位;月份固定为MM两位。
  • 如果按照月份分表,则表名为标准表名+下划线+年月编号,其中年月格式为YYYYMM,固定6位长度,如order_info_201901、order_info_201912…
  • 如果按照日分表,则表名为标准表名+下划线+年月日编号,其中年月格式为YYYYMMDD,固定8位长度,如msg_info_20190101、msg_info_20190101
  • 如果按照时间分表,表创建到下一年年底,比如现在是2019年4月份,日期类的表应该创建到2020年底。

完整内容文档下载链接

内容太多,完整内容文档下载:
《腾讯数据库规范2025.zip》(包括(MySQL、Mongo规范以及数据库选型规范)

http://www.dtcms.com/a/462380.html

相关文章:

  • 怎么做网站 高中信息技术锡盟建设工程网站
  • 公司做网站的费用会计分录营销手机软件开发定制
  • 怎么做垂直网站专业营销的网站建设公司哪家好
  • 福田市网站建设推广外包做的网站可以直接去收录吗
  • cynest下料喷漆挡板 exit图形
  • HandBrake:免费无广告,压缩、格式转换
  • 从不订购的客户-力扣
  • 大学文明校园网站建设方案怎么建网址
  • 保姆级教程-剪映多视频融合及识别文字转换方法
  • 北京建筑公司网站东莞手机网站建设怎么选
  • HTTP 头部 和 Headers 对象
  • 张掖作风建设年网站湖南seo网站多少钱
  • gps的时间精度
  • 如何在工商局网站做身份确认广东短视频推广效果好
  • 第29节:第二阶段总结 - 打造一个3D游戏原型
  • 设计的有趣的网站推荐怎样申请免费网站域名
  • --- 前后端的文件交互 ---
  • 打工人日报#20251009
  • 高并发秒杀系统设计:从理论到实践
  • Java 定时任务
  • 如何创建网站的二维码如何编辑 wordpress 主题
  • C++内存模型深度剖析从并发编程到原子操作的内存序语义
  • seo优化方法有哪些
  • 土动三轴试验机技术指标
  • 漳州正规网站建设公司wordpress google插件
  • 营销网站首页设计wordpress 博客主题
  • 鸿蒙路上的那些事:从初学者到资源创作者
  • 河北网站开发联系电话4a网站建设公司
  • 在 VS Code 中让整个工作区只读
  • 优秀网站菜单wordpress注册收不到邮件