用AI生成后端数据库关系ER图:Mermaid语法

我使用mermaid做ER图
博主最近在做大的功能迭代,开发前期的准备工作就是写mermaid的数据库关系。用于可视化和文档化,方便开发写代码和协作开发。以前我都是人工写mermaid语法,然后渲染ER图,现在有了AI的加持,我基本上只需要描述清楚字段、关系、表名,然后AI就可以帮我100%的生成正确的ER图代码。AI对提升系分设计的效率和质量都增益十足!
Mermaid和ER是什么?
Mermaid:实体关系模型(或 ER 模型)描述特定知识字段中相关的感兴趣的事物。基本 ER 模型由实体类型(对感兴趣的事物进行分类)组成,并指定实体(这些实体类型的实例)之间可以存在的关系。实体关系图 | Mermaid 中文网
ER图: ER 图可用于各种目的,从没有任何实现细节的抽象逻辑模型到关系数据库表的物理模型。在 ER 图上包含属性定义有助于理解实体的目的和含义。
实体关系的主要语法
实体关系图 | Mermaid 中文网,语法细节很多,阅读官方中文文档,10分钟就能学会。
ER图的核心价值:
- 数据库变更时,修改Mermaid代码比重新画图快得多,代码化的图表可以和代码一起做版本控制
- 开发前梳理清楚表结构和关系,避免后期频繁改表
- 系分评审,讨论时有直观的视觉参考,更容易发现设计问题
注意:对于特别大型的数据库(几百张表),单个ER图会过于复杂,这时可能需要分模块画图,或者只画核心表的关系
演示使用AI绘制mermaid
分为2步:首先人工定义文字版本的数据库表关系和字段,然后用AI帮助我们绘制ER图
人为根据业务定义数据库表: 以用户体系表作为示例
1. 用户基础表(sys_user)
字段名 字段类型 字段含义 备注
user_id bigint(20) 用户唯一标识(主键) 自增
username varchar(50) 用户名(登录账号) 唯一、非空
password varchar(200) 密码(加密存储,如 BCrypt) 非空
nickname varchar(50) 用户昵称 可空
real_name varchar(50) 真实姓名 可空
gender tinyint(1) 性别(1 - 男,2 - 女,0 - 未知) 默认 0
phone varchar(20) 手机号码 唯一、可空
email varchar(100) 电子邮箱 唯一、可空
avatar varchar(255) 头像 URL 可空
status tinyint(1) 账号状态(0 - 禁用,1 - 正常) 默认 1
del_flag tinyint(1) 删除标记(0 - 未删除,1 - 已删除) 默认 0、逻辑删除
dept_id bigint(20) 所属部门 ID(关联 sys_dept 表) 可空
create_time datetime 创建时间 非空
update_time datetime 更新时间 可空
create_by bigint(20) 创建人 ID(关联 sys_user 表自身) 可空
update_by bigint(20) 更新人 ID(关联 sys_user 表自身) 可空
2. 部门表(sys_dept)
字段名 字段类型 字段含义 备注
dept_id bigint(20) 部门唯一标识(主键) 自增
dept_name varchar(50) 部门名称 非空、唯一
parent_id bigint(20) 上级部门 ID(关联 sys_dept 表自身,顶级部门为 0) 非空
sort int(11) 排序序号 默认 0
status tinyint(1) 部门状态(0 - 禁用,1 - 正常) 默认 1
del_flag tinyint(1) 删除标记(0 - 未删除,1 - 已删除) 默认 0
create_time datetime 创建时间 非空
update_time datetime 更新时间 可空
3. 角色表(sys_role)
字段名 字段类型 字段含义 备注
role_id bigint(20) 角色唯一标识(主键) 自增
role_name varchar(50) 角色名称(如:超级管理员、普通用户) 非空、唯一
role_code varchar(50) 角色编码(如:admin、user) 非空、唯一
description varchar(255) 角色描述 可空
status tinyint(1) 角色状态(0 - 禁用,1 - 正常) 默认 1
del_flag tinyint(1) 删除标记(0 - 未删除,1 - 已删除) 默认 0
create_time datetime 创建时间 非空
update_time datetime 更新时间 可空
4. 权限表(sys_permission)
字段名 字段类型 字段含义 备注
perm_id bigint(20) 权限唯一标识(主键) 自增
perm_name varchar(50) 权限名称(如:用户查询、角色新增) 非空
perm_code varchar(100) 权限编码(如:sys:user:list、sys:role:add) 非空、唯一
perm_type tinyint(1) 权限类型(1 - 菜单,2 - 按钮,3 - 接口) 非空
parent_id bigint(20) 上级权限 ID(关联 sys_permission 表自身,顶级权限为 0) 非空
path varchar(255) 菜单路径(仅菜单类型权限有效) 可空
component varchar(255) 前端组件路径(仅菜单类型权限有效) 可空
icon varchar(50) 菜单图标(仅菜单类型权限有效) 可空
sort int(11) 排序序号 默认 0
status tinyint(1) 权限状态(0 - 禁用,1 - 正常) 默认 1
del_flag tinyint(1) 删除标记(0 - 未删除,1 - 已删除) 默认 0
create_time datetime 创建时间 非空
update_time datetime 更新时间 可空
5. 用户 - 角色关联表(sys_user_role)
字段名 字段类型 字段含义 备注
id bigint(20) 关联记录 ID(主键) 自增
user_id bigint(20) 用户 ID(关联 sys_user 表) 非空
role_id bigint(20) 角色 ID(关联 sys_role 表) 非空
create_time datetime 创建时间 非空
6. 角色 - 权限关联表(sys_role_permission)
字段名 字段类型 字段含义 备注
id bigint(20) 关联记录 ID(主键) 自增
role_id bigint(20) 角色 ID(关联 sys_role 表) 非空
perm_id bigint(20) 权限 ID(关联 sys_permission 表) 非空
create_time datetime 创建时间 非空
7. 用户登录日志表(sys_user_login_log)
字段名 字段类型 字段含义 备注
log_id bigint(20) 日志 ID(主键) 自增
user_id bigint(20) 用户 ID(关联 sys_user 表) 可空(匿名登录为 null)
username varchar(50) 登录用户名 非空
ip_addr varchar(50) 登录 IP 地址 非空
login_location varchar(100) 登录地点(IP 解析) 可空
browser varchar(50) 浏览器类型 可空
os varchar(50) 操作系统 可空
login_time datetime 登录时间 非空
login_status tinyint(1) 登录状态(0 - 失败,1 - 成功) 非空
error_msg varchar(255) 错误信息(登录失败时填写) 可空
让AI帮我们自动生成ER图
AI就会自动帮我们生成mermaid代码,之后我们只需要结合实际业务微调即可。
erDiagram
sys_user ||--o{ sys_user_role : "拥有"
sys_user }o--|| sys_dept : "所属"
sys_user ||--o{ sys_user_login_log : "产生"
sys_role ||--o{ sys_user_role : "分配给"
sys_role ||--o{ sys_role_permission : "拥有"
sys_permission ||--o{ sys_role_permission : "分配给"
sys_dept ||--o{ sys_dept : "上级部门"
sys_permission ||--o{ sys_permission : "上级权限"
sys_user {
bigint user_id PK "用户ID"
varchar username UK "用户名"
varchar password "密码"
varchar nickname "昵称"
varchar real_name "真实姓名"
tinyint gender "性别"
varchar phone UK "手机号"
varchar email UK "邮箱"
varchar avatar "头像URL"
tinyint status "状态"
tinyint del_flag "删除标记"
bigint dept_id FK "部门ID"
datetime create_time "创建时间"
datetime update_time "更新时间"
bigint create_by "创建人ID"
bigint update_by "更新人ID"
}
sys_dept {
bigint dept_id PK "部门ID"
varchar dept_name UK "部门名称"
bigint parent_id FK "上级部门ID"
int sort "排序"
tinyint status "状态"
tinyint del_flag "删除标记"
datetime create_time "创建时间"
datetime update_time "更新时间"
}
sys_role {
bigint role_id PK "角色ID"
varchar role_name UK "角色名称"
varchar role_code UK "角色编码"
varchar description "角色描述"
tinyint status "状态"
tinyint del_flag "删除标记"
datetime create_time "创建时间"
datetime update_time "更新时间"
}
sys_permission {
bigint perm_id PK "权限ID"
varchar perm_name "权限名称"
varchar perm_code UK "权限编码"
tinyint perm_type "权限类型"
bigint parent_id FK "上级权限ID"
varchar path "菜单路径"
varchar component "组件路径"
varchar icon "图标"
int sort "排序"
tinyint status "状态"
tinyint del_flag "删除标记"
datetime create_time "创建时间"
datetime update_time "更新时间"
}
sys_user_role {
bigint id PK "关联ID"
bigint user_id FK "用户ID"
bigint role_id FK "角色ID"
datetime create_time "创建时间"
}
sys_role_permission {
bigint id PK "关联ID"
bigint role_id FK "角色ID"
bigint perm_id FK "权限ID"
datetime create_time "创建时间"
}
sys_user_login_log {
bigint log_id PK "日志ID"
bigint user_id FK "用户ID"
varchar username "用户名"
varchar ip_addr "IP地址"
varchar login_location "登录地点"
varchar browser "浏览器"
varchar os "操作系统"
datetime login_time "登录时间"
tinyint login_status "登录状态"
varchar error_msg "错误信息"
}
谢谢关注收藏
⏰ 刚刷到的朋友注意啦! 点击【关注】锁定宝藏库,从此升职加薪不迷路 ✨
轻量云主机限时优惠
RackNerd
☁ 主机显示特惠:只要80元(3TB流量,1vcpu,50GB硬盘),且多区域IDC机房。 购买地址:https://my.racknerd.com/aff.php?aff=14942

CloudCone
CloudCone 特惠轻量云主机:购买地址:https://app.cloudcone.com/?ref=12332

📢 腾讯云资源限时福利
有云服务器、CDN、对象存储、网络防护等需求的朋友,欢迎联系下方腾讯云官方销售 👇 ✔️ 内部专属折扣,价格更优:

评论区