跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

提升整体协作效率的关键:怎么共享数据库架构ER模型_规范制定

dbdiagram.io 可通过 SQL DDL 或直连数据库快速生成带主外键、关系线和字段说明的 ER 图,支持 PNG/SVG/SQL 导出;需确保 DDL 中约束完整或数据库权限开放,SVG 嵌入时中文建议改用 PNG。 怎么用
dbdiagram.io
快速导出可协作的 ER 图 直接把数据库结构变成带关系线、字段说明、主外键标注的图,是团队对齐最省力的方式。
dbdiagram.io
不需要装客户端,支持从 sql ddl(比如
create table
语句)或主流数据库直连生成,导出 png/svg/sql 多种格式。 实操建议: 粘贴 DDL 时,确保每张表的
PRIMARY KEY
和
FOREIGN KEY
定义完整,否则关系线会缺失 如果用 PostgreSQL/MySQL 直连,需开启
pg_stat_statements
或配置
information_schema
查询权限,否则部分视图和约束不显示 导出 SVG 后可直接嵌入 Confluence 或 Notion,但注意字体渲染:本地没装对应字体时,中文可能变方块——改用 PNG 更稳妥 别依赖自动生成的“备注”字段:
COMMENT ON COLUMN
在 PostgreSQL 中需显式开启注释提取,MySQL 则默认忽略
COMMENT
属性 为什么
sqlfluff
+
eralchemy
比纯手工画图更可靠 靠人眼从几百行 SQL 里找外键、推导层级,容易漏掉隐式关联(比如用字符串匹配代替
JOIN
),而
eralchemy
能解析真实执行计划里的依赖链,
sqlfluff
则能提前拦截建表语句中违反规范的写法(如缺失
NOT NULL
约束、命名不统一)。 常见错误现象:
eralchemy
报错
AttributeError: 'NoneType' object has no attribute 'name'
:通常是某张表的
__table_args__
里混用了 SQLAlchemy 1.x 和 2.x 的语法
sqlfluff
对
ALTER TABLE ADD CONSTRAINT
识别率低:建议把约束定义全写进
CREATE TABLE
,避免拆分语句 生成的图里出现大量交叉线:不是工具问题,而是表之间存在多对多中间表未被正确定义为独立实体——得补上
CREATE TABLE order_product (...)
这类语句再重跑 团队共享时,ER 图文件怎么放才不会过期 放在 GitHub README 里截图?下次字段一改就失效。最简单的可持续方案,是把 ER 图生成逻辑固化进 CI 流程,每次
git push
后自动更新。 使用场景与参数差异: 用
eralchemy -i "postgresql://..." -o erd.png
时,连接串必须带
?sslmode=disable
(开发环境)或配置
.pgpass
(生产环境),否则 CI 会卡在密码输入 如果数据库有上百张表,加
--include-tables
参数限定范围,否则生成的图密密麻麻根本没法看 Confluence 插件
drawio
支持导入
.graphml
,但
eralchemy
默认不输出该格式——得加
-o erd.graphml -t graphml
别把生成命令写死在 Makefile 里:不同成员本地数据库端口/用户不同,应统一读取
.env
文件中的
DB_URL
DDL 脚本里哪些细节会让 ER 图“看起来对、实际错” 外键指向的字段类型不一致、字符集不同、甚至只是大小写拼写偏差(比如
user_id
vs
USER_ID
),都会导致工具判定“无关联”,但业务代码里照样能跑通——这种隐患最难排查。 性能与兼容性影响: MySQL 中
VARCHAR(255) CHARSET utf8mb4
和
VARCHAR(255) CHARSET utf8
被视为不同字段类型,
eralchemy
不会画连线 PostgreSQL 的域类型(
CREATE DOMAIN phone_number AS TEXT
)会被识别为
TEXT
,但外键引用该域时,工具可能无法回溯原始定义 SQL Server 的
IDENTITY
列若没配
SEED
和
INCREMENT
,某些解析器会跳过主键标记 所有工具都忽略触发器和存储过程里的隐式关联——这类逻辑必须单独文档化,不能指望 ER 图覆盖 真正难的不是画出来,是让图里每条线都经得起
SELECT
验证。字段名拼写、类型精度、字符集、约束可见性,这些地方差一点,协作时就得多开三次会来对齐。

相关文章