如何在网站中实施友谊结构

时间:2015-09-24 15:18:08

标签: ruby-on-rails logic social-networking

我开发了一个友谊系统,其中users表有一个友谊列。在本专栏中,我通过用逗号分隔将用户的id存储在数组中。例如:1,5,15,20

所以这意味着,用户是其他用户的朋友,其身份为1,5,15,20。但还有另一种方法可以做到这一点。创建友谊表并将所有内容存储在那里。就像在这个例子中一样:

https://stackoverflow.com/questions/25101089/mutual-friendship-rails-4

How to Implement a Friendship Model in Rails 3 for a Social Networking Application?

我的问题是哪种方式是效率和速度的最佳方式?使用数组列还是单独的表?

谢谢。

1 个答案:

答案 0 :(得分:1)

效率和速度取决于您使用此数据的方式。

1#您有一个模型User和一个列'朋友'使用同一个表中的朋友的user_id。

读取速度快,无需太多存储空间。但是你必须决定应该在哪个表行中存储数据,因为你绝对不想在两个不同的表行中存储/管理相同的数据。如果您只需要像User.friends这样的方法,这是一种快速有效的存储ID的方法。但是,如果您希望使用User.is_friends_with之类的方法,则必须查询用户表中的每一行。这既不快也不高效。

2#您有一个模型User和一个列' is_friends_with'使用同一个表中的朋友的user_id。

#1相同,但User.is_friends_with会很快,而User.friends会查询表格中的所有行。

3#您有一个模型User和一个模型Friendship

如果您想在两个方向查询友谊,这是快速有效的。它也可以扩展Friendship模型以存储其他一些数据(例如,当用户是朋友或他们彼此认识的时候)。但是如果一个用户有100个朋友,那么你需要100行你的友谊表。

如果您还不知道如何处理所有友谊,那么您应该使用#3。这是最灵活的方式,以后可以轻松扩展。