我有一个照片库.我想添加"添加到收藏夹"按钮 - 因此用户可以将其他用户添加到他/她的收藏夹中.然后我希望每个用户都能够观看他喜欢的用户列表,以及能够看到谁(用户列表)将此用户添加到收藏夹.
我找到了两种方法,第一种是:
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
想想这个.你反对使用第一种方法的论点是你的表可能会变得太大,但你继续说,如果你使用第二种方法,你可以运行通配符查询来查找包含某些内容的字段.
第二种方法强制进行全表搜索,并且无法索引.使用第一种方法,您只需在每个列上打上索引,就可以了.第一种方法扩展很多,很多,很多比第二个好.由于缩放似乎是你唯一关注的问题,我认为答案是显而易见的.
采用第一种方法.在任何地方都使用了多对多表,这是有充分理由的.
编辑:
另一个问题是第二种方法是将许多工作交给应用程序维护数据库.在某些情况下这很好,但您所谈论的案例是数据库擅长的事情.你只会重新发明轮子,而且非常糟糕.