019_redesign_partnership_table.sql 1.6 KB

123456789101112131415161718192021222324252627282930313233
  1. -- 기존 제약조건 삭제
  2. DROP INDEX IF EXISTS unique_active_partnership ON VENDOR_INFLUENCER_PARTNERSHIP;
  3. -- 파트너십 테이블 재설계
  4. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  5. ADD COLUMN PARTNERSHIP_CYCLE INT NOT NULL DEFAULT 1 COMMENT '파트너십 사이클 (1: 최초, 2: 첫 재승인, 3: 두번째 재승인 ...)',
  6. ADD COLUMN PREVIOUS_STATUS VARCHAR(20) NULL COMMENT '이전 상태 (재승인시 사용)',
  7. ADD COLUMN PREVIOUS_END_DATE DATETIME NULL COMMENT '이전 종료일 (재승인시 사용)';
  8. -- 새로운 복합 유니크 키 추가 (벤더-인플루언서-사이클 별로 활성 파트너십은 하나만 존재)
  9. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  10. ADD CONSTRAINT unique_partnership_cycle
  11. UNIQUE KEY (VENDOR_SEQ, INFLUENCER_SEQ, PARTNERSHIP_CYCLE, IS_ACTIVE);
  12. -- 상태 체크 제약조건 추가
  13. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  14. ADD CONSTRAINT chk_status_values
  15. CHECK (STATUS IN ('PENDING', 'APPROVED', 'REJECTED', 'TERMINATED'));
  16. -- 활성 상태 체크 제약조건 추가
  17. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  18. ADD CONSTRAINT chk_status_active
  19. CHECK ((STATUS = 'TERMINATED' AND IS_ACTIVE = 'N') OR
  20. (STATUS IN ('PENDING', 'APPROVED', 'REJECTED') AND IS_ACTIVE IN ('Y', 'N')));
  21. -- 파트너십 사이클 체크 제약조건 추가
  22. ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
  23. ADD CONSTRAINT chk_partnership_cycle
  24. CHECK (PARTNERSHIP_CYCLE > 0);
  25. -- 인덱스 추가
  26. CREATE INDEX idx_vendor_influencer_status ON VENDOR_INFLUENCER_PARTNERSHIP(VENDOR_SEQ, INFLUENCER_SEQ, STATUS, IS_ACTIVE);
  27. CREATE INDEX idx_partnership_cycle ON VENDOR_INFLUENCER_PARTNERSHIP(PARTNERSHIP_CYCLE);