0

私は、ユーザーが好きな音楽ジャンルの数を選択できる新しい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のデータ型はありますか?

4

2 に答える 2

4

説明するような相互参照テーブルを使用する必要がありgenre_to_userます。これにより、データベースがレコードを検索するのがはるかに高速になります。

「膨大な数のレコード」についてはあまり心配しないでください。それがデータベースの目的です:-)

于 2012-05-05T07:02:18.237 に答える
0

あなたが説明するgenre_to_userのような相互参照テーブルを作成すると、検索を逆にすることができるという追加の利点があります. つまり、genre_id が 1 のユーザーまたはユーザー数を調べることができます。

于 2013-07-12T21:43:28.907 に答える