我开发了一个友谊系统,其中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?
我的问题是哪种方式是效率和速度的最佳方式?使用数组列还是单独的表?
谢谢。
答案 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
。这是最灵活的方式,以后可以轻松扩展。