如何在MySQL中存储每个用户的项目列表?

时间:2013-05-07 15:38:19

标签: mysql row query-optimization

如果网站中的每个用户都可以输入逗号分隔的他们输入的项目列表(不是来自预定列表!),我们应该如何为每个用户存储该列表MySQL,以便项目可以在具有相同项目的用户之间进行匹配吗?

  1. 我知道我们不应该将他们在数据库中作为VARCHAR输入的逗号分隔字符串存储起来,那么它应该如何存储?是否应创建新表ItemsList,其中每行为UserID -> ItemName(例如,如果用户ID 101 输入“匹配,枪支,酒精”,我们会向ItemsList添加3行101 -> 'Matches', 101 -> Gun, 101 -> Alcohol)?

  2. 如果是,该表应该使用PRIMARY KEY

  3. 应该设置indexes以尽可能快地检索和匹配项目?

  4. 最后,应该使用什么查询来查找至少有一个项目与另一个用户共同的所有用户?

2 个答案:

答案 0 :(得分:0)

您可以将输入存储为表格中TEXT列中的JSON字符串吗?这样,只要用户需要添加新项,您就可以检索并显示/更新JSON字符串。在执行此操作时,您不会为每个输入创建新行。这种情况下的主键是用户ID,而PK已经是索引,您不需要创建其他索引。

由于输入将以逗号分隔,您可以将逗号拆分为列表,然后将列表序列化为JSON对象(然后存储在DB中)。

答案 1 :(得分:0)

  1. 假设某个表ItemsList包含两列UserIDItemName,主键应为(UserID, ItemName)(两列)

  2. 除主键外,在ItemName上添加索引。

  3. 你问的有点太多了。请建立你的最终表结构,尝试一些东西,然后回过头来尝试一些代码。