016_fix_data_and_model.sql 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. -- 1. 잘못된 데이터 정리 (TERMINATED 상태인데 IS_ACTIVE='Y'인 레코드 수정)
  2. UPDATE VENDOR_INFLUENCER_PARTNERSHIP
  3. SET IS_ACTIVE = 'N'
  4. WHERE STATUS = 'TERMINATED';
  5. -- 2. 제약조건 재정의
  6. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  7. DROP INDEX unique_active_partnership;
  8. -- 3. 새로운 복합 제약조건 추가
  9. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  10. ADD CONSTRAINT chk_status_active CHECK (
  11. (STATUS = 'TERMINATED' AND IS_ACTIVE = 'N') OR
  12. (STATUS IN ('PENDING', 'APPROVED', 'REJECTED') AND IS_ACTIVE IN ('Y', 'N'))
  13. );
  14. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  15. ADD CONSTRAINT unique_active_partnership
  16. UNIQUE KEY (VENDOR_SEQ, INFLUENCER_SEQ, IS_ACTIVE);
  17. -- 4. 데이터 정리 (각 벤더-인플루언서 조합에 대해 하나의 활성 레코드만 유지)
  18. CREATE TEMPORARY TABLE tmp_latest_active AS
  19. SELECT MAX(SEQ) as max_seq
  20. FROM VENDOR_INFLUENCER_PARTNERSHIP
  21. WHERE IS_ACTIVE = 'Y'
  22. GROUP BY VENDOR_SEQ, INFLUENCER_SEQ;
  23. UPDATE VENDOR_INFLUENCER_PARTNERSHIP
  24. SET IS_ACTIVE = 'N'
  25. WHERE IS_ACTIVE = 'Y'
  26. AND SEQ NOT IN (SELECT max_seq FROM tmp_latest_active);
  27. DROP TEMPORARY TABLE IF EXISTS tmp_latest_active;