今天抽了會時間設計了下表結構,并選定的使用的數據庫,經過調查,我決定還是把數據存在數據庫中,因為寫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
);