-- 2026-09-21-03 来源幂等:两张草稿表新增 source / source_url,并建部分唯一索引。 -- -- 对应规格:docs/superpowers/specs/2026-09-20-ingest-idempotency-design.md §3.1–3.2 -- -- 幂等:ADD COLUMN / CREATE INDEX 全带 IF NOT EXISTS,可重复执行。 -- -- 应用后请重新导出结构: -- ./bin/dbtool dump -clean -out db/backups/db_dump.sql -- -- 注意:同规格 §3.6(month 列与「实体键并入 month」)**已作废**—— -- 由 docs/superpowers/specs/2026-09-21-duplicate-review-design.md §3.7 取代 -- (街拍实体键改为 (source, source_url),不再按月区分)。故本脚本**不建 month 列**。 -- 用 not null default '' 而不是可空:NULL 在唯一索引里不参与比较, -- 会造成「同键可重复插入」的漏洞。 ALTER TABLE brand_runway_drafts ADD COLUMN IF NOT EXISTS source varchar(32) NOT NULL DEFAULT ''; ALTER TABLE brand_runway_drafts ADD COLUMN IF NOT EXISTS source_url varchar(512) NOT NULL DEFAULT ''; ALTER TABLE street_snap_drafts ADD COLUMN IF NOT EXISTS source varchar(32) NOT NULL DEFAULT ''; ALTER TABLE street_snap_drafts ADD COLUMN IF NOT EXISTS source_url varchar(512) NOT NULL DEFAULT ''; -- 两个部分唯一索引(全量唯一索引会因存量大量 ('','') 冲突而建索引失败)。 -- 向后兼容:老爬虫不上送 source_url 时该列为空串,自动被索引豁免 —— 行为与改动前一致。 CREATE UNIQUE INDEX IF NOT EXISTS uq_br_draft_source ON brand_runway_drafts (source, source_url) WHERE source_url <> ''; CREATE UNIQUE INDEX IF NOT EXISTS uq_ss_draft_source ON street_snap_drafts (source, source_url) WHERE source_url <> '';