我会创建一个小型社交网络来分享照片和视频以及活动:
照片表属性为: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)
有了这个,我想我不需要任何多边形关联,我可以在Share
和Comment
模型之间添加一个简单的关系:
class Share < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :share
end
我的问题是最佳方法是什么(更快+性能)?如果我使用Hstore,如果我改变或迁移到另一个数据库管理系统,我有可能在将来发现问题吗?
答案 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