우리는 원래 Playlist 라는 재생 목록 테이블에서 “최근 재생 목록” 을 하나의 playlist 로 관리하고 있었다.
그런데 사용자가 노래를 재생했을 때 최근 재생 목록에서 해당 노래를 추가하거나 최상단으로 update를 해야하는데, 이때 재생한 시간을 담는 컬럼이 필요해진다. 그런데 그 컬럼은 오직 최근 재생 목록에만 필요하고 다른 재생 목록에는 필요가 없다.
그래서 최근 재생 목록을 playlist 로 관리하는 것은 맞지 않다고 판단했고 따로 테이블을 만들기로 결정했다.
그래서 이렇게 바뀌게 됐다.
최근 재생 목록을 관리하는 Recent_Played 테이블이 Music 과 User 테이블 사이에서 관계를 가지고 있는 것을 볼 수 있다. 이 테이블 안에는 어떤 사용자가 언제 어떤 음악을 들었는지를 저장하기 위해 music_id, user_id, played_at 컬럼을 가지고 저장한다.
그리고 음악과 재생 목록 사이에 관계를 가졌던 Music_Playlist 테이블에서는 updated_at 컬럼을 created_at 으로 바꾸면서 컬럼 이름이 더 직관적이고 자기 역할에 맞는 이름을 가지게 되었다.
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다.