-- 286_chunk_section_analysis.sql -- PR-DocSrv-Hier-Section-Summary-1: per-절(leaf) Mac mini 분석 결과 저장 테이블. -- -- document_chunks(retrieval-hot: ivfflat + 2 gin + 6 btree)와 분리된 "절-레벨 분석 축". -- hot 테이블 무손상 + builder/replace 재작성과 무관. 검색 코퍼스와 완전 분리(additive). -- -- 컬럼 설계 (사용자 review 2026-05-24): -- status : summarized | skipped_tiny | failed — skip 도 행으로 박제(미처리 vs 의도 skip 구분) -- summary/section_type/domain/confidence : 분석 결과 (skip/failed 행은 NULL 가능) -- section_type : 절-전용 역할 enum (느슨한 text, CHECK 미설정 — pilot 관찰 후 조임) -- domain : doc-level taxonomy path(d.ai_domain) 상속 스냅샷 -- model/prompt_version: 모델·프롬프트 변경 추적 -- source_content_hash : 분석 시점 leaf chunk_content_hash 스냅샷 — 원문 변경(재분해) stale 탐지 -- -- chunk_id = FK CASCADE: chunk_section_analysis 는 document_chunks 에 종속된 분석 데이터. -- parent_id(자기참조 트리, cascade 모호성 회피 위해 app-level)와 달리 여기는 단순 1:1 종속 → FK 정당. -- -- UNIQUE(chunk_id, prompt_version): 같은 절을 같은 프롬프트로 1행. 원문 변경 시 동일 키 ON CONFLICT 갱신. -- (chunk_id 단독 조회는 이 복합 UNIQUE 의 leftmost prefix btree 로 커버 → 별 인덱스 불필요) -- -- ⚠ 단일 statement (migration runner exec_driver_sql). BEGIN/COMMIT/ROLLBACK 금지. CREATE TABLE IF NOT EXISTS chunk_section_analysis ( id BIGSERIAL PRIMARY KEY, chunk_id BIGINT NOT NULL REFERENCES document_chunks(id) ON DELETE CASCADE, status TEXT NOT NULL, summary TEXT, section_type TEXT, domain TEXT, confidence REAL, model TEXT, prompt_version TEXT NOT NULL, source_content_hash TEXT, error TEXT, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now(), UNIQUE (chunk_id, prompt_version) );