1

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

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

视频表属性是:title , description , name, runtime

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

如您所见,树表之间存在一些重复,但这一点都不重要。

所以每个模型(照片、视频、事件)都应该有可能添加评论,我正在使用Postgresql,简单的方法是使用Polymorfic Association,但我认为我也可以使用hstore并处理所有这些(照片、视频、事件)就像一个包含公共属性的模型(例如共享),并在共享表中添加一个属性列:

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,如果我将来更改或迁移到另一个数据库管理系统,我有可能会发现问题吗?

4

2 回答 2

0

我会选择https://github.com/jackdempsey/acts_as_commentable之类的东西。

我不确定您是否可以在 hstore 中查询,但总的来说,将其保留Comment为 ActiveRecord 模型可能更方便。(想想与使用 HStore 相比,您获得的关联、查询和所有其他 Activerecord 内容。)

于 2013-08-23T15:21:14.497 回答
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
于 2013-08-23T15:31:57.270 回答