我搜索了这个问题,Stack Overflow上已经有很多问题了。但他们都提出了相同的方法。
他们正在创建一个表friend
,并有三列from
,to
和status
。这有两个目的:如果status
被接受,谁发送了朋友请求以及谁是朋友。
但这意味着如果有m
个用户,并且每个用户都有n
个朋友,那么我会在好友表中有mn
行。
我的想法是将好友列表存储在text
列中。对于每个用户,我只有一行和friends
列,其中所有已接受的朋友的ID都由一个字符分隔,请说|
我可以将其展开以获取所有朋友列表。同样,我将有另一个名为pending requests
的列。接受请求后,ID将从pending requests
移至friends
列。
现在,这应该会显着减少表格中的条目和搜索时间。
唯一的开销是当我必须删除朋友时,我将不得不检索朋友字符串,搜索要删除的朋友的ID,删除ID并更新列。但是,如果我假设一个用户不能超过2000个朋友,这几乎可以忽略不计。
我认为我肯定会忘记某些情况,否则这种方法会有一定的陷阱。所以请更正。
答案 0 :(得分:2)
答案是否定的!不要试图实现这个想法 - 它完全是灾难。
我将更准确地描述原因:
|
分开的密钥。如果您想显示包含朋友名字的列表怎么办?您必须获取列表,将其展开并向DB发出另一个n
个查询。使用关系表from | to | status
,您可以使用一个JOIN
。SELECT + UPDATE
而不是INSERT
。搜索时间?
请做一些测试。使用WHERE + PRIMARY KEY
进行搜索非常快。