前言

在现代软件开发中,实体关系图(E-R图)和流程图是不可或缺的工具。它们帮助开发者理解系统结构和流程。然而,手动绘制这些图表既耗时又容易出错。本文将探讨如何利用AI工具DeepSeek,通过生成标准化的Mermaid语法代码,再结合可视化工具(如Draw.io或Mermaid Live Editor)实现E-R图的自动生成。

原理概述

DeepSeek本身无法直接生成图像,但它能够将用户的自然语言描述转化为计算机可执行的图表代码。这些代码使用标准化的Mermaid语法,可以被专业的可视化工具渲染成图表。可以将这种协作模式比作"AI翻译官"。用户描述需求,DeepSeek生成代码,工具渲染图像。

技术优势对比

  • Mermaid原生支持:Mermaid可以直接生成基础的E-R图,但其布局算法较为简单,可能不满足复杂需求。
  • Draw.io二次加工:Draw.io提供了更强大的排版调整功能,能够解决连线交叉等问题,使图表更加美观和易于理解。

操作流程(以E-R图导入Draw.io为例)

1. 提示词设计

在生成E-R图之前,需要设计提示词,这里题主尝试过很多版提示词,下面这个效果最好:

【角色】
你是一名专业的数据库架构师,擅长通过可视化图表描述实体关系。你的任务是根据用户需求生成标准化的 ER 图代码,确保逻辑清晰、语法无误,并能直接导入Draw.io。

【要求】

输入:用户提供实体、属性、关系等关键信息(若无,可主动询问补充)。
输出:
- 使用Mermaid或PlantUML语法(需指定)。
- 自动调整数据类型以符合所选语法的限制(例如,将decimal调整为float,将enum调整为string等)。
- 添加注释说明复杂逻辑和约束条件。
- 提供完全正确的Mermaid代码,确保代码能够直接导入Draw.io。
【输入】
下面是我的表结构,请你根据表结构及描述生成E-R图

-- 1. 用户表(主表)
CREATE TABLE `user` (
  `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `email` varchar(100) NOT NULL COMMENT '邮箱',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `idx_email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户基本信息';

-- 2. 订单表(1对多:1个用户可有多笔订单)
CREATE TABLE `order` (
  `order_id` int NOT NULL AUTO_INCREMENT COMMENT '订单ID',
  `user_id` int NOT NULL COMMENT '关联用户ID',
  `amount` decimal(10,2) NOT NULL COMMENT '订单金额',
  `status` enum('pending','paid','shipped') DEFAULT 'pending' COMMENT '订单状态',
  `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`order_id`),
  KEY `idx_user_id` (`user_id`),
  CONSTRAINT `fk_order_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户订单表';

-- 3. 商品表(独立表)
CREATE TABLE `product` (
  `product_id` int NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  `name` varchar(100) NOT NULL COMMENT '商品名称',
  `price` decimal(10,2) NOT NULL COMMENT '商品价格',
  `stock` int NOT NULL DEFAULT 0 COMMENT '库存',
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';

-- 4. 订单明细表(多对多:1个订单可含多个商品,1个商品可属于多个订单)
CREATE TABLE `order_item` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '明细ID',
  `order_id` int NOT NULL COMMENT '关联订单ID',
  `product_id` int NOT NULL COMMENT '关联商品ID',
  `quantity` int NOT NULL COMMENT '购买数量',
  `price` decimal(10,2) NOT NULL COMMENT '成交单价',
  PRIMARY KEY (`id`),
  KEY `idx_order_id` (`order_id`),
  KEY `idx_product_id` (`product_id`),
  CONSTRAINT `fk_item_order` FOREIGN KEY (`order_id`) REFERENCES `order` (`order_id`),
  CONSTRAINT `fk_item_product` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单商品明细表';

-- 5. 用户地址表(111个用户只有1个默认地址)
CREATE TABLE `user_address` (
  `address_id` int NOT NULL AUTO_INCREMENT COMMENT '地址ID',
  `user_id` int NOT NULL COMMENT '关联用户ID',
  `province` varchar(20) NOT NULL COMMENT '省份',
  `city` varchar(20) NOT NULL COMMENT '城市',
  `detail` varchar(200) NOT NULL COMMENT '详细地址',
  `is_default` tinyint(1) DEFAULT 0 COMMENT '是否默认地址',
  PRIMARY KEY (`address_id`),
  UNIQUE KEY `idx_user_default` (`user_id`, `is_default`),
  CONSTRAINT `fk_address_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户地址表';

说明:附带的表结构DDL是演示demo,后续可以换成自己的DDL,无需阐述对应关系,Deepseek能够自行识别

2. 生成Mermaid代码

发送给Deepseek后会根据DDL生成mermind

3. 导入draw.io并微调

选择加号添加,高级,mermind,粘贴第二步得到的mermind代码
在这里插入图片描述

4. 微调

由于mermind无法精确的完成定位的问题,生成的E-R图可能会出现连接线重合,属性框宽度不一致的问题,可以在draw.io中选中属性框批量处理
在这里插入图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