AI时代代码开发(数据库设计)

简介: 本文介绍基于三范式与DDD的数据库设计流程,结合AI工具辅助分析页面原型,通过部门、员工及工作经历模块,演示表结构设计与优化过程,强调人工校验与调整的重要性,最终完成符合业务需求的数据库建模与测试数据构建。

设计流程分析
一个标准的数据库设计,我们最基本的就是遵循:三范式设计原则,再高阶一点就是:DDD领域建模

而对于这种系统,传统开发模式下,我们整体的设计流程大概遵循下述流程

但现在借助于AI辅助开发工具,我们就可以用一些工具帮助我们设计。注意:AI生成的不一定准确,所以每一步我们都要检查、确认、调整、优化。最终改造成服务我们业务诉求的设计流程。

系统信息管理设计
页面原型分析

看起来部门管理就比较简单,单表的增删改查,核心字段就是:id、部门名称、最后操作时间。

而在员工管理中,核心字段比较容易看出来。另外可以看到:员工--隶属于-->某一个部门,一个部门对应多名员工,所以存在一个:1:N的关联关系。
当点击新增员工的时候,核心字段也简单,但是其中的工作经历,跟员工又是一个:1:N的关联关系

其余具体增删改查的页面开发规则,建议大家详见页面原型即可:

AI辅助设计
AI设计工具是支持图片上传的,我们已经提前在提供的资料中帮大家准备好了:

部门管理表分析
在:https://www.wenxiaobai.com/chat/ 中登录后,上传图片,并追加提示文本

输入类似的提示文本,然后等待DeepSeek响应即可
请根据提供的页面原型和需求说明,帮我分析一下部门管理涉及到几张表,具体是什么表,只需要给出涉及到几张表即可,不需要具体的字段及建表语句。(请严格根据页面原型和需求分档分析)

可以看到DS给到的提示结果是:只需要一张部门信息表即可

作为用户,我们可以结合页面原型去做一次确认,发现他的分析是合理的。
员工管理表分析
同理,我们删掉原来的部门管理,重新上传‘员工管理’,并给出提示词进一步分析
请根据提供的页面原型和需求说明,帮我分析一下员工管理涉及到几张表,具体是什么表,只需要给出涉及到几张表即可,不需要具体的字段及建表语句。(请严格根据页面原型和需求分档分析)

耐心等待后,可以看到DS的分析结果【建议看一下深度思考的过程】

作为专业的程序员,我们结合页面原型进一步分析,发现他的结论是完全不合理的:
● 没考虑到部门:员工的1:N关系
● 没考虑员工的:工作经历信息
所以我们需要进一步提示DS,完成对应模块的优化设计
你的分析没有说明部门跟员工的对照关系怎么存储,也没有员工中多段工作经历的存储,请继续帮我分析,完成表设计的优化。具体是什么表,只需要给出涉及到几张表即可,不需要具体的字段及建表语句。(请严格根据页面原型和需求分档分析)
此时AI提示的就比较完备了,大概如下:

只不过这里的部分表,你可以要也可以不要,因为它本身就是一个常量。比如你就可以进一步提示
上面的职位表不需要,其余的保留

