以下是针对你的需求设计的 Cloudflare D1 数据库任务表(tasks
) 的 SQL 创建命令。该表支持区分任务类型(待办、提醒、定时执行 JS)、执行频率(每日/指定日期)、脚本内容存储等功能,并包含常用字段(如状态、时间戳等)。
# SQL 创建命令
CREATE TABLE tasks (
id TEXT PRIMARY KEY, -- 唯一标识符(建议使用 UUID)
type TEXT NOT NULL, -- 任务类型(todo/reminder/scheduled_js)
title TEXT NOT NULL, -- 任务标题
description TEXT, -- 任务描述
frequency_type TEXT NOT NULL, -- 执行频率(daily/specific_date/cron)
specific_date DATETIME, -- 指定日期(仅当 frequency_type = 'specific_date' 时有效)
cron_expression TEXT, -- Cron 表达式(仅当 frequency_type = 'cron' 时有效)
next_run_at DATETIME, -- 下一次执行时间
script TEXT, -- 存储 JS 脚本内容(仅当 type = 'scheduled_js' 时有效)
status TEXT NOT NULL DEFAULT 'pending', -- 任务状态(pending/completed/failed)
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 创建时间
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 最后更新时间
);
# 字段说明
字段名 | 类型 | 说明 |
---|---|---|
id | TEXT | 主键,唯一标识任务(建议使用 UUID 生成)。 |
type | TEXT | 任务类型,支持 todo (待办)、reminder (提醒)、scheduled_js (定时执行 JS)。 |
title | TEXT | 任务标题(必填)。 |
description | TEXT | 任务描述(可选)。 |
frequency_type | TEXT | 执行频率类型:daily (每日)specific_date (指定日期)cron (Cron 表达式)。 |
specific_date | DATETIME | 指定执行的日期(仅当 frequency_type = 'specific_date' 时有效)。 |
cron_expression | TEXT | Cron 表达式(仅当 frequency_type = 'cron' 时有效)。 |
next_run_at | DATETIME | 下一次执行时间(用于调度系统查询待执行任务)。 |
script | TEXT | 存储 JS 脚本内容(仅当 type = 'scheduled_js' 时有效)。 |
status | TEXT | 任务状态,默认 pending ,可更新为 completed 或 failed 。 |
created_at | DATETIME | 创建时间(自动生成)。 |
updated_at | DATETIME | 最后更新时间(自动生成)。 |
# 示例数据
# 1. 普通待办任务
INSERT INTO tasks (
id, type, title, description, frequency_type, status
) VALUES (
'uuid-1234', 'todo', '完成项目报告', '提交给客户', 'daily', 'pending'
);
# 2. 定时执行 JS 脚本
INSERT INTO tasks (
id, type, title, script, frequency_type, cron_expression, status
) VALUES (
'uuid-5678', 'scheduled_js', '清理日志', 'console.log("清理完成");', 'cron', '0 0 * * *', 'pending'
);
# 3. 指定日期提醒
INSERT INTO tasks (
id, type, title, frequency_type, specific_date, status
) VALUES (
'uuid-90ab', 'reminder', '生日提醒', 'specific_date', '2024-12-25T08:00:00Z', 'pending'
);
# 扩展建议
索引优化
为next_run_at
字段添加索引,加速查询待执行任务:CREATE INDEX idx_next_run_at ON tasks (next_run_at);
约束校验
通过应用层或触发器确保字段逻辑正确(例如:specific_date
仅在frequency_type = 'specific_date'
时存在)。时间戳自动更新
如果 D1 支持触发器,可通过以下语句自动更新updated_at
:CREATE TRIGGER update_tasks_updated_at AFTER UPDATE ON tasks FOR EACH ROW BEGIN UPDATE tasks SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id; END;
# 使用场景
- 待办任务(Todo):记录用户需要手动完成的事项,支持每日重复。
- 提醒(Reminder):指定日期触发的通知(如生日、会议)。
- 定时 JS 脚本:通过 Cloudflare Workers 调度执行,例如清理缓存、数据同步等。
如果有其他需求(如多用户支持、任务分类),可以进一步扩展表结构! 🚀