muse-agent-example/db/ddl/94-example作品面升格.sql

88 lines
5.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- example 私货:参考书作品面升格工作表(创始人 2026-07-14 认可方案后开工,5 张)
-- 支撑「全实体统一生长」抽取管线的幂等/撤销/判重审计/跨窗出场记忆。
-- 命名与公共列遵循主仓 yudao 惯例(无外键、软删、tenant_id)。
-- 设计出处:docs/2026-07-14-参考书作品面数据入库方案.md §五B(v6)
-- ① 别名表:判重审计——谁被认定为谁的别名(错认可按行拆回,对应卡从该窗重滚)
CREATE TABLE IF NOT EXISTS example_upgrade_alias (
id BIGSERIAL PRIMARY KEY,
work_id BIGINT NOT NULL, -- 参考书 work
canonical_name VARCHAR(200) NOT NULL, -- 正名(卡的归一名)
alias VARCHAR(200) NOT NULL, -- 别名
evidence_window INT, -- 依据窗(判定发生在哪个窗)
verdict_by VARCHAR(20) NOT NULL DEFAULT 'mechanical', -- 判定方: mechanical/ai
creator VARCHAR(64) DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT now(),
updater VARCHAR(64) DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT now(),
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_example_upgrade_alias UNIQUE (tenant_id, work_id, alias)
);
COMMENT ON TABLE example_upgrade_alias IS 'example 私货:作品面升格-别名判重审计(正名↔别名对照,错认按行拆回)';
-- ② 出场留档表:未立卡实体的跨窗出场记忆(第四轮评审 G4——窗内视角判不准「跨章戏份」
-- 立卡门槛,判重前先查此表,两窗合计跨章即用留档补立卡;撤销=按窗删行)
CREATE TABLE IF NOT EXISTS example_upgrade_presence (
id BIGSERIAL PRIMARY KEY,
work_id BIGINT NOT NULL,
window_no INT NOT NULL, -- 观察发生的窗
chapter_no INT NOT NULL, -- 出场章 order_no
entity_type VARCHAR(50) NOT NULL, -- 六类之一(character/location/…)
name VARCHAR(200) NOT NULL, -- 观察到的名字
observation TEXT, -- 一句话观察(补立卡时作初卡材料)
creator VARCHAR(64) DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT now(),
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX IF NOT EXISTS idx_example_upgrade_presence_name
ON example_upgrade_presence (tenant_id, work_id, name);
COMMENT ON TABLE example_upgrade_presence IS 'example 私货:作品面升格-出场留档(单章龙套不立卡先留档,跨窗合计跨章补立卡)';
-- ③ 窗状态表:一书一窗一行处理状态(断点续跑=跳过 done、从 failed 续)
-- 幂等键沿用 B4-S3 fable 审查 E2 教训:from_chapter 内容锚定,window_no 只作展示序号
CREATE TABLE IF NOT EXISTS example_upgrade_window (
id BIGSERIAL PRIMARY KEY,
work_id BIGINT NOT NULL,
window_no INT NOT NULL, -- 展示序号(1 起)
from_chapter INT NOT NULL, -- 窗起始章 order_no(幂等锚)
to_chapter INT NOT NULL, -- 窗结束章 order_no
status VARCHAR(20) NOT NULL DEFAULT 'pending', -- pending/done/failed
error_message TEXT, -- 失败原因(敏感硬停等)
creator VARCHAR(64) DEFAULT '',
create_time TIMESTAMP NOT NULL DEFAULT now(),
updater VARCHAR(64) DEFAULT '',
update_time TIMESTAMP NOT NULL DEFAULT now(),
deleted BOOLEAN NOT NULL DEFAULT FALSE,
tenant_id BIGINT NOT NULL DEFAULT 0,
CONSTRAINT uk_example_upgrade_window UNIQUE (tenant_id, work_id, from_chapter)
);
COMMENT ON TABLE example_upgrade_window IS 'example 私货:作品面升格-窗处理状态(幂等键=from_chapter 内容锚定)';
-- ④ 卡水位表:每张候选卡滚到第几窗(重跑判断起点;错认别名拆回时水位归零重滚)
CREATE TABLE IF NOT EXISTS example_upgrade_card_state (
draft_id BIGINT PRIMARY KEY, -- muse_knowledge_draft.id(一卡一行)
work_id BIGINT NOT NULL,
watermark_window INT NOT NULL DEFAULT 0, -- 已滚至窗号(0=仅初卡未滚动)
update_time TIMESTAMP NOT NULL DEFAULT now(),
tenant_id BIGINT NOT NULL DEFAULT 0
);
COMMENT ON TABLE example_upgrade_card_state IS 'example 私货:作品面升格-卡滚动水位(断点续跑起点)';
-- ⑤ 覆写审计表:覆写类字段旧值流水(同窗重跑=按 draft_id+window_no 还原再重写;
-- 初卡首窗全部字段以旧值=NULL 入审计,保证错认拆回可还原初卡原始态——第四轮评审 G7)
CREATE TABLE IF NOT EXISTS example_upgrade_audit (
id BIGSERIAL PRIMARY KEY,
draft_id BIGINT NOT NULL, -- 哪张卡
window_no INT NOT NULL, -- 哪个窗写的
field_name VARCHAR(100) NOT NULL, -- 字段名
old_value TEXT, -- 旧值(初卡=NULL)
new_value TEXT, -- 新值
create_time TIMESTAMP NOT NULL DEFAULT now(),
tenant_id BIGINT NOT NULL DEFAULT 0
);
CREATE INDEX IF NOT EXISTS idx_example_upgrade_audit_card
ON example_upgrade_audit (tenant_id, draft_id, window_no);
COMMENT ON TABLE example_upgrade_audit IS 'example 私货:作品面升格-覆写字段旧值审计(撤销依据)';