如何设计MySQL每日任务清单数据库结构?
数据库结构设计方案
针对你把纸质任务表单转化为数据库应用的需求,这里提供符合范式的数据库表结构设计:
1. 任务主表 (tasks)
存储任务的基础信息,定义任务的执行规则(解决“并非所有任务都需要每日执行”的需求):
task_id:主键(自增整数或UUID),唯一标识每个任务task_name:字符串,任务名称(必填,如"整理文件柜")description:文本,任务细节描述(可选)execution_type:枚举类型,可选值:daily(每日执行)、weekly(每周指定天数)、monthly(每月指定日期)、custom(自定义规则)execution_config:JSON类型,存储对应execution_type的具体规则(比如execution_type为weekly时,存{"days": [1,3,5]}代表周一、周三、周五执行;custom时可存更复杂的日期规则)is_active:布尔值,标记任务是否处于生效状态(避免删除历史任务)
2. 任务执行记录表 (task_executions)
记录每日任务的完成与签名情况,关联任务和执行日期:
execution_id:主键(自增整数或UUID)task_id:外键,关联tasks.task_id(必填)execution_date:日期类型(如DATE),记录任务执行的具体日期(必填)is_completed:布尔值,标记任务是否完成(默认false)signature:字符串,存储签名信息(可根据实际需求存姓名文本、签名图片路径或加密数据)submit_time:时间戳,记录签名提交的具体时间
3. 可选:用户表 (users)
如果存在多个用户需要签名,需存储用户基础信息:
user_id:主键(自增整数或UUID)full_name:字符串,用户真实姓名(对应签名的实际名称,必填)username:字符串,登录用户名(唯一,必填)- 其他字段(如联系方式)按需添加
此时需在task_executions表中新增user_id外键,关联users.user_id,用于记录是哪个用户完成的任务。
设计优势说明
- 符合数据库第三范式,避免数据冗余,新增任务/日期无需修改表结构
- 执行规则通过
execution_type+execution_config灵活定义,适配不同任务的执行频率需求 - 任务执行记录与任务主表分离,便于统计历史完成情况、导出报表
示例查询(获取指定日期的任务完成情况)
-- 查询2024-06-10所有生效任务的完成状态 SELECT t.task_name, COALESCE(te.is_completed, false) AS is_completed, te.signature FROM tasks t LEFT JOIN task_executions te ON t.task_id = te.task_id AND te.execution_date = '2024-06-10' WHERE t.is_active = true -- 根据执行规则过滤当天需要执行的任务 AND ( t.execution_type = 'daily' OR ( t.execution_type = 'weekly' AND EXTRACT(DOW FROM '2024-06-10'::DATE) = ANY((t.execution_config->>'days')::int[]) ) -- 其他执行类型的过滤逻辑可按需补充 );
内容的提问来源于stack exchange,提问作者farmerm3
相关产品推荐
相关产品推荐

