2013-08-23 40 views
1

我想創建一個小型的社交網絡分享照片和視頻,並同時事件:評論系統:Hstore與正常的關聯VS與polymorfic協會簡單的屬性

照片表的屬性有:title, description, name

視頻表屬性:title , description , name, runtime

事件表的屬性有:title, description, date_begining, date_end

,你可以看到有樹TABL之間有一些重複ES,但這根本不重要。

所以每個模型(圖片,視頻,事件)應該有可能添加評論,我使用PostgreSQL的和簡單的方法來做到這一點是使用Polymorfic協會,但我還認爲,我可以使用hstore和治療所有這些(照片,視頻,事件)的像一個單一的模型(例如共享),其中包含的公共屬性和屬性列添加到股份表:

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

與,我想我不需要任何polymorfic協會,我可以ShareComment模型之間添加一個簡單的關係是這樣的:

class Share < ActiveRecord::Base 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :share 
end 

我在這裏的問題是,什麼是最好的方法做到這一點(快+性能)?如果我使用Hstore,如果我將更改或遷移到另一個數據庫管理系統,那麼我有可能在未來發現問題?

+0

我希望看到有關性能,以及一些基準。 我已經看過一些討論,如果存儲爲HStore,那麼真正意義上的一大堆評論會表現得更好,但我沒有源代碼了...... –

回答

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 
0

我會去像https://github.com/jackdempsey/acts_as_commentable

我不確定您是否可以在hstore中進行查詢,但通常情況下,將Comment保留爲ActiveRecord模型可能會更方便。 (考慮關聯,查詢和所有其他Activerecord的東西,而不是使用HStore。)