尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
MySQL:库表设计完整规范与实战方案
库表设计的重要性一段程序的起点一、整体设计原则优先遵守1、范式适度基础遵循第三范式高频关联查询场景允许适当冗余避免过度范式导致大量 JOIN2、冷热分离大日志、历史归档数据单独分表 / 分库3、索引先行建表同时规划索引禁止后期随意新增大索引4、兼容扩展预留扩展字段禁止硬编码字段含义5、字符集统一推荐 utf8mb4支持 emoji排序规则utf8mb4_unicode_ci6、引擎统一业务表默认InnoDB事务、行锁、外键可选日志临时表可考虑 MyISAM极少场景。❌ 避坑不要使用utf8mysql utf8 ≠ utf8最多 3 字节不支持表情二、数据库Schema设计规范1. 库命名规范小写字母 下划线禁止大写、中文、特殊符号格式业务模块_db示例order_db、user_db、goods_db2. 库参数标准配置建库语句CREATE DATABASE IF NOT EXISTS user_db DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;3. 分库策略简单区分垂直分库按业务拆分用户库、订单库、商品库水平分库单库数据量过大同一张表拆分到多个库三、数据表设计规范1. 表名规范小写、下划线名词复数形式格式模块_表名示例user_info、order_main、order_item禁止UserInfo、userInfo、用户表2. 必备标准字段所有业务表建议统一带上字段名类型说明idbigint unsigned NOT NULL主键自增主键雪花 ID 可选分布式create_timedatetime NOT NULL DEFAULT CURRENT_TIMESTAMP创建时间update_timedatetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP更新时间自动刷新is_deletedtinyint NOT NULL DEFAULT 0逻辑删除0 正常1 删除禁止物理删除分布式系统不建议自增主键改用BIGINT 雪花算法 ID3. 字段类型选型最佳实践数字类型主键 IDbigint unsigned不要 int数据量容易溢出状态标识tinyint0/1/2/3不要 char/varchar 存状态金额DECIMAL(m,n)严禁 float/double浮点精度丢失 例decimal(12,2)最多千万级金额保留 2 位小数普通数量int超大数量用bigint字符串类型短标识、编码varchar(32) / varchar(64)名称、标题varchar(255)超长文本、备注text尽量少用无法建立普通索引varchar 长度够用即可不要统一全部 255时间类型时间点datetime推荐可读性强不受时区影响仅日期date仅时分秒time不推荐使用 timestamp时区限制、2038 上限布尔逻辑不用 bool统一tinyint(1)0 否1 是4. 字段命名规范小写下划线见名知意user_name、phone、order_amount状态统一后缀_statusorder_status、pay_status数量统一后缀_numbuy_num5. 约束规范1、主键 PRIMARY KEY单一主键优先id尽量避免联合主键2、唯一索引 UNIQUE手机号、用户名、订单号等唯一字段3、NOT NULL 优先能不为 NULL 尽量 NOT NULL设置默认值NULL 查询会带来额外开销4、谨慎使用外键 InnoDB 支持外键但高并发业务不推荐由应用程序保证数据一致性四、索引设计规范重中之重1. 索引分类主键索引PRIMARY KEY(id)普通索引单字段 / 联合索引唯一索引UNIQUE KEY uk_phone(phone)前缀索引超长字符串使用如 url2. 联合索引最左匹配原则建立idx_name_status(user_name, order_status)✅ 可以命中where user_name?/where user_name? and order_status?❌ 无法命中where order_status?3. 索引避坑清单1、不要在低基数字段单独建索引如性别、is_deleted2、索引字段禁止函数操作where DATE(create_time)xxx→ 失效3、不要超量建索引写入insert/update/delete会同步维护索引4、字符串匹配禁止左模糊like %xxx索引失效like xxx%可行五、完整建表示例用户主表 user_infoCREATE TABLE user_info ( id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 主键ID, user_name varchar(64) NOT NULL COMMENT 用户名, phone varchar(32) NOT NULL COMMENT 手机号, password varchar(128) NOT NULL COMMENT 加密密码, user_status tinyint NOT NULL DEFAULT 1 COMMENT 用户状态 0禁用 1正常, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间, is_deleted tinyint NOT NULL DEFAULT 0 COMMENT 逻辑删除 0未删 1已删, PRIMARY KEY (id), UNIQUE KEY uk_phone (phone), KEY idx_user_status (user_status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci COMMENT用户信息表;订单主表 order_mainCREATE TABLE order_main ( id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 订单主键, order_no varchar(64) NOT NULL COMMENT 订单编号, user_id bigint unsigned NOT NULL COMMENT 用户id, order_amount decimal(12,2) NOT NULL DEFAULT 0.00 COMMENT 订单金额, order_status tinyint NOT NULL DEFAULT 0 COMMENT 订单状态, pay_status tinyint NOT NULL DEFAULT 0 COMMENT 支付状态, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, is_deleted tinyint NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY uk_order_no (order_no), KEY idx_userid_status (user_id,order_status) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci COMMENT订单主表;订单明细表 order_item一对多拆分规范主表存订单整体信息明细表存储多条商品禁止用逗号拼接商品 ID 存在一个字段CREATE TABLE order_item ( id bigint unsigned NOT NULL AUTO_INCREMENT, order_id bigint unsigned NOT NULL COMMENT 订单主表id, goods_id bigint unsigned NOT NULL COMMENT 商品id, goods_name varchar(255) NOT NULL COMMENT 商品名称快照, price decimal(12,2) NOT NULL COMMENT 下单单价, buy_num int NOT NULL DEFAULT 1 COMMENT 购买数量, create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, is_deleted tinyint NOT NULL DEFAULT 0, PRIMARY KEY (id), KEY idx_order_id (order_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci COMMENT订单明细表;六、常用设计最佳实践1、一对多关系用户 1 → 订单 N订单表保存 user_id2、多对多关系用户 - 角色新建中间表user_role_rel存储 user_id、role_id联合唯一索引3、字典 / 常量状态含义不要写死在 SQL 注释建议建立字典表sys_dict代码读取4、大文本文章正文、富文本单独一张表避免主表查询加载大字段5、分页查询尽量基于有序索引字段分页避免limit 1000000,10深度分页七、开发规范红线禁止操作1、❌ 表、字段使用中文2、❌ 使用TEXT/BLOB建立普通索引3、❌ 使用 float/double 存储金额4、❌ 大量使用 NULL不设置默认值5、❌ 业务数据物理 DELETE6、❌ 一条字段存储多条数据逗号分隔 id7、❌ 随意创建联合索引不遵守最左前缀8、❌ 在线业务直接执行ALTER TABLE锁表操作。八、延伸方案数据量大水平分表按 user_id 哈希、时间范围分表读写压力高主从分离读走从库海量日志时序表、按月分区表PARTITION BY RANGE
RELATED

相关推荐

linux磁盘空间被占满但是找不到大文件

linux磁盘空间被占满但是找不到大文件

磁盘满了之后,会影响一些功能使用,使用df -h 发现磁盘空间满了, 但是任凭各个文件目录下du -sh * 也找不到大文件 解决方式: 查看到以删除的占用的进程 lsof -n | grep deleted kill -9 进程号 删除该进程 批量删除: l…

📅 2026/10/24 2:05:46
分布式文件系统元数据与数据分离设计及性能优化实践

分布式文件系统元数据与数据分离设计及性能优化实践

简介:这份资源围绕分布式文件系统展开,以FastDHT分布式哈希表为具体实现载体,面向正在学习大数据存储架构、需要理解DFS底层机制的中高级开发者与运维人员,帮助其从源码层面认识数据分片、元数据管理与节点协同的工作原理。压缩包…

📅 2026/10/24 2:05:46
注意及流程

注意及流程

开始新开终端可以检查:echo $OMP_NUM_THREADSexport OMP_NUM_THREADS16 export MKL_NUM_THREADS16 echo $OMP_NUM_THREADS echo $MKL_NUM_THREADSexport HF_ENDPOINThttps://hf-mirror.com跑黑白盒aab.py调用过aa_test脚本对抗样本保存在同一个目录里面,…

📅 2026/10/24 2:00:46
MORE NEWS

更多资讯

📰

基于PCA降维与BP神经网络的交通流量预测MATLAB项目实例

交通流量预测这几年在智能交通、城市大脑、信号灯优化这些场景里特别火,但实际做起来有个很现实的问题:采集到的特征维度实在太多了。不同车道的车流量、平均车速、时间占有率、天气、时段、上下游拥堵指数,十几个甚至几十个特征堆在一起&…

📰

金融科技Java初级岗笔试复盘:集合并发、SQL优化与Spring核心考点

上周A同学发来一套某金融科技公司初级Java开发岗的在线笔试,说自己答得稀碎,想让我帮忙复盘。我拿过来扫了一遍,发现这套题出得挺有水平:表面看全是常规八股,实际每一道都在往工程坑和金融系统最关心的稳定性和并发问题…

📰

金融科技初级Java笔试全复盘:题型考点与编程题实战拆解

最近在牛客上刷题,好几次碰到有人问“某金融科技公司初级Java笔试题”的通勤回忆帖。这类帖子往往回复寥寥,偶尔有人在下面贴一道选择题答案,没头没尾。我自己也经历过这种笔试,深知真正需要的不只是一份题目清单,而是…

📰

专科生AI论文工具实测:千笔与学术猹如何解决写作痛点

又到了论文季,我手机里被问得最多的一句话是:“有没有适合专科生用的AI论文工具?”问的人多了,我就把市面上叫得出名字的几个挨个试了一遍,其中对比最久的是千笔专业学术智能体和学术猹。这两款工具定位不一样&#xf…

📰

电力用户用电信息采集通信协议集合与测试工具实战指南

简介:面向电力行业技术人员与智能电网开发者的通信协议资料包,聚焦用电信息采集系统中376.1、376.2、376.3、645与698等主流规约的理解与验证。内容既包含协议文档与说明,也配套集中器下行本地接口调试、645标准测试、698解析等国网电表测试软…

📰

8个AI论文网站实测:是智商税还是论文写作加速器?

离答辩还有十几天的时候,我看到同宿舍三个人都在用不同的“AI论文网站”赶论文,最激进的那个直接输入题目生成整篇初稿,交到指导老师那边之后,被批注写了整整八页。这件事让我想认真写一篇工具测评:这8个AI论文网站到底…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