35 lines
2.6 KiB
SQL
35 lines
2.6 KiB
SQL
-- 声音账(voice baseline):技能 1「定基线」的库内载体。
|
||
-- 一部作品一行一版本:新版本 append 一行并把旧行 superseded,历史版本保留审计。
|
||
-- 声音账只读已确认正文与作者样张产出(专题-09 §5.1);脚本层强制账内每个
|
||
-- 口癖/保护片段必须能在来源正文中找到(grounding 门),数据库层只锁结构与状态。
|
||
-- ledger 同时兼容 deai.gates.protected_checks 的 voice_thin 形状
|
||
-- (untouchable_verbal_tics / protected_spans),修订门禁直接消费。
|
||
|
||
CREATE TABLE IF NOT EXISTS example_voice_baseline (
|
||
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
||
work_ref VARCHAR(256) NOT NULL, -- 作品逻辑引用(与案例卡 work_ref 同域)
|
||
version INTEGER NOT NULL, -- 作品内单调版本号(1 起)
|
||
ledger JSONB NOT NULL, -- 声音账全文(结构由 establish-voice-baseline 脚本校验)
|
||
ledger_sha256 VARCHAR(64) NOT NULL, -- ledger 规范化 JSON 的 sha256
|
||
source_text_sha256 VARCHAR(64) NOT NULL, -- 定基线所依据的已确认正文 sha256(可多文拼接)
|
||
reviewer VARCHAR(64) NOT NULL DEFAULT '', -- 人工确认人(基线必须人确认,专题-09 §5.1)
|
||
note TEXT NOT NULL DEFAULT '',
|
||
superseded BOOLEAN NOT NULL DEFAULT FALSE, -- 被更新版本取代;保留审计不删除
|
||
creator VARCHAR(64) NOT NULL DEFAULT '1',
|
||
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
updater VARCHAR(64) NOT NULL DEFAULT '1',
|
||
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
deleted BOOLEAN NOT NULL DEFAULT FALSE,
|
||
tenant_id BIGINT NOT NULL DEFAULT 1,
|
||
CONSTRAINT uk_example_voice_baseline UNIQUE (tenant_id, work_ref, version),
|
||
CONSTRAINT chk_example_voice_baseline_version CHECK (version >= 1),
|
||
CONSTRAINT chk_example_voice_baseline_ledger_sha CHECK (ledger_sha256 ~ '^[0-9a-f]{64}$'),
|
||
CONSTRAINT chk_example_voice_baseline_source_sha CHECK (source_text_sha256 ~ '^[0-9a-f]{64}$'),
|
||
-- 未确认的基线不得冒充当前有效:只有带确认人的最新版本可被消费(脚本层取 latest 时同样强制)
|
||
CONSTRAINT chk_example_voice_baseline_reviewer CHECK (superseded OR reviewer <> '')
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_example_voice_baseline_work
|
||
ON example_voice_baseline(tenant_id, work_ref, version DESC) WHERE deleted = FALSE;
|
||
CREATE OR REPLACE TRIGGER trg_example_voice_baseline_updated_at
|
||
BEFORE UPDATE ON example_voice_baseline FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|