Project

General

Profile

Actions

새기능 #525

open

[데이터/스키마] song UNIQUE(song_name) 동명이곡 병합 해소 — (song_name, artist) 복합키

Added by joungmin ko about 2 months ago. Updated about 2 months ago.

Status:
해결
Priority:
보통
Assignee:
-
Start date:
06/27/2026
Due date:
% Done:

100%

Estimated time:

Description

#519에서 분리(스키마 마이그레이션, Design-First 필요).

문제

song.song_name이 UNIQUE라 동명이곡(예: 'Hello','Stay','그날')이 단일 song.id로 병합됨. 장르/ENGLISH_TITLE/가사가 song_id 기준이라 무관한 곡끼리 공유되고, findSong/findSongByName이 서로 다른 곡의 차트 이력을 합침. 적재 스크립트가 song NOT IN (SELECT song_name FROM song)로 삽입(load_*/reload_billboard).

방향(설계 필요)

  • song 식별을 (정규화 song_name, artist) 복합 또는 별도 정규화키로 변경.
  • 기존 데이터 마이그레이션(병합행 분리, FK 재매핑) — #524 수준 위험, 신중한 설계·검증 필요.
  • Design-First: 설계서 작성 후 구현. [AI 등록]
Actions #1

Updated by joungmin ko about 2 months ago

  • Status changed from 신규 to 해결
  • % Done changed from 0 to 100

구현 완료(커밋 3073c7a). 설계 리뷰(REJECT) must-fix M1~M5 반영 후 마이그레이션 실행.

  • scripts/migrate_525_song_composite_key.py: 단일 트랜잭션 + 검증 게이트 + 백업(*_bak_525). 전-참조 universe(7테이블)로 충돌 7,254 song 분리 → 신규 11,818행, song_id 재매핑(BB 46,345/Melon 13,609/SA 10,747/lyrics 26/favorites 4), SA reconcile 5,280.
  • 검증 게이트 PASS: 재귀속 불일치 0, 충돌 0, dangling FK 0, 복합중복 0, 행수 정합 → 커밋. UNIQUE(song_name)→UNIQUE(song_name,artist_id) 교체.
  • forward-fix(M4): 적재 4스크립트 (song_name,artist) 키.
    라이브 검증: 'Stay' 아티스트별 분리, /songByName 아티스트별 결과, /artist·/list 정상.
    백업·song_split_map 보존(롤백/딥링크 호환). 후속: 분리행 genre/english_title 재도출 → #528. [AI 조치]
Actions

Also available in: Atom PDF