開發類 PS 應用時,需記錄用戶操作歷史(撤銷/重做棧)並持久化。提問者疑惑:是否需要為歷史面板設計獨立數據表?如何存儲、查詢、顯示?
不需要單獨表單/表格。 只需在主業務表(或專用日誌表)增加一個 operation_type 字段(TINYINT/ENUM),以數值編碼操作類型:
| 數值 | 含義 | 說明 |
|---|---|---|
| 1 | 新增 | 圖層、路徑、選區等創建操作 |
| 2 | 刪除 | 圖層刪除、蒙版清除等 |
| 3 | 修改 | 屬性調整、變換、濾鏡參數變更 |
| 4 | 查詢/選擇 | 非破壞性操作,可選記錄 |
target_id:操作對象 ID(圖層 ID、圖庫 ID)params_json:關鍵參數快照(JSON 格式,如 {opacity: 0.5, blend: "multiply"})timestamp:操作時間,用於排序與時間旅行user_id:多用戶協作場景下的歸屬-- 獲取某文檔最近 50 步歷史
SELECT operation_type, target_id, params_json, timestamp
FROM history_log
WHERE document_id = ?
ORDER BY timestamp DESC
LIMIT 50;
前端根據 operation_type 渲染圖標(➕/🗑️/✏️/🔍),點擊某條記錄可通過 params_json 還原狀態或高亮對應圖層。
(document_id, timestamp) 聯合索引滿足倒序分頁需求。以「類型標識 + 參數快照」為核心的單表設計,兼顧了查詢性能、存儲效率與擴展靈活性,是歷史操作記錄的最佳實踐。