一个"不那么正常化' table vs两个规范化表 - rails

时间:2014-04-15 08:51:52

标签: ruby-on-rails database architecture psql

我坚持做出设计决定。似乎我的问题的答案总是取决于具体情况。这是我的情况:

在我的关系数据库中,我已经有了一个category和sub_category表。您可以创建链接到类别或子类别的帖子和评论。

在我的数据库中有一个帖子和一个评论表并在评论和帖子表中包含“类型”字段以区分帖子/评论是属于某个类别还是子类别是明智的。

或者将帖子和评论表拆分为category_post / category_comment和sub_category_post / sub_category_comment表是否更好?

我正在寻找能够优化速度的解决方案。我也希望遵循一个可扩展的架构模式,因为帖子和评论的大小可以很快增长。

由于

1 个答案:

答案 0 :(得分:0)

第一个,绝对是:一个帖子表和一个评论表。我会给每个人一个category_id字段和一个subcategory_id字段,因此每个字段都可以链接到一个类别和/或子类别。我认为你不需要类型字段。

我很想进一步简化它,甚至没有一个单独的子类别表:相反,make category是一个“树”类型模型,即在类别中有一个category_id字段,因此类别可以嵌套。那么你可以有a)多个类别的嵌套级别,这可能是某个时刻的要求b)有一个类别和子类别之间没有逻辑差异的情况,而不是数据中定义的那个(即他们如何嵌套),这使你的应用程序更简单(和简单=好)。

所以:

#fields - category_id
Post
  has_many :comments
  belongs_to :category

#fields - post_id, category_id
Comment
  belongs_to :post
  belongs_to :category  

#fields - parent_id
Category
  has_many :posts
  has_many :comments
  belongs_to :parent, :class_name => "Category", :foreign_key => :parent_id
  has_many :children, :class_name => "Category", :foreign_key => :parent_id