mysql数据库设计,用于跟踪用户是否看到项目

mysql数据库设计,用于跟踪用户是否看到项目,mysql,database,database-design,Mysql,Database,Database Design,我只想向用户显示他尚未查看的内容。 我考虑存储一个字符串,其中包含用户查看过的以“,”分隔的项目的ID,但我想我不知道该字符串的可能长度。 我能找到的另一种选择是像日志一样存储它。一张桌子 user_id | item_id 1 | 1 2 | 2 1 | 2 哪种方法对大约一万个用户和数千个项目更合适。这样的配对表只有1000万行。这是“中等规模”的表去 有 ,如果你不超过10K和1K,考虑使用 SimultUnSube < /C> >(最多64K的2字节

我只想向用户显示他尚未查看的内容。 我考虑存储一个字符串,其中包含用户查看过的以“,”分隔的项目的ID,但我想我不知道该字符串的可能长度。 我能找到的另一种选择是像日志一样存储它。一张桌子

user_id | item_id
1       | 1
2       | 2
1       | 2

哪种方法对大约一万个用户和数千个项目更合适。

这样的配对表只有1000万行。这是“中等规模”的表去


,如果你不超过10K和1K,考虑使用<代码> SimultUnSube < /C> >(最多64K的2字节)。或者,更保守地说,

MEDIUMINT UNSIGNED
(3个字节最多16M)。

我强烈支持您向我们展示的标准化上表。您可能认为它效率低下,但实际上它应该使查询相对容易。将项目存储在CSV中的替代方案无法很好地扩展。除非有维护持久历史的硬要求,否则我会添加一个时间戳,以便可以对项目表删除旧数据和级联删除外键约束。
PRIMARY KEY(user_id, item_id),
INDEX(item_id, user_id)