今天抽了会时间设计了下表结构,并选定的使用的数据库,经过调查,我决定还是把数据存在数据库中,因为写SQL是我擅长的。
最终我选择使用python自带的sqlite来实现这个工具,具体建表语句如下:
基于AI生成,自己改了一些地方
-- 启用外键约束(SQLite 默认关闭)
PRAGMA foreign_keys = ON;-- 任务表(tasks)
CREATE TABLE IF NOT EXISTS tasks (task_id INTEGER PRIMARY KEY AUTOINCREMENT, -- 自增主键name TEXT NOT NULL, -- 任务名称status TEXT NOT NULL CHECK (status IN ('进行中', '已完成', '已删除')), -- 状态约束estimated_pomos INTEGER DEFAULT 0, -- 预计番茄数created_time TEXT DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), -- 创建时间completed_at TEXT -- 完成时间(允许为空)
);-- 番茄表(pomodoros)
CREATE TABLE IF NOT EXISTS pomodoros (pomodoro_id INTEGER PRIMARY KEY AUTOINCREMENT, -- 自增主键task_id INTEGER NOT NULL, -- 关联任务start_time TEXT NOT NULL, -- 番茄开始时间(ISO8601格式)end_time TEXT, -- 番茄结束时间(允许为空)status TEXT NOT NULL -- 状态约束FOREIGN KEY (task_id) REFERENCES tasks(task_id) ON DELETE CASCADE -- 级联删除
);-- 打断表(interruptions)
CREATE TABLE IF NOT EXISTS interruptions (interruption_id INTEGER PRIMARY KEY AUTOINCREMENT, pomodoro_id INTEGER NOT NULL UNIQUE, -- 一对一关联番茄reason TEXT , -- 原因分类interruption_time TEXT NOT NULL, -- 打断发生时间FOREIGN KEY (pomodoro_id) REFERENCES pomodoros(pomodoro_id) ON DELETE CASCADE
);-- 干扰表(distractions)
CREATE TABLE IF NOT EXISTS distractions (distraction_id INTEGER PRIMARY KEY AUTOINCREMENT,pomodoro_id INTEGER NOT NULL, -- 关联番茄description TEXT NOT NULL, -- 干扰描述distraction_time TEXT DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), -- 发生时间FOREIGN KEY (pomodoro_id) REFERENCES pomodoros(pomodoro_id) ON DELETE CASCADE
);