(斜体については申し訳ありませんが、アンダースコアはそれらをトリガーできますが、段落の途中でそれを無効にする良い方法が見つかりません。斜体は無視してください。そこに置くつもりはありませんでした)
MySQL でハッシュテーブルを使用することについて心配する必要はありません。操作中に多数のアイテムをメモリに保持する場合は、単純なリストよりもはるかに高速に検索できるため、ハッシュテーブルを使用するのが適切なデータ構造です。
ただし、データベース レベルでは、ハッシュテーブルについて心配する必要はありません。レコードを保持してアクセスする最善の方法を見つけるのは MySQL の仕事なので、正しい情報を与える限り、MySQL は満足します。
データベース構造
items table would be: item_id, item_name
Primary key is item_id
users table would be: user_id, username
Primary key is user_id
user_items table would be: user_id, item_id
Primary key is the combination of user_id and item_id
Index on item_id
各項目は、項目テーブルに 1 つの (そして 1 つのみ) エントリを取得します。各ユーザーは、users テーブルで 1 つの (そして 1 つだけ) エントリを取得します。ユーザーが項目を選択すると、ユーザー項目テーブルに移動します。例:
Users:
1 | Bob
2 | Alice
3 | Robert
Items
1 | Headphones
2 | Computer
3 | Beanie Baby
したがって、ボブがヘッドホンを選択し、ロバートがコンピューターとビーニー ベイビーを選択した場合、user_items テーブルは次のようになります。
User_items (user_id, item_id)
1 | 1 (This shows Bob (user 1) selected headphones (item 1))
3 | 2 (This shows Robert (user 3) selected a computer (item 2))
3 | 3 (This shows Robert (user 3) selected a beanie baby (item 3))
users テーブルと items テーブルの user_id と item_id は主キーであるため、MySQL ではハッシュマップのように非常に高速にアクセスできます。主キーに user_id と item_id の両方を持つ user_items テーブルでは、重複がないことを意味し、高速アクセスを取得できるはずです (item_id のインデックスは問題ありません)。
クエリの例
この設定により、知りたいことを簡単に見つけることができます。ここではいくつかの例を示します。
項目 2 を選択したのは誰ですか?
SELECT users.user_id, users.user_name FROM users, user_items
WHERE users.user_id = user_items.user_id AND user_items.item_id = 2
ロバートが選んだものはいくつ?
SELECT COUNT(user_items.item_id) FROM user_items, users
WHERE users.user_id = user_items.user_id AND users.user_name = 'Robert'
各ユーザーとユーザーが選択したものをユーザー名順に並べたリストが必要です
SELECT user.user_name, item.item_name FROM users, items, user_items
WHERE users.user_id = user_items.user_id AND items.item_id = user_items.item_id
ORDER BY user_name, item_name
W3C のチュートリアルなど、SQL に関するガイドがインターネット上に多数あります。