评论系统:具有正常关联的Hstore VS具有多态关联的简单属性

时间:2013-08-23 14:58:36

标签: ruby-on-rails activerecord ruby-on-rails-4

我会创建一个小型社交网络来分享照片和视频以及活动:

照片表属性为:title, description, name

视频表格属性为:title , description , name, runtime

事件表属性为:title, description, date_begining, date_end

正如您所看到的,树表之间存在一些重复,但这根本不重要。

所以每个模型(照片,视频,事件)应该有可能添加评论,我正在使用 Postgresql ,这样做的简单方法就是使用< strong> Polymorfic Association ,但我认为我也可以使用 hstore 并将所有这些(照片,视频,事件)视为包含共同内容的单个模型(例如Share)属性并将属性列添加到Shares表:

Shares ( title:string, description:string, name:string, properties:hstore)

有了这个,我想我不需要任何多边形关联,我可以在ShareComment模型之间添加一个简单的关系:

class Share < ActiveRecord::Base
     has_many :comments
end

class Comment < ActiveRecord::Base
     belongs_to :share
end

我的问题是最佳方法是什么(更快+性能)?如果我使用Hstore,如果我改变或迁移到另一个数据库管理系统,我有可能在将来发现问题吗?

2 个答案:

答案 0 :(得分:0)

我会选择像https://github.com/jackdempsey/acts_as_commentable这样的东西。

我不确定您是否可以在hstore中进行查询,但一般来说,将Comment保留为ActiveRecord模型可能会更方便。 (想想关联,查询和所有其他Activerecord的东西,而不是使用HStore。)

答案 1 :(得分:0)

Hstore更适合哈希数据,为您提供很好的属性灵活性。

对于具有固定属性的评论的简单用例(不超过正文,标题,用户,可评论?),我认为没有必要。

设置关联就像

一样简单
class Photo < ActiveRecord::Base
   has_many comments, as: :commentable
end

class Video < ActiveRecord::Base
   has_many comments, as: :commentable
end

class Comment < ActiveRecord::Base
   belongs_to :commentable, polymorphic: true
end