bibimbap/db/migrations/20260629-game-likes-unique.sql

25 lines
1.0 KiB
SQL

-- 게임 좋아요 서버 영속화: (game_id, user_key) 사용자별 1회 좋아요 멱등 보장
-- 적용 전 반드시 중복 row 점검 후, 중복이 있으면 제거하고 제약 추가할 것.
-- 이 파일은 작성만 한다. DB 적용은 orchestrator 가 사용자 확인 후 수행.
-- 1) 중복 점검 (적용 전 실행, 결과가 0행이어야 안전)
SELECT game_id, user_key, COUNT(*)
FROM game_likes
GROUP BY game_id, user_key
HAVING COUNT(*) > 1;
-- 2) (중복이 있을 경우) 최신 1건만 남기고 제거 — 점검 결과 확인 후 수동 실행
-- DELETE FROM game_likes gl
-- USING game_likes keep
-- WHERE gl.game_id = keep.game_id
-- AND gl.user_key = keep.user_key
-- AND gl.id < keep.id
-- AND keep.id = (SELECT MAX(id) FROM game_likes x WHERE x.game_id = gl.game_id AND x.user_key = gl.user_key);
-- 3) UNIQUE 제약 추가
ALTER TABLE game_likes
ADD CONSTRAINT uq_game_likes_game_user UNIQUE (game_id, user_key);
-- 롤백:
-- ALTER TABLE game_likes DROP CONSTRAINT uq_game_likes_game_user;