我正在开发一个应用程序,在该应用程序中,用户可以与其他用户建立两种关系中的一种——favoriting
或following
——我想相反的操作is favorited by
和is being follow by
也会成为我想要调用的方法。
在制作用户模型时,我应该考虑哪些因素?具体来说,我应该有一个模型,关系,指定:
Relationships
user_1 | relationship_type | user_2
其中relationship_type是favoriting
还是following
?
或者我应该有两个单独的型号:
Favorites
user_1 | user_2
Follows
user_1 | user_2
我对数据库了解不多,所以我可以问一下在这两种潜在的设置之间进行选择时需要考虑什么吗?2是否比3标准化得多,或者更少?这有关系吗?在什么情况下?
更新
很抱歉,我突然想到:假设有第三种关系,比如"reviews"/"reviewed_by"——问题是关于3种,而不是2种不同的双向关系类型。增加关系类型的数量会影响这一点吗?
Favorites
user_1 | user_2
Follows
user_1 | user_2
Reviews
user_1 | user_2
我会在一个表中选择两个不同的模型,即使用单表继承模式。通过这种方式,您可以得到一个数据库表,它看起来与您的选项#1很接近,并且在对象模型方面有一个干净的模型,其中有两个不同的Favorites和Follows类,从而产生更清晰的代码&命名。
至于命名,Michael Hartl在他的例子中使用了"追随者"one_answers"followed_users",这似乎与你所追求的非常相似:http://ruby.railstutorial.org/chapters/following-users#top