这个任务很常见。您想要存储 A|B 与 B|A 具有相同含义的对。由于表有列,两者中的一个将存储在第一列中,另一个将存储在第二列中,但是谁先存储,谁第二列,为什么呢?
一种解决方案是始终先存储较小的 ID,然后存储较大的 ID:
用户 ID1 | 用户ID2 --------+-------- 1 | 2 2 | 5 2 | 6 4 | 5
这样做的优点是您只将每对存储一次,感觉很自然,但缺点是您必须在两个列中查找一个人,有时在第一列中有时在第二列中找到他们的朋友。这可能会使查询有点笨拙。
另一种方法是冗余存储这些对(通常使用触发器):
用户 ID1 | 用户ID2 --------+-------- 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
这为配对中的两个用户提供了同等的价值。但要找到好友,需要经过两道关卡:找到用户的好友,找到这些好友中的好友。然而,设计非常清晰,甚至可扩展,即你可以拥有三四个或更多用户的友谊。
没有一种方法真的比另一种更好。
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |