在MySQL中存储用户“收藏夹”的最佳方法

时间:2010-12-11 06:25:47

标签: mysql

我有一个照片库。我想添加“添加到收藏夹”按钮 - 因此用户可以将其他用户添加到他/她的收藏夹中。然后我希望每个用户都能够观看他喜欢的用户列表,以及能够看到谁(用户列表)将此用户添加到收藏夹。

我发现了两种方式,第一种方式是:

faver_id faved_id
1       10
1       31
1       24 
10      1
10      24

我不喜欢这种方法因为 1)将来会有很多重复的2)非常大的表(如果有至少1001个用户,每个人都喜欢其他1000个用户= 1 001 000条记录),我认为这会减慢我的基础。

第二种方式是:

user_id   favs
1          1  23 34 56 87 23
10         45 32 67 54 34 88 101

如果用户喜欢其他用户通过MySQL查询select count(user_id) from users where favs LIKE '% 23 %' and user_id=10;

,我可以使用这些收藏并在php中爆炸()或搜索它们

但我觉得第二种方式在MySQL术语中并不是非常“正确”。

你能告诉我什么吗?

3 个答案:

答案 0 :(得分:13)

想一想。你反对使用第一种方法的论点是你的表可能会变得太大,但你继续说,如果你使用第二种方法,你可以运行通配符查询来查找包含某些东西的字段。

第二种方法强制进行全表搜索,并且无法索引。使用第一种方法,您只需在每个列上打上索引,就可以了。第一种方法比第二种方法更好地扩展,更多更多。由于缩放似乎是你唯一关注的问题,我认为答案是显而易见的。

采用第一种方法。在任何地方都使用了多对多表,这是有充分理由的。

编辑:

另一个问题是第二种方法是将许多工作交给应用程序维护数据库。在某些情况下这很好,但您所谈论的案例是数据库擅长的事情。你只会重新发明轮子,而且非常糟糕。

答案 1 :(得分:1)

嗯,当您想要删除或进行更改时,第二种方式并不那么容易,但就MySQL而言它是正确的。 但是,Joomla甚至在同一个字段params中包含了不同的信息日期。

答案 2 :(得分:1)

绝对是第一种方式。