31 lines
1.6 KiB
SQL
31 lines
1.6 KiB
SQL
|
|
-- 실행 순서: migration_2026-07-30_ssulbox.sql 의 §1(ssul_content 생성) 이후.
|
|
-- 대상: MySQL 8.0.16+ (CHECK 가 실제로 강제되는 버전. 운영은 8.4)
|
|
|
|
-- 1. content_id 추가 + FK.
|
|
-- upload_seq 채번 인덱스 (content_id, social_account_id, upload_seq) 는
|
|
-- 선행 컬럼이 content_id 라 FK 인덱스 요건도 겸한다(단독 인덱스 불필요 —
|
|
-- video_reaction 때는 유니크가 user_uuid 선행이라 단독이 필요했던 것과 다르다).
|
|
ALTER TABLE `social_upload`
|
|
ADD COLUMN `content_id` BIGINT NULL
|
|
COMMENT '썰박스 콘텐츠 id (ADO2 업로드면 NULL)' AFTER `video_id`,
|
|
ADD CONSTRAINT `fk_social_upload_content`
|
|
FOREIGN KEY (`content_id`) REFERENCES `ssul_content` (`id`) ON DELETE CASCADE,
|
|
ADD INDEX `idx_social_upload_content_seq`
|
|
(`content_id`, `social_account_id`, `upload_seq`);
|
|
|
|
-- 2. video_id 를 nullable 로. 기존 행은 전부 ADO2 업로드라 값이 있어 영향 없다.
|
|
ALTER TABLE `social_upload`
|
|
MODIFY COLUMN `video_id` INT NULL COMMENT 'ADO2 영상 id (썰박스 업로드면 NULL)';
|
|
|
|
-- 3. "정확히 하나만 채워짐" 강제. 이게 없으면 둘 다 NULL 이거나 둘 다 채워진
|
|
-- 행이 조용히 생긴다.
|
|
ALTER TABLE `social_upload`
|
|
ADD CONSTRAINT `ck_social_upload_one_target`
|
|
CHECK ((`video_id` IS NULL) <> (`content_id` IS NULL));
|
|
|
|
-- 4. 과도기 테이블 제거 (로컬 등 이미 만든 환경만 해당. 운영은 애초에 안 만든다).
|
|
-- ⚠️ 행이 남아 있으면 social_upload 로 이관한 뒤에 지울 것.
|
|
DROP TABLE IF EXISTS `ssul_social_upload`;
|
|
|