【问题标题】:How to implement Friendship Structure in a website如何在网站中实现友谊结构
【发布时间】:2015-12-22 06:38:31
【问题描述】:

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

也就是说,用户是其他用户的朋友,他们的 id 为 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?

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

谢谢。

【问题讨论】:

  • 当然要分开表!
  • 哦,不!不是数据库中非规范化数据的另一个实例.....期待有关如何解决它提出的所有问题的一系列问题
  • 你想用 PHP 还是 Ruby 来做这个?
  • @PHPWebDev101 好吧,数组列是用 PHP 开发的,但现在我正在用 rails 重写整个后端。所以,不管是什么最好的方法,我都会在 Rails 中开发它。
  • 是的,我建议这样做;列中的逗号分隔值会产生大量编码问题和性能问题,可以通过将数据规范化到单独的表中轻松消除这些问题

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


【解决方案1】:

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

1# 你有一个模型 User 和一个列 'friends' 与同一张表中的朋友的 user_ids。

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

2# 你有一个模型User 和一个列'is​​_friends_with',同一张表中有朋友的user_ids。

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

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

如果您想在两个方向上查询友谊,这将是快速有效的。也可以扩展 Friendship 模型以存储一些其他数据(例如,当用户成为朋友或他们从哪里认识时)。但是,如果用户有 100 个朋友,则您的友谊表需要 100 行。

如果你还不知道如何处理所有的友谊,你应该选择#3。这是最灵活的方式,以后也很容易扩展。

【讨论】:

    猜你喜欢
    • 2015-01-25
    • 2013-11-04
    • 1970-01-01
    • 2020-03-15
    • 2010-12-30
    • 2011-08-02
    • 2013-10-20
    • 2013-05-18
    • 2015-12-11
    相关资源
    最近更新 更多