Rails模型可以有太多关联吗?

时间:2010-08-27 18:16:29

标签: ruby-on-rails associations

道歉,如果这个问题有点愚蠢,但如果一个应用程序有一个或多个关联的模型,是否有任何负面影响?例如,对于需要用户模型的复杂应用程序(例如,社交网站),模型可能具有15个以上的关联(has_many :posts, has_many :messages, has_many :photos, has_many :friends等等)是合理的。如果一个模型与其他模型密切相关,这是否会对应用程序的性能产生负面影响?如果是这样,最小化问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

Rails中的Models之间的关联实际上只是在幕后操纵id值。这些是非常高性能的操作,特别是如果您的数据库支持它,您花时间设置外键关系。除非您要求,否则ActiveRecord也不会加载任何内容,因此通常只有在您处理这些关系时,它们才会被转换为SQL服务器的JOIN。

由于您的示例中的帖子,消息,照片或朋友已创建,ActiveRecord会自动为您设置user_id列。这就是has_many协会所涉及的一切。

过早优化是万恶之源。在您确定了分析瓶颈之前不要担心。

答案 1 :(得分:3)

嗯,我能提供的第一条建议是快速制作原型,看看它是如何运行的。

对于关联的限制,ActiveRecord默认使用延迟关系。因此,加载用户不会自动加载帖子,消息,照片,朋友等,直到您要求它们为止。这对您来说通常非常有用,因为您可能不需要在消息页面上显示所有照片。

以下是一些链接,其中包含有关优化ActiveRecord的一些提示,以获取更深入的信息: http://www.ibm.com/developerworks/web/library/wa-rails3/