进一步分析表跟表之间的关系,输入提示词
以上4张表,帮我分析一下表跟表之间的一对一、一对多关系
此时你甚至会发现,AI是会自我优化的,以下为DS自己做的回复
根据页面原型及需求文档的逻辑,结合四张表的功能定位,表间关系分析如下:
表间关系说明

  1. 员工表 ↔ 部门表
    ○ 一对多关系(1:N)
    ○ 逻辑:一个部门可包含多个员工,一个员工仅归属一个部门(根据原型中“所属部门”字段为单选操作)。
    ○ 实现方式:员工表中通过 部门ID 外键关联部门表的主键。
  2. 员工表 ↔ 工作经历表
    ○ 一对多关系(1:N)
    ○ 逻辑:一个员工可有多段工作经历(原型中“工作简历”字段需要支持多段记录)。
    ○ 实现方式:工作经历表中通过 员工ID 外键关联员工表的主键。
  3. 员工表 ↔ 员工-部门关系表
    ○ 冗余设计(需优化)
    ○ 问题:若员工表中已通过 部门ID 外键直接关联部门表,则员工-部门关系表无需存在。此表仅在支持员工归属多个部门(多对多)时需保留,但原型中“所属部门”为单选,表明 无需多对多关系。
    最终优化方案(3张表)
  4. 员工表(含 部门ID 外键)
  5. 部门表
  6. 工作经历表
    关系总结
    ● 部门表 → 员工表:1:N
    ● 员工表 → 工作经历表:1:N
    关键依据
  7. 原型中“所属部门”为单选字段(非多选),直接指向单一部门。
  8. 需求文档未提及员工跨部门归属逻辑,无需多对多关系表。
  9. 界面中“工作简历”明确需要多段记录,需独立表支持。
    此方案精简表结构,完全匹配页面原型和需求描述的操作逻辑
    部门管理表生成
    重新上传部门管理的图片,编写提示语,我们开始生成对应的DDL语句
    那接下来请根据提供的部门管理的页面原型和需求文档,帮我设计一下部门表的表结构,注意: 目前只考虑部门表,请参照提供的需求说明,为部门表的每个字段设置合适的字段类型和约束(严格根据页面原型和需求文档设计)。最终给出mysql数据库的建表语句.

最终DS生成的建表语句如下,

那么到底对不对呢,我们进一步参考页面原型去做对照

