-- 287_study_memo_cards.sql -- 공부 암기노트 Phase 1: 추출 플래시카드 본체 (FK 트리 루트). -- -- 출처(source_kind): question (P1 활성) / subject_note / document (P3 예약). -- 포맷(format): qa (cue->fact) / cloze (빈칸). 강한 enum 미사용 — read-time 매핑. -- needs_review DEFAULT true: 생성물이라 추출 직후 검토 대기 (study_questions 의 false 와 반대). -- source_generated_at: 추출 당시 study_questions.ai_explanation_generated_at — stale 판정/버전 핀. -- source_question_id 만 nullable + ON DELETE CASCADE (문제 물리삭제 시 카드 동반삭제; -- 단 study_questions 는 soft-delete 만이라 실전은 정정/삭제 훅이 needs_review 마킹). -- 인용(evidence) 은 별 테이블 study_memo_card_evidence (append-only). CREATE TABLE IF NOT EXISTS study_memo_cards ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, study_topic_id BIGINT NOT NULL REFERENCES study_topics(id) ON DELETE CASCADE, source_kind VARCHAR(40) NOT NULL, source_question_id BIGINT REFERENCES study_questions(id) ON DELETE CASCADE, source_subject_note_id BIGINT, format VARCHAR(20) NOT NULL, cue TEXT NOT NULL, fact TEXT NOT NULL, cloze_text TEXT, extra JSONB, source_generated_at TIMESTAMPTZ, dedup_hash VARCHAR(64) NOT NULL, needs_review BOOLEAN NOT NULL DEFAULT true, flagged_at TIMESTAMPTZ, flagged_by VARCHAR(40), model VARCHAR(120), generated_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), deleted_at TIMESTAMPTZ );