-- 188_study_question_attempts.sql (3/5) -- 복습모드에서 답 제출할 때마다 1행 누적. 통계·오답노트의 토대. -- -- FK 정책 (이력 보존 원칙): -- - study_question_id ON DELETE RESTRICT — 문제 삭제는 API 에서 soft delete 만 수행. -- hard delete 실수로 풀이 이력이 사라지면 안 되기 때문에 DB 레벨에서도 막는다. CASCADE 금지. -- - study_topic_id ON DELETE CASCADE — 토픽 삭제는 워크스페이스 전체 폐기 의미. -- 단 PR-1 의 토픽 삭제도 soft delete 라 실 cascade 발생은 hard delete 시. -- - user_id ON DELETE CASCADE — 사용자 탈퇴 정리. -- -- correct_choice 컬럼은 attempt 시점 정답을 그대로 보존 — 문제 편집으로 정답 변경되어도 -- 기존 attempt 의 is_correct 는 재계산 안 함 (기록은 시점 사실). -- selected_choice/correct_choice 모두 SMALLINT CHECK 1~4. CREATE TABLE IF NOT EXISTS study_question_attempts ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, study_question_id BIGINT NOT NULL REFERENCES study_questions(id) ON DELETE RESTRICT, study_topic_id BIGINT NOT NULL REFERENCES study_topics(id) ON DELETE CASCADE, selected_choice SMALLINT NOT NULL CHECK (selected_choice BETWEEN 1 AND 4), correct_choice SMALLINT NOT NULL CHECK (correct_choice BETWEEN 1 AND 4), is_correct BOOLEAN NOT NULL, answered_at TIMESTAMPTZ NOT NULL DEFAULT NOW() );