-- 成绩版本图谱:parent_id 指向上一条版本,仅用于可视化。 -- ⚠️ 不是 DAG:写入侧(httpapi.recordRevision)恒取「同小项当前 MAX(id)」,所以一个小项一条链、 -- 撤销后再发布也接在链尾,不会从撤销点分出分支;每个小项的第一条版本 parent_id 为 NULL。 CREATE TABLE IF NOT EXISTS result_revisions ( id INTEGER PRIMARY KEY AUTOINCREMENT, parent_id INTEGER REFERENCES result_revisions(id), event_id INTEGER NOT NULL REFERENCES events(id), action TEXT NOT NULL CHECK (action IN ('publish', 'unpublish', 'edit')), snapshot_json TEXT NOT NULL, ledger_ids TEXT NOT NULL DEFAULT '[]', -- actor_id 指向系统库 users,跨库不能建外键。 actor_id INTEGER, message TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')) ); CREATE INDEX IF NOT EXISTS idx_result_revisions_event_id ON result_revisions(event_id, created_at);