添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

SakuraTears的博客

越努力越幸运

Mysql数据库设计命名规范

数据库涉及字符规范

采用 26 个英文字母(区分大小写)和 0-9 这十个自然数,加上下划线 '_' 组成,共 37 个字符。不能出现其他字符(注释除外)。

注意事项:

  1. 以上命名都不得超过 30 个字符的系统限制。变量名的长度限制为 29 (不包括标识字符 @ )。

  2. 数据对象、变量的命名都采用英文字符,禁止使用中文命名。绝对不要在对象名的字符之间留空格。

  3. 小心保留词,要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突, 当表名或字段名乃至数据库名和保留字冲突时,在sql语句里可以用撇号( ` )括起来。

  4. 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里也要保证是整型。

数据库命名规范

数据库名使用小写英文以及下划线组成(公司简称+项目名)。比如:

baidu_oa
ailibaba_cloud

备份数据库名使用正式库名加上备份时间组成,如:

dbname_20150206

数据库创建时,显式指定字符集。

数据库表命名规范

数据表名使用小写英文以及下划线组成(项目名+表信息),并且创建数据库时,显式指定默认字符集。

比如:

oa_user
oa_workflow_steps

备份数据表名使用正式表名加上备份时间组成,如:

oa_user_20150206
oa_workflow_step_20150206

字段命名规范

字段名称使用单词组合完成,首字母小写,单词之间用 “_” 分隔,最好是带表名前缀,自增id最好创建与业务无关.

oa_user 表的字段:

user_id
user_name

表与表之间的相关联字段要用统一名称。

索引命名规范

索引名称为 idx_列名_表名缩写 ,唯一索引名称为 uniq_列名_表名缩写 ,其中表名和关联字段名如果过长,可以取表名、关联字段名的前 5 个字母,如果表名、关联字段为多个单词组合,可以取前一个单词,外加后续其它单词的首字母作为字段名。

如:

普通索引: idx_user_name_oa

唯一索引: uqidx_user_name_oa

注意事项:

字段类型规范

规则:用尽量少的存储空间来存数一个字段的数据。

  1. char(n) varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入 m 个中文,但是实际会占用 m*3 个字节。

  2. 同时 char varchar 最大的区别就在于 char 不管实际 value 都会占用 n 个字符的空间,而 varchar 只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。

  3. 超过 char varchar n 设置后,字符串会被截断。

  4. char 的上限为 255 字节, varchar 的上限 65535 字节, text 的上限为 65535

  5. char 在存储的时候会截断尾部的空格, varchar text 不会。

  6. varchar 会使用 1-3 个字节来存储长度, text 不会。

Value CHAR(4) Storage Required VARCHAR(4) Storage Required
‘’ ‘    ‘ 4 bytes ‘’ 1 byte
‘ab’ ‘ab  ‘ 4 bytes ‘ab’ 3 bytes
‘abcd’ ‘abcd’ 4 bytes ‘abcd’ 5 bytes
‘abcdefgh’ ‘abcd’ 4 bytes ‘abcd’ 5 bytes

总体来说:

接下来,我们说下这个场景的问题:

varchar(n) 后面的n非常大的时候我们是使用 varchar 好,还是 text 好呢?

这是个明显的量变引发质变的问题。我们从2个方面考虑,第一是空间,第二是性能。

首先从空间方面:

从官方文档中我们可以得知当 varchar 大于某些数值的时候,其会自动转换为 text ,大概规则如下:

所以对于过大的内容使用 varchar text 没有太多区别。

比如能用 int 的就不用 char 或者 varchar ,能用 varchar(20) 的就不用 varchar(255)

时间戳字段尽量用 int 型。

尽量避免大字段 blob text longtext ,如强制需要大字段,不要集中存放在一个表中,分多表存放。查询语句 where 条件不要落在大字段上。

相关文档:

操作规范

数据库用户创建规范

采用 26 个英文字母(区分大小写)和 0-9 这十个自然数,加上下划线 '_' 组成,共 37 个字符。不能出现其他字符(注释除外)。

注意事项:

其他设计技巧

  1. 避免使用存储过程、触发器、视图、自定义函数等,这些高级特性有性能问题,以及未知BUG较多。业务逻辑放到数据库会造成数据库的 DDL SCALE OUT SHARDING 等变得更加困难。

  2. 分区表对分区键有严格要求;分区表在表变大后,执行 DDL SHARDING 、单表恢复等都变得更加困难。因此禁止使用分区表,并建议业务端手动 SHARDING

  3. 使用常用英语(或者其他任何语言)而不要使用拼音首字母缩写。

  4. 将大字段、访问频率低的字段拆分到单独的表中存储,分离冷热数据, 有利于有效利用缓存,防止读入无用的冷数据,较少磁盘IO,同时保证热数据常驻内存提高缓存。

  5. 禁止有 super 权限的应用程序账号存在, 安全第一。 super 权限会导致 read only 失效,导致较多诡异问题而且很难追踪。

  6. 不要在MySQL数据库中存放业务逻辑, 数据库是有状态的服务,变更复杂而且速度慢,如果把业务逻辑放到数据库中,将会限制业务的快速发展。建议把业务逻辑提前,放到前端或中间逻辑层,而把数据库作为存储层,实现逻辑与存储的分离。

  7. 不建议使用 enum , set , blob , text 字段,如非用 blob text 字段,请将 blob text 内容存放到文件系统中,数据库中只存放文件系统的 url 地址,或将该类字段单独存放到一张小表中(首推第一种方法)。

附:建表示例

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `manager_test` (
  `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
  `staff_id` int(11) NOT NULL COMMENT '操作人员id',
  `staff_name` varchar(50) NOT NULL COMMENT '人员名称',
  `url` varchar(200) NOT NULL COMMENT '操作路径',
  `method` varchar(10) NOT NULL COMMENT '操作方式',
  `params` varchar(10)NOT NULL COMMENT '操作参数',
  `ip` varchar(20) NOT NULL COMMENT 'ip',
  `time` int(11) NOT NULL COMMENT '操作时间',
  PRIMARY KEY (`id`),
  KEY `idx_staff_id_ct` (`staff_id `)
) ENGINE=InnoDB AUTO_INCREMENT=1DEFAULT CHARSET=utf8

数据库用户命名规范

用户命名规则,分为四段,每段规则如下

示例: d_zq_pc_dml

注意事项:

禁止程序具有 file super 权限。


您的支持就是我创作的动力!
SakuraTears 微信支付

微信支付

SakuraTears 支付宝

支付宝

欢迎关注我的其它发布渠道