use*_*823 5 sql erd ruby-on-rails
我不太确定如何表达这一点,但有没有一种很好的方法来实现一个表,其中列基本上是可以互换的?
示例:您有一个用户模型,并希望允许两个用户成为"朋友".对我来说,显而易见的方法是拥有一个包含两列('friend1'和'friend2')的表,每个列包含一个User的键.因为你必须检查"(friend1 = user1 AND friend2 = user2)OR(friend1 = user2 AND friend2 = user1)",这使得说"是user1和user2朋友"之类的东西很尴尬.它会起作用,但对我来说这似乎很尴尬,每当你想要从那张桌子上得到一些东西时,你就会看到两个列.这样做有更优雅的方式吗?
小智 4
建立友谊关系时的一个关键选择是确定它是否是双向的。Twitter 关注是单向友谊的一个例子,而 Facebook 友谊是双向的。听起来你致力于双向,所以你有两个选择:
1)检查两个方向
select *
from friendships
where (friend1 = 123 and friend2 = 456) OR (friend2 = 123 and friend1 = 456)
Run Code Online (Sandbox Code Playgroud)
2)始终将较低的user_id放入friend1,将较高的user_id放入friend2,那么您的测试只需要检查一个方向。这维护起来有点棘手,所以我只会出于性能原因才这样做。
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |