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

Rom*_*man 8 mysql

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

我找到了两种方法,第一种是:

faver_id faved_id
1       10
1       31
1       24 
10      1
10      24
Run Code Online (Sandbox Code Playgroud)

我不喜欢这种方法,因为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
Run Code Online (Sandbox Code Playgroud)

如果用户喜欢MySQL查询的其他用户,我可以使用这些收藏并在php中爆炸()或搜索它们 select count(user_id) from users where favs LIKE '% 23 %' and user_id=10;

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

你能给我一些建议吗?

Age*_*rum 14

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

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

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

编辑:

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