2010-10-05 58 views
1

我將標籤添加到多個模型(帖子,文章,照片等)。我知道軌道標記插件,但寧願不使用它們,因爲它們不能滿足我的特定需求。向rails中的多態模型添加標籤

我知道實現多態標記支持的典型方式是使用2個表標記,標記並設置相應的has_many:通過關係。

但是,當我想到更多 - 這裏是我的問題:是否需要標籤表。有沒有隻用表的Tagging的任何缺點,並有一個像這樣我的關係:

Post, Article, Photo 
has_many :taggings 

Taggings (attributes) 
taggable_type 
taggable_id 
tag_name 

那我就只需要插入管理/刪除自己的Tagging。基本上,我想直接將Tag_name屬性存儲在Taggings表中,而不是標籤表。

優點是,消除管理表,沒有連接來獲取標籤名稱(雖然我會做很多SELECT DISTINCTs)。

你能讓我知道你對這個設計的想法嗎?

謝謝。

回答

1

那些SELECT DISTINCTs將是一個缺點。你會發現它建立一個標籤列表的速度很慢,不僅僅是在建立索引鏈接的情況下(我認爲你可以通過片段緩存解決),而且還可以用於自動完成。

我想說的更重要的缺點是,如果您使用的是應用內搜索解決方案(例如Xapian),您需要對Taggings表進行索引,這可能會產生一些奇怪的結果,或者根本沒有索引標籤,這可能會破壞標籤的點,取決於你如何使用它們。

當然,這絕不是說你絕對不應該這樣做;跳過額外的連接會使一些事情變得更快。看你的成本並決定它是否值得你是聰明的。