You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为设备维修跟踪表单程序设计MySQL数据库的优化方案咨询

嘿,这个问题我太熟了——很多做动态表单系统的朋友一开始都会踩「横向列存储」的坑,尤其是表单频繁变更的时候,改表结构简直是噩梦。给你一套我在类似维修工单系统里用过的最优设计方案,完全适配你的需求:

最优解决方案:采用「纵向+结构化」的数据库设计

核心思路是把原来的「单表多列存问题」改成「多表纵向存问题模板+工单回答」,彻底摆脱表单变更依赖表结构的困境。

1. 核心表结构设计

拆成3个关联表,各司其职:

(1)问题模板表 repair_question_templates

专门存所有维修任务的模板,支持新增、删除、调整顺序:

CREATE TABLE repair_question_templates (
    question_id INT AUTO_INCREMENT PRIMARY KEY,
    question_content VARCHAR(255) NOT NULL COMMENT '问题内容,比如「检查电源连接是否正常」',
    sort_order INT NOT NULL DEFAULT 0 COMMENT '问题展示顺序,数字越小越靠前',
    is_active TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用该问题,0=禁用/软删除'
);

怎么用?

  • 新增任务:往这个表插一行就行,不用改其他表结构
  • 移除任务:把is_active设为0(软删除,不影响历史工单数据)
  • 调整顺序:直接修改sort_order的数值,比如把原来的问题3调到问题1前面,就把它的sort_order改成比问题1小的数

(2)工单主表 repair_work_orders

存工单的基础信息,和具体问题解耦:

CREATE TABLE repair_work_orders (
    work_order_id INT AUTO_INCREMENT PRIMARY KEY,
    technician_id INT NOT NULL COMMENT '技术人员ID',
    machine_id VARCHAR(50) NOT NULL COMMENT '待维修机器编号',
    create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    finish_time DATETIME COMMENT '工单完成时间'
);

(3)工单问题回答表 repair_work_order_answers

每个工单的问题回答和备注都存在这里,是核心的纵向存储表:

CREATE TABLE repair_work_order_answers (
    answer_id INT AUTO_INCREMENT PRIMARY KEY,
    work_order_id INT NOT NULL COMMENT '关联对应的工单ID',
    question_id INT NOT NULL COMMENT '关联对应的问题模板ID',
    answer_value INT NOT NULL COMMENT '你的整数型答案,比如1=完成,0=未完成',
    remark TEXT COMMENT '技术人员输入的备注内容',
    FOREIGN KEY (work_order_id) REFERENCES repair_work_orders(work_order_id),
    FOREIGN KEY (question_id) REFERENCES repair_question_templates(question_id)
);

2. 适配你的操作流程

  • 展示问题:从repair_question_templates里按sort_order升序查询所有is_active=1的问题,展示顺序完全由你控制,永远不会乱
  • 技术人员操作:
    • 点击「完成」:往repair_work_order_answers插入一行,answer_value设为你定义的“完成”值(比如1),remark留空即可
    • 点击「查看备注」并输入:同样插入/更新该行,填好answer_value的同时,把备注内容写到remark字段里

3. 对比旧设计的核心优势

  • 彻底解决表单变更痛点:新增/删除任务不用改表结构,调整顺序只改模板表的数字,运维成本直接降为0
  • 历史数据完全兼容:即使某个问题被禁用,旧工单里的回答依然存在,不会因为删列丢失数据
  • 扩展性极强:以后要加其他类型的问题(比如多选、文本输入),只需要在模板表加个question_type字段,回答表对应调整就行,不用大动干戈

4. 实用查询示例:获取某工单的所有回答(带正确顺序)

SELECT 
    q.question_content,
    a.answer_value,
    a.remark
FROM repair_work_order_answers a
JOIN repair_question_templates q ON a.question_id = q.question_id
WHERE a.work_order_id = 123 -- 替换成你要查的工单ID
ORDER BY q.sort_order ASC;

查出来的结果就是和你展示给技术人员的顺序完全一致的,完美适配前端展示需求。

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:44:37