0

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

  1. 我知道我们不应该将他们输入的逗号分隔字符串作为 aVARCHAR存储在数据库中,那么应该如何存储呢?ItemsList是否应该创建一个每行都是一个新表UserID -> ItemName(例如,如果用户 ID 101输入“ Matches, Gun, Alcohol ”,我们将向ItemsListas添加 3 行101 -> 'Matches', 101 -> Gun, 101 -> Alcohol)?

  2. 如果是这样,PRIMARY KEY该表应该使用什么?

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

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

4

2 回答 2

0

您能否将输入作为 JSON 字符串存储在表的 TEXT 列中?这样,您可以在用户需要添加新项目时检索和显示/更新 JSON 字符串。在这样做时,您不会为每个输入创建一个新行。在这种情况下,主键是用户 ID,由于 PK 已经是索引,因此您不需要创建额外的索引。

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

于 2013-05-07T15:43:32.360 回答
0
  1. 是的。

  2. 假设一个表ItemsList有两列UserIDItemName,主键应该是(UserID, ItemName)(两列)

  3. 除了主键,在ItemName.

  4. 你的要求有点过分了。请建立您的最终表格结构,尝试一些东西并返回您尝试过的一些代码。

于 2013-05-07T15:54:38.370 回答