사용자가 좋아하는 음악 장르를 선택할 수있는 새로운 웹 사이트 용 데이터베이스를 설계하고 있습니다. 각 장르마다 관련 ID가 있으므로 John, Pop, Rock 및 R & B를 좋아하는 사람은 1, 2 및 3을 좋아합니다.MySQL 테이블에 이러한 여러 값을 어떻게 저장해야합니까?
사용자 테이블에 저장하는 가장 좋은 방법은 무엇입니까?
genre_id | user_id
------------------
1,2,3 | 1
을하고 PHP에서 나는 쉼표 분리 문자에이 값을 폭발 그런 식으로 개별 ID를 잡아 :
는 지금은이처럼이있다. 그러나 이것은 분명히 그것에 대해 올바른 방법이 아닙니다.
은 내가 "genre_to_user"라는 별도의 테이블을 가질 수 있습니다 알고 각 장르 요한은 내가 너무 좋아하는 테이블에 항목을 입력 할 수 있습니다 추천했습니다 :
genre_id | user_id
------------------
1 | 1
2 | 1
3 | 1
그리고 요한은 내가 할 수있는 좋아하는 모든 것들을 얻을 수 do SELECT * FROM 'genre_to_user where user_id = 1
하지만 장기적으로 볼 때이 테이블이 엄청난 수의 레코드로 채워지는 경우에는 그렇게 효율적이지 않을 것이라고 생각합니다. 그리고 같은 페이지에 최대 30 명의 사용자가있는 목록 페이지의 각 사용자에 대해이 계산을 한 번 수행 할 것입니다. 이 페이지는 사이트 전체에 걸쳐 있습니다.
그렇다면이 문제를 해결하는 가장 좋은 방법은 무엇입니까 (효율적인)?
또한 mysql에 varchar 필드 안에 쉼표로 구분 된 값을 저장하는 대신 모든 데이터 유형이 저장되어 있습니까?
"엄청난 수의 레코드"- 얼마나 많은 부분이 있습니까? 왜냐하면 나는 사용자가 선택할 수있는 700 만 개의 별개의 장르를 의심하기 때문입니다. 인덱스가 예상 한대로 작동하게하십시오 (심지어 700 만 개는 데이터베이스에별로 도움이되지 않습니다). – Blake
사실, 내가 언급 한 두 번째 해결책이 아마도이 문제를 해결하는 가장 좋은 방법이라고 생각합니다. 일반적으로 user_id 열에 인덱스가 있으므로 검색 속도가 매우 빠릅니다. –