3.1 数据库设计

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

设计流程分析
一个标准的数据库设计,我们最基本的就是遵循:三范式设计原则,再高阶一点就是: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,注意选择版本、容器名称。然后右上角点击部署即可
● 这个名字,并不是数据库名称,可以理解为就是一个连接名
● 备份策略,我们不需要,直接关闭即可

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

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

此时我们店家:外网连接,可以看到是:0.014/小时的收费,大家学习阶段还是完全够用的。

开启后,我的连接信息如下:

借助任意一个数据库连接工具,即可连接访问(Idea、DataGrip、Navicat、SqlYog等)

接下來,完成数据库创建

然后将我们上面的DDL语句粘贴进去执行即可,完整SQL文件如下:

相关文章
|
存储 安全 文件存储
什么是NAS?探索无限存储的可能性
【4月更文挑战第21天】
12401 0
什么是NAS?探索无限存储的可能性
|
消息中间件 JSON 数据格式
查看rabbitmq日志,Rabbitmq Trace日志
查看rabbitmq日志,Rabbitmq Trace日志
1615 2
|
5月前
|
数据采集 供应链 数据可视化
智慧设备管理综合系统PC端Axure原型
本《智慧设备管理综合系统PC端Axure原型》提供244页高保真设计,覆盖设备全生命周期管理,涵盖信息、履历、维修、保养、巡检、备件等核心模块,实现数字化、智能化闭环管理。兼容Axure 9-11,助力企业降低开发风险、提升协作效率,是迈向设备管理数字化转型的权威蓝图。(238字)
145 0
|
3月前
|
人工智能 数据可视化 物联网
[大模型实战 06] 我的模型我做主:在 Kaggle 上用 Unsloth 极速微调 Qwen3
本文介绍如何用Unsloth+QLoRA高效微调Qwen3-4B模型,仅需Kaggle免费T4显卡,速度提升2–5倍、显存节省60%;三步实现“灵魂认主”,让模型自认“AlgiebaLLM AI”,全程代码简洁,零基础可上手。
[大模型实战 06] 我的模型我做主:在 Kaggle 上用 Unsloth 极速微调 Qwen3
|
云栖大会 开发者
收到阿里云【乘风者计划】博主证书和奖励
收到阿里云【乘风者计划】博主证书和奖励 2023年2月对我来说是一个很好的开端,因为我在1号就收到了阿里云寄给我的【乘风者计划】博主证书和奖励。好兆头啊! 我收到的是我获得的【技术博主】【星级博主】【专家博主】三个的奖品和证书,一快给我寄过来哒!
3253 2
收到阿里云【乘风者计划】博主证书和奖励
|
5月前
|
消息中间件 人工智能 决策智能
AgentScope x RocketMQ:构建多智能体应用组合
AgentScope是阿里开源的多智能体开发框架,支持模块化、透明化、可定制的智能体构建。集成RocketMQ实现高效A2A通信,助力打造如“智能旅行助手”等复杂协作应用,推动开发者友好型AI生态发展。
|
3月前
|
人工智能 Linux API
[大模型实战 01] 本地大模型初体验:Ollama 部署与 Python 调用指南
大模型实战系列第一篇。拒绝晦涩理论,直接上手!我会带着各位友人们零基础安装 Ollama,利用国内 ModelScope 极速下载模型,详解服务端口配置与 Python 脚本调用,涵盖显存计算与常见避坑指南。
[大模型实战 01] 本地大模型初体验:Ollama 部署与 Python 调用指南
|
5月前
|
敏捷开发 持续交付
阿里巴巴-云效
通过阿里云效平台实现高效研发协作:开通服务后,可进行需求管理,创建项目并协作更新任务,支持看板模式直观跟进进度;结合代码托管与自动化部署,完成代码提交、流水线构建与发布全流程,助力团队敏捷开发。(239字)
|
5月前
|
存储 人工智能 关系型数据库
4.3 服务端(Cursor)-接口开发(员工管理)
基于SpringBoot+Mybatis+PageHelper,使用JDK8+新语法实现员工管理功能,涵盖分页查询、新增、修改、删除、详情及全量查询接口,操作emp与emp_expr表,支持多条件筛选与级联工作经历处理,高效完成前后端交互。
|
5月前
|
关系型数据库 MySQL Java
4.2 服务端(Cursor)-接口开发(部门管理)
基于SpringBoot+Mybatis+PageHelper,使用JDK8+语法,连接内网MySQL数据库(Sealos托管),完成部门管理5大接口开发:列表查询、根据ID查询、添加、修改、删除部门。结合dept表结构与接口文档,实现RESTful API,返回统一格式数据,通过ApiFox测试验证功能完整可用。(239字)