设计流程分析
一个标准的数据库设计,我们最基本的就是遵循:三范式设计原则,再高阶一点就是: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:N)
○ 逻辑:一个部门可包含多个员工,一个员工仅归属一个部门(根据原型中“所属部门”字段为单选操作)。
○ 实现方式:员工表中通过 部门ID 外键关联部门表的主键。 - 员工表 ↔ 工作经历表
○ 一对多关系(1:N)
○ 逻辑:一个员工可有多段工作经历(原型中“工作简历”字段需要支持多段记录)。
○ 实现方式:工作经历表中通过 员工ID 外键关联员工表的主键。 - 员工表 ↔ 员工-部门关系表
○ 冗余设计(需优化)
○ 问题:若员工表中已通过 部门ID 外键直接关联部门表,则员工-部门关系表无需存在。此表仅在支持员工归属多个部门(多对多)时需保留,但原型中“所属部门”为单选,表明 无需多对多关系。
最终优化方案(3张表) - 员工表(含 部门ID 外键)
- 部门表
- 工作经历表
关系总结
● 部门表 → 员工表:1:N
● 员工表 → 工作经历表:1:N
关键依据 - 原型中“所属部门”为单选字段(非多选),直接指向单一部门。
- 需求文档未提及员工跨部门归属逻辑,无需多对多关系表。
- 界面中“工作简历”明确需要多段记录,需独立表支持。
此方案精简表结构,完全匹配页面原型和需求描述的操作逻辑
部门管理表生成
重新上传部门管理的图片,编写提示语,我们开始生成对应的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,注意选择版本、容器名称。然后右上角点击部署即可
● 这个名字,并不是数据库名称,可以理解为就是一个连接名
● 备份策略,我们不需要,直接关闭即可
刚创建完,还是不可以访问的
耐心等待之后,变成运行中,我们就可以查看链接信息