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

一套完整的 MySQL 数据库设计规范

一、表结构规范

1. 每个表必须有主键

id bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID'

推荐:

  • 类型:bigint

  • 名称:id

  • 主键:PRIMARY KEY

  • 禁止外键关联

原因:

  • 避免无主键表导致InnoDB 隐式主键

  • 提升索引效率


2. 审计字段统一

必须包含:

create_user bigint DEFAULT NULL COMMENT '创建人', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_user bigint DEFAULT NULL COMMENT '修改人', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'

规范:

  • 必须放在id后面

  • 后续新增字段统一追加到最后

结构示例:

id create_user create_time update_user update_time 业务字段...

3. 字符集统一

数据库 / 表统一:

CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

原因:

  • 支持 emoji

  • 避免乱码


4. 存储引擎统一

ENGINE=InnoDB

原因:

  • 支持事务

  • 支持行锁


5. 表必须有表注释

COMMENT='用户信息表'

二、字段设计规范

1. 字段必须有注释

username varchar(50) NOT NULL DEFAULT '' COMMENT '用户名'

禁止:

username varchar(50)

2. varchar 字段禁止 NULL

统一:

varchar NOT NULL DEFAULT ''

示例:

nickname varchar(50) NOT NULL DEFAULT '' COMMENT '昵称'

原因:

  • 避免 NULL 逻辑判断复杂

  • 提高查询效率


3. 数值字段默认值

推荐:

int NOT NULL DEFAULT 0 decimal(10,2) NOT NULL DEFAULT 0.00

示例:

price decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '价格'

4. 排序字段统一命名

sort_no

示例:

sort_no int NOT NULL DEFAULT 0 COMMENT '排序号'

5. 状态字段统一

推荐:

status

示例:

status tinyint NOT NULL DEFAULT 1 COMMENT '状态 1正常 0禁用'

6. 逻辑删除字段

推荐:

is_deleted

示例:

is_deleted tinyint NOT NULL DEFAULT 0 COMMENT '是否删除 0否 1是'

7. 布尔字段命名

推荐:

is_xxx has_xxx

示例:

is_enabled is_deleted has_children

8. 时间字段类型

统一使用:

datetime

不推荐:

timestamp

原因:

  • timestamp 范围小

  • 时区问题


三、命名规范

1. 表名

规则:

模块名前四个字符_实体

示例:

system:syst_user_info trade:trad_order_info product:prod_category

禁止:

UserInfo userInfo

2. 字段名

统一:

snake_case

示例:

user_name create_time order_status

禁止:

userName UserName

3. 索引命名

规则:

idx_字段

示例:

idx_user_id idx_create_time

联合索引:

idx_userid_status

唯一索引:

uk_email

四、索引设计规范

1. 高频查询字段必须加索引

例如:

user_id order_id create_time

2. 单表索引数量

建议:

<= 5 个

原因:

  • 写入性能下降


3. 避免冗余索引

例如:

idx_userid idx_userid_status

idx_userid可以删除。


4. 避免在字段上做函数

错误:

DATE(create_time) = '2026-03-12'

正确:

create_time >= '2026-03-12'

五、SQL 规范

1. 禁止select *

必须:

select id,username

原因:

  • 减少 IO

  • 防止字段变更影响程序


2. delete / update 必须带条件

禁止:

delete from user

必须:

delete from user where id=1

3. limit 必须存在

防止:

limit 10000

4. 大分页优化

避免:

limit 100000,10

推荐:

where id > last_id

六、数据量规范

单表建议:

<= 500 万

超过:

  • 分表

  • 分库


七、字段类型规范

推荐:

类型使用场景
bigintid
int数值
tinyint状态
varchar文本
decimal金额
datetime时间

避免:

text longtext blob

除非必要。


八、金额规范

必须:

decimal(10,2)

禁止:

float double

原因:

  • 精度问题


九、扩展字段规范

