1 回答
TA贡献1887条经验 获得超5个赞
任务很普通。您想存储 A|B 与 B|A 具有相同含义的对。由于表有列,两者之一将存储在第一列中,另一个存储在第二列中,但是谁先存储谁第二,为什么?
一种解决方案是始终首先存储较小的 ID,然后存储较大的 ID:
用户 ID1 | 用户名2
--------+--------
1 | 2
2 | 5
2 | 6
4 | 5
这样做的好处是您每对只存储一次,感觉很自然,但缺点是您必须在两个 couns 中查找一个人,有时在第一列中找到他们的朋友,有时在第二列中找到他的朋友。这可能会使查询变得笨拙。
另一种方法是冗余存储对(通常使用触发器):
用户 ID1 | 用户名2
--------+--------
1 | 2
2 | 1
2 | 5
2 | 6
4 | 5
5 | 2
5 | 4
6 | 2
在这里查询更容易:在一个列中查找此人并在另一列中找到他们的朋友。但是,将所有对都复制看起来有点奇怪。而且你依赖于一些人不喜欢的触发器。
第三种方法是存储编号的友谊:
友谊 | 用户身份
-----------+--------
1 | 1
1 | 2
2 | 2
2 | 5
3 | 2
3 | 6
4 | 4
4 | 5
这为配对中的两个用户提供了相等的价值。但是为了找到朋友,你需要通过:为用户找到朋友,在这些朋友中找到朋友。但是,设计非常清晰,甚至可以扩展,即您可以拥有三个四个或更多用户的友谊。
没有一种方法确实比另一种好得多。
添加回答
举报