设计任务和任务进度表需分离主信息与动态进度,确保数据清晰可扩展。2. 任务表存储基本信息,进度表记录历史变更,便于统计分析。3. 通过关联查询获取最新进度,可冗余current_progress字段但以进度表为准。4. 建议扩展项目、里程碑、审计日志及子任务支持,提升系统灵活性。

在mysql中设计任务和任务进度表时,关键是要保证数据结构清晰、可扩展,并能准确反映任务的生命周期和进度变化。以下是常见的表结构设计思路和示例。
1. 任务表(task)
作用:存储任务的基本信息,如任务名称、描述、负责人、创建时间、状态等。
示例结构:
CREATE table task (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL COMMENT ‘任务标题’,
description TEXT COMMENT ‘任务描述’,
assignee_id BIGINT COMMENT ‘负责人ID’,
status enum(‘pending’, ‘running’, ‘paused’, ‘completed’, ‘cancelled’) default ‘pending’ COMMENT ‘任务状态’,
priority TINYINT DEFAULT 3 COMMENT ‘优先级:1-高,3-中,5-低’,
start_time DATETIME COMMENT ‘计划开始时间’,
end_time DATETIME COMMENT ‘计划结束时间’,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_assignee (assignee_id),
INDEX idx_status (status),
INDEX idx_start_end (start_time, end_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 任务进度表(task_progress)
作用:记录任务的进度变更历史,支持按时间查看进度变化,适合做统计分析。
示例结构:
CREATE TABLE task_progress (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
task_id BIGINT NOT NULL COMMENT ‘关联任务ID’,
progress_percent DECIMAL(5,2) NOT NULL DEFAULT 0.00 COMMENT ‘进度百分比,0.00~100.00’,
remark VARCHAR(500) COMMENT ‘进度说明’,
recorded_by BIGINT COMMENT ‘记录人ID’,
recorded_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (task_id) REFERENCES task(id) ON delete CAScadE,
INDEX idx_task_progress (task_id, recorded_at),
INDEX idx_recorded_by (recorded_by)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 设计要点说明
为什么分开两张表?
- 任务主信息稳定,而进度是动态变化的,拆分有利于维护历史记录。
- 避免频繁更新任务表导致锁竞争或日志膨胀。
- 支持查看“谁在什么时候把任务推进到了多少”。
如何获取当前任务进度?
从 task_progress 表中取每个任务最新的那条记录:
select tp.task_id, tp.progress_percent, tp.recorded_at, tp.remark
FROM task_progress tp
INNER JOIN (
SELECT task_id, MAX(recorded_at) AS max_time
FROM task_progress
GROUP BY task_id
) latest ON tp.task_id = latest.task_id AND tp.recorded_at = latest.max_time;
是否可以在 task 表中加一个 current_progress 字段?
可以,但建议仅作为冗余字段用于快速查询,真实数据仍以 task_progress 为准,通过触发器或应用层同步更新。
4. 扩展建议
- 加入项目字段(project_id)实现多项目管理。
- 增加里程碑字段(milestone)标记关键节点。
- 对 task_progress 的修改做审计日志(如操作IP、设备等)。
- 如果任务有子任务,可设计 task_child 表或使用树形结构。
基本上就这些,结构清晰、易于维护,适合中小规模的任务系统。


