私は、ユーザーが好きな音楽ジャンルの数を選択できる新しいWebサイトのデータベースを設計しています。各ジャンルにはIDが関連付けられているため、ジョンがポップ、ロック、R&Bが好きな場合は、1、2、3が好きです。
これらをusersテーブルに保存するための最良の方法は何でしょうか?
今私はこれらをこのように持っています:
genre_id | user_id
------------------
1,2,3 | 1
PHPでは、これらの値をコンマ区切り文字で分解し、その方法で個々のIDを取得します。しかし、これは明らかにそれを実行するための正しい方法ではありません。
「genre_to_user」という個別のテーブルを作成できることはわかっています。ジョンが好きなジャンルごとに、次のようにそのテーブルにエントリを入力できます。
genre_id | user_id
------------------
1 | 1
2 | 1
3 | 1
そして、ジョンが好きなものをすべて手に入れるために、私はできるSELECT * FROM 'genre_to_user where user_id = 1
しかし、そのテーブルが膨大な数のレコードでいっぱいになると、長期的にはこれがあまり効率的ではないと思います。また、同じページに最大30人のユーザーがいるリストページで、ユーザーごとに1回この計算を行うためです。そして、これらのページはサイト全体にあります。
では、これを実行するための正しい(そして効率的な)方法は何でしょうか?
さらに、varcharフィールド内に値を固定するのではなく、コンマ区切りの値を格納するために作成されたmysqlのデータ型はありますか?