-- 220_study_q_related_cache.sql -- PR-12-A 후속: study_questions 에 related-types 결과 영속 캐시. -- 매 진입마다 HNSW cosine 검색 반복하던 비용을 1회 계산 + 영속 저장으로 전환. -- -- 임베딩 워커가 ready 처리 후 같은 트랜잭션에서 채움. 같은 topic 다른 문제가 -- ready 가 되면 invalidation 으로 related_computed_at = NULL 마킹 → cron 재계산. -- -- 컬럼: -- related_repeat / related_similar JSONB — [{id, sim, exam_round, exam_question_number, subject, scope, qtext}] -- related_repeat_round_count / related_similar_round_count INTEGER — 회차 distinct 수 -- related_repeat_grade VARCHAR(50) — 단골/잘 나오는 반복 출제/반복 출제/신출/빈출 (또는 NULL) -- related_computed_at TIMESTAMPTZ — NULL = stale, 다음 cron 재계산 대상 -- related_threshold_version VARCHAR(20) — 'v1_0.95_0.85' 같은 임계값 fingerprint ALTER TABLE study_questions ADD COLUMN IF NOT EXISTS related_repeat JSONB, ADD COLUMN IF NOT EXISTS related_similar JSONB, ADD COLUMN IF NOT EXISTS related_repeat_round_count INTEGER, ADD COLUMN IF NOT EXISTS related_similar_round_count INTEGER, ADD COLUMN IF NOT EXISTS related_repeat_grade VARCHAR(50), ADD COLUMN IF NOT EXISTS related_computed_at TIMESTAMPTZ, ADD COLUMN IF NOT EXISTS related_threshold_version VARCHAR(20);