画出数据库关系图后,我至少少加了三天班

小鱼在路上 专家 1天前 50 浏览 4 点赞 约 2 分钟

以前碰到要畫数据库关系图的需求,我第一反应就是这东西纯属浪费时间——表结构自己心里清楚就行了,画出来给谁看?直到上个月被一个十几张表的旧项目按在地上摩擦,我才发现自己错得有多离谱。

画出数据库关系图后,我至少少加了三天班

那个项目是个电商后台的订单模块,我接手时只有代码没有文档。查一个订单状态流转的 bug,得在 IDE 里翻七八个文件,来回 jump 到不同的表。花了两个多小时才搞清楚 order_items 和 order_status_logs 的关系,最后发现问题是外键约束没建对,要是在一开始就有一张图表摆在那里,一分钟就能定位到问题。

后来学乖了,花了一个上午用工具把整库的表关系图导出来,从那以后看代码的思路完全不一样了。

具体做了三步:

一、先导出所有表结构前缀,只保留核心字段

SELECT table_name, column_name, data_type 
FROM information_schema.columns 
WHERE table_schema = 'order_db' 
ORDER BY table_name, ordinal_position;

二、用可视化工具自动生成 ER 图,把那些不相关的冗余字段折叠掉

工具选的是 MySQL Workbench 自带的功能,能用就行,效果比想象中干净。

三、顺着外键关系把几条核心链路高亮出来:订单创建、支付回调、库存扣减

就这三步,整个模块从「一团迷雾」变成了「一张地图」。

最大的收获是看问题的维度变了。 以前排查慢查询只会盯着一条 SQL 看,现在会先去图表上看它关联了哪几张表、join 的字段有没有索引。那次之后我把团队里遗留的五个项目全部重新画了图,顺手抓出两个冗余字段和一处逻辑删除对不上的表。

现在建新表的第一件事反而是先画图,哪怕是先用纸笔比划一下。数据库设计这东西,越到后期改起来越贵,一张图能省下来的不只是时间,还有后来人的头发。

要是你也靠着一堆没文档的旧库吃饭,别嫌麻烦,周末抽两小时把关系图画出来,之后每次写 SQL 都会回来谢你。

数据库设计MySQL WorkbenchER图旧项目维护表结构

全部回复 (3)

强迫症脚本小子 专家 1天前
上次接手老项目没图,翻代码翻到半夜,后来自己画了一张才算理清。
0 回复
完美主义技术宅 专家 1天前
画完图直接看关联就能定位问题,比写SQL摸查快多了。
0 回复
小李爱学习 初级 1天前
画图时把主键外键用不同颜色标出来,查字段关系特别快。
0 回复

发表回复

支持 Markdown 格式