此时你会发现,并不一定100%准确,所以上述的数据库表字段你要微调一下字符长度,加一下创建时间,最终优化如下(这里更多是是想教会大家微调的方法,不是必须叫什么、长度多少):
部门表的建表语句,需要做以下调整
1.表名改为:dept
2.department_name 字段名改为 name,字符长度应该是10
3.last_operation_time 字段名改为 update_time
4.新增一个字段 create_time,记录创建时间
其他信息不变,给出调整好的建表语句
最终优化版本生成的SQL如下
CREATE TABLE dept (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '部门ID(唯一标识,自增主键)',
name VARCHAR(10) NOT NULL UNIQUE COMMENT '部门名称',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后操作时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门信息表';
光有表也不够,我们可以让AI帮我们生成一些铺底数据,提示语这里忽略,最终效果如下:
-- 部门表测试数据(真实场景模拟)
INSERT INTO dept (name) VALUES
('学工部'), ('教研部'), ('就业部'), ('教务部'), ('产品部'),
('研发中心'), ('质量保障部'), ('市场拓展部'), ('客户成功部'),
('人力资源部'), ('财务审计部'), ('法务合规部'), ('行政后勤部'),
('品牌运营部'), ('战略投资部');
员工管理表生成
同理,上传员工表,输入类似的提示语,最终生成的表结构如下:
CREATE TABLE emp (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '员工ID',
username VARCHAR(20) NOT NULL UNIQUE COMMENT '用户名(2-20位)',
password VARCHAR(64) DEFAULT '123456' COMMENT '登录密码',
name VARCHAR(10) NOT NULL COMMENT '姓名(2-10位)',
gender TINYINT COMMENT '性别, 1: 男, 2: 女',
phone CHAR(11) NOT NULL UNIQUE COMMENT '手机号(11位)',
position TINYINT COMMENT '职位, 1: 班主任, 2: 讲师, 3: 学工主管, 4: 教研主管, 5: 咨询师',
salary INT COMMENT '薪资(整数存储)',
image VARCHAR(255) COMMENT '头像路径',
hire_date DATE COMMENT '入职日期',
dept_id INT COMMENT '所属部门ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后操作时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工信息表';
测试数据如下:
-- 员工表测试数据(符合原型展示特征)
INSERT INTO emp (username, name, gender, phone, position, salary, dept_id, hire_date) VALUES
('zhaomin', '赵敏', 2, '13810102001', 1, 4800, 1, '2020-03-15'),
('yangxiao', '杨逍', 1, '13921213002', 2, 6500, 2, '2019-07-22'),
('weiyixiao', '韦一笑', 1, '13632324003', 3, 8200, 3, '2021-11-01'),
('zhangwuji', '张无忌', 1, '15043435004', 4, 9500, 4, '2022-02-14'),
('zhouzhiruo', '周芷若', 2, '15156567005', 5, 7800, 5, '2020-08-30'),
('xiaozhao', '小昭', 2, '15267678006', 1, 5200, 6, '2023-01-05'),
('yinliting', '殷梨亭', 1, '15378789007', 2, 6800, 7, '2018-05-17'),
('songyuanqiao', '宋远桥', 1, '15489890008', 3, 8700, 8, '2017-09-10'),
('yulianzhou', '俞莲舟', 1, '15590901009', 4, 9900, 9, '2021-04-21'),
('daiyisi', '黛绮丝', 2, '15601011010', 5, 7300, 10, '2019-12-08'),
('xiexun', '谢逊', 1, '15712122011', 1, 5500, 11, '2022-07-19'),
('yinyesu', '殷野王', 1, '15823233012', 2, 7100, 12, '2020-06-25'),
('yangdingtian', '阳顶天', 1, '15934344013', 3, 8900, 13, '2016-08-14'),
('fanyao', '范遥', 1, '15045455014', 4, 10200, 14, '2015-11-30'),
('jixiaofu', '纪晓芙', 2, '15156566015', 5, 7600, 15, '2023-03-07');
工作经历表生成
同理,如下:
CREATE TABLE emp_expr (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '经历ID',
emp_id INT COMMENT '关联员工ID',
company VARCHAR(50) COMMENT '公司名称',
position VARCHAR(50) COMMENT '担任职位',
start_date DATE COMMENT '开始日期',
end_date DATE COMMENT '结束日期'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工工作经历表';
测试数据如下:
-- 工作经历表测试数据(时间线逻辑验证)
INSERT INTO emp_expr (emp_id, company, position, start_date, end_date) VALUES
(1, '光明顶科技', '学员管理专员', '2018-04-01', '2020-02-28'),
(2, '武当山网络', '课程研发工程师', '2017-01-15', '2019-06-30'),
(3, '峨嵋云计算', '就业指导顾问', '2019-09-01', '2021-10-31'),
(4, '明教教育科技', '教务系统架构师', '2020-12-01', '2022-01-15'),
(5, '昆仑数据', '产品经理', '2018-11-01', '2020-07-31'),
(6, '波斯国际集团', '行政助理', '2021-03-01', '2022-12-31'),
(7, '少林科技学院', '质量保障专家', '2016-05-01', '2018-04-30'),
(8, '华山网络科技', '市场总监', '2015-02-01', '2017-08-31'),
(9, '崆峒人工智能', '客户成功经理', '2019-01-15', '2021-03-15'),
(10, '星宿派科技', 'HRBP', '2017-07-01', '2019-11-30'),
(11, '逍遥派金融', '财务分析师', '2020-09-01', '2022-05-31'),
(12, '丐帮物流科技', '法务顾问', '2018-03-01', '2020-04-30'),
(13, '古墓派科技', '品牌运营总监', '2014-06-01', '2016-07-31'),
(14, '全真教投资', '战略投资经理', '2013-08-01', '2015-10-31'),
(15, '桃花岛研究院', '教研主管', '2021-05-01', '2023-02-28');
创建数据库
访问Sealos,网址:https://sealos.run/,创建数据库。

因为目前还没有,所以我们点击新建:

选择mysql,注意选择版本、容器名称。然后右上角点击部署即可
● 这个名字,并不是数据库名称,可以理解为就是一个连接名
● 备份策略,我们不需要,直接关闭即可

刚创建完,还是不可以访问的

耐心等待之后,变成运行中,我们就可以查看链接信息

相关文章
|
2天前
|
存储 API 索引
队列/栈基本原理 ❗前置知识
本文介绍队列和栈两种“操作受限”的数据结构:队列遵循先进先出(FIFO),只能队尾入、队头出;栈遵循先进后出(FILO),仅在栈顶进行增删操作。二者底层多由数组或链表实现,核心API包括push、pop、peek和size,是后续复杂数据结构的基础。
|
2天前
|
Java 索引 容器
单/双链表代码实现
本文详解双链表与单链表的 MyLinkedList 实现,重点介绍三个关键优化:1)同时持有头尾节点引用,提升尾部操作效率;2)使用虚拟头尾节点简化边界处理;3)解析链表删除中的内存泄露误区,并强调指针置空的良好编程习惯。
|
1天前
|
存储 缓存 算法
学习数据结构和算法的框架思维
本文系统总结数据结构与算法本质:所有数据结构皆源于数组和链表,核心操作为遍历与访问;算法本质是穷举,关键在于无遗漏、无冗余。文章提炼出通用框架,帮助读者建立计算机思维,掌握高效解题方法,适合初学者建立全局观,也适合进阶者温故知新。
|
1天前
|
缓存 网络协议 算法
核心原理:能否画张图解释下 RPC 的通信流程?
RPC(远程过程调用)是一种实现分布式系统间通信的技术,它让调用远程服务像调用本地方法一样简单。本文深入浅出地讲解了RPC的定义、核心目标、通信流程及在微服务架构中的关键作用,帮助开发者理解其底层原理,掌握如何通过动态代理、序列化、协议设计等机制屏蔽网络复杂性,提升开发效率与系统可维护性。
|
2天前
|
Java API
用链表实现队列/栈
本文介绍如何用链表实现栈和队列,利用双链表头尾操作均为O(1)的特性,通过调用LinkedList API高效实现。栈可选头部或尾部作栈顶,队列同理,只需调整增删位置。文末引出数组实现队列的性能问题,启发优化思考。
|
1天前
|
消息中间件 Kubernetes 网络协议
别老想着怎么用好 RPC 框架,你得多花时间琢磨原理
2011年加入京东,亲历技术演进,现任技术架构部首席架构师。主导微服务、消息中间件等核心系统研发,深耕分布式架构。课程涵盖RPC基础、进阶与高级实战,带你掌握网络通信核心,构建高效可靠分布式系统。(238字)
|
1天前
|
算法 Java 索引
双指针技巧秒杀七道数组题目
本文介绍双指针技巧在数组和链表中的应用,重点解析快慢指针如何实现原地修改。通过LeetCode经典题如删除有序数组/链表重复项,展示如何用慢指针记录结果、快指针遍历数据,高效完成去重,时间复杂度O(N),避免频繁数据搬移。
|
1天前
|
算法
双指针技巧秒杀七道链表题目
本文总结单链表七大技巧:合并有序链表、链表分解、合并K个有序链表、找倒数第k个节点、找中点、判断环及起点、判断相交及交点,均基于双指针思想,涵盖LeetCode多道经典题目,助你系统掌握链表算法核心。
|
1天前
|
存储 Java Maven
服务端(DevBox)-项目创建
使用Sealos创建SpringBoot工程zxyf-management,配置Java语言、3.3.2版本,2核CPU、4G内存,通过Devbox在云端搭建开发环境。利用Cursor智能工具打开项目,自动识别Maven结构,一键启动运行,实现高效云端开发。
|
1天前
|
Java
多叉树的递归/层序遍历
多叉树是二叉树的扩展,节点可有多个子节点。遍历方式与二叉树类似,DFS无中序位置,BFS通过队列实现,支持按层遍历并记录深度,代码结构清晰,易于扩展。