我正在为多个模型添加标签(帖子,文章,照片等)。我知道rails标记插件但不想使用它们,因为它们不能满足我的特定需求。
我知道实现多态标记支持的典型方法是使用2个表Tag,Taggings并设置适当的has_many:通过关系。
但是,正如我想的那样 - 这是我的问题:是否需要一个Tags表。使用Taggings表是否存在任何缺点,并且我的关系是这样的:
Post, Article, Photo
has_many :taggings
Taggings (attributes)
taggable_type
taggable_id
tag_name
然后我只需要自己管理插入/删除标记。基本上,我只想将tag_name属性直接存储在Taggings表中而不是Tags表中。
优点是消除了管理表,没有连接来获取标签名称(虽然我会做很多SELECT DISTINCT)。
你能告诉我你对这个设计的想法吗?
感谢。
答案 0 :(得分:1)
那些SELECT DISTINCT将成为一个缺点。您将发现构建标记列表的速度很慢,而不仅仅是建立链接索引(我可以通过片段缓存来处理),还可以自动完成。
我认为更重要的缺点是,如果你使用的是应用内搜索解决方案(例如Xapian),你需要索引Taggings表,这可能会产生一些奇怪的结果,或者不是索引标签,根据你使用它们的方式,可能会破坏标签的位置。
当然,没有人说你绝对不应该这样做;跳过额外的连接将使一些事情变得更快。你很聪明地看待成本并决定它是否值得。