1. 前言

本文主要讲解 MySQL 表中的一些错误命名规范,虽然这是一个很简单的事情,但随着需求增多,表也在不断扩张,如果没有相关的表命名规范,到时候维护起来也会及其麻烦。我们以 开源框架 Ruoyi 为例,讲解这个框架对表的命名处理。

2. 不规范表命名存在的问题

2.1. 表命名

问题一:如下图中,如下表名虽然可以做到见名其意,但随着业务扩展。当需要查询某一个模块的数据时,但又不清楚表名就会存在问题。

image-20230515124929426

2.2. 字段命名

问题二:如下图中,找到了表名,但如果要修改某个字段的数据又会存在问题了。

image-20230515125527436

3. Ruoyi 对表命名的处理

基本规范

  • 数据库表名、字段名、索引名等都需要命名规范,可读性高(一般要求用英文),最好做到见名知意
  • 我们可以通过命名知道表属于那个模块,可以高效的定位到表进行修改。

3.1. 表命名

基本规范

  • 必须使用小写字母或者数字,禁止使用数字开头,禁止使用拼音,并且一般不使用英文缩写。
  • MySQL 中,如果表名可以使用父级模块的名称作为前缀,可以更好地组织和管理表

如下图,QRTZ 开头就可以知道是定时任务模块的数据。system 开头的就知道是系统模块的数据。

image2022-12-30_10-30-27.png

3.2. 字段命名

基本规范

  • 必须使用小写字母或者数字,禁止使用数字开头,禁止使用拼音,并且一般不使用英文缩写

例如,一个表的账号字段

  • 反例
1
2
3
4
CREATE TABLE `account_user` (
`1_acc_no` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '账号',
PRIMARY KEY (`acc_no`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表';
  • 正例
1
2
3
4
CREATE TABLE `account_user` (
`account_no` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '账号',
PRIMARY KEY (`account_no`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表';

3.3. 索引命名

主键索引:

  • pk_字段名。 例如:PRIMARY KEY (id) USING BTREE

唯一索引:

  • uk_字段名。 例如:UNIQUE INDEXuk_mobile(mobileASC) USING BTREE

普通索引:

  • idx_字段名。例如:INDEXidx_mobile(mobileASC) USING BTREE