分类话题,如何组织最有效?
以 Ruby China 源代码为基础,假设欲以 Topic 为基础,拓展开来:电影、书籍、游戏三类 Topic (除了:title 和:body 等共有属性外,还有一些特别属性,例如电影会有导演、主演、片长等属性)。以下有几种方案:
如果使用前两种方案,有没有可能使用:after_create 或:after_save 来设置"_type"值。
方法一:单表继承 (最简单)
class Movie < Topic
...
end
class MoviesController < TopicsController
...
end
方法二:共有属性单表继承,再 referenced 或 embeded 特别属性
class Movie < Topic
has_one movie_profile
...
end
class MovieProfile
belongs_to movie
...
end
class MoviesController < TopicsController
...
end
方法三:不使用类继承,把类别作为属性 (例如::category),共用一表
class Movie
...
field :category, :type => :string
...
end
方法四:不使用类继承,把类别作为属性 (例如::category),共有属性一表,再 referenced 或 embeded 分别储存
class Movie
...
field :category, :type => :string
embeds movie_profile
...
end
class MovieProfile
...
embeded_in movie
...
end
这四种方案,哪种方案最优?各有什么优缺点?