我正在寻找一种优雅的方法来在 Rails 中建模对称关系(如用户之间的友谊)(尽管这可能更像是一个一般的数据库问题)。我知道几种方法,但没有一种方法看起来很优雅:
使用用户的外键创建 user_user 关系表。我不喜欢它,因为它本质上是一个不对称的解决方案。我看到了一种方法,它强制具有较低 id 的用户进入第一列,另一个进入第二列,并使用 union 从两端查询关系。这感觉就像一个黑客。
创建一个友谊表,其中每一行代表一个关系,并且:
- 一对一:向用户表添加一列以引用关系
- 对于多对多:添加一个 user_friendship 表,该表将保存用户和友谊表的外键。
这种方法的问题是看起来很麻烦,而且没有任何东西强制要求友谊将完全由 2 个用户共享。
我希望有比这些更优雅的解决方案。有任何想法吗?