如果有扩展字段:

ext_json json COMMENT '扩展字段'

避免:

ext1 ext2 ext3

推荐的标准表结构模板

CREATE TABLE user_info ( id bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID', create_user bigint DEFAULT NULL COMMENT '创建人', create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_user bigint DEFAULT NULL COMMENT '修改人', update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', username varchar(50) NOT NULL DEFAULT '' COMMENT '用户名', nickname varchar(50) NOT NULL DEFAULT '' COMMENT '昵称', status tinyint NOT NULL DEFAULT 1 COMMENT '状态 1正常 0禁用', sort_no int NOT NULL DEFAULT 0 COMMENT '排序号', is_deleted tinyint NOT NULL DEFAULT 0 COMMENT '是否删除', PRIMARY KEY (id), KEY idx_username (username) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户信息表';

再补充 3 个很多公司忽略但很重要的规范

1. 禁止使用保留关键字

例如:

order group desc

2. 禁止使用过长 varchar

推荐:

varchar(50) varchar(100) varchar(255)

避免:

varchar(2000)

3. 表字段数量

建议:

<= 30 个

太多说明:

  • 表设计不合理

  • 应拆表

http://www.jsqmd.com/news/470762/

相关文章:

  • 湿式溢流型球磨机
  • 2026年北京实力强的旅游服务公司排名,哪家性价比高? - 工业品牌热点
  • 无界动力与生数科技达成战略合作,将在算法、数据与系统方面深度融合
  • 下垂控制的基本实现
  • 零基础从0到1学GEO优化第5课:怎么优化内容,让生成式引擎收录?
  • Windows安装Rust环境(详细教程)
  • 鸿蒙架构师修炼之道-架构师核心思维方式
  • 通过COMSOL建立的光学模型:探索魔角光子晶体激光器的能带、模式和参数化几何建模,揭示激光器...
  • 工业互联网环境下多租户多组织跨平台WMS系统源码:基于Vue2.6与.NetCore3.1的前...
  • 【IEEE出版 | EI检索】第三届数字图像处理与计算机应用国际学术会议(DIPCA 2026)
  • 2026最新!10个AI论文网站测评:MBA毕业论文写作必备工具推荐
  • AI写论文省心之选!4款AI论文生成工具,轻松应对各类论文!
  • 电商补税新规落地:电商企业合规应对要点深度解析
  • ArchivePasswordTestTool:压缩包密码恢复的开源解决方案
  • 洛雪音乐六音音源修复完全指南:从故障排查到优化播放
  • Bili2text:让视频转文字效率提升300%的智能工具 | 内容创作者必备
  • 磷酸化蛋白WB没结果?看完这篇文章再说
  • 3个核心功能:制造业的STL到STEP格式无缝转换解决方案
  • 掌握视频效率工具:提升学习与工作效率的3个秘诀
  • 网络工程师的龙虾革命,OpenClaw如何让你拥有AI网络工程师同事?
  • ThinkPad散热管理新方案:TPFanCtrl2实现智能温控
  • 3步掌握MediaMux:高效全能的视频处理方案
  • 上海北京深圳万国沛纳海宇舶维修指南 高端腕表故障解析与正规网点汇总 - 时光修表匠
  • Perseus原生库工具技术指南:稳定解锁游戏资源的解决方案
  • 毕设程序java菜鸟驿站管理系统 校园智慧物流驿站服务平台 高校快递收发智能调度系统
  • Locale Emulator在Windows 11 24H2/LTSC 2024环境下的兼容性挑战与应对策略
  • Tiktokenizer:精准掌控OpenAI令牌计算的必备工具
  • 龙虾安装报错:npm error code EIDLETIMEOUTnpm error Idle timeout reached for host `registry.npmjs.org:443`
  • Windows11使用VMware Workstation Pro 安装macOS Sonoma 14.4系统
  • AI 编程零基础教程(合集)大纲