0

我正在开发一个 Ruby on Rails 项目。该项目有一个名为“Post”的主数据库表。

此表用于将问题、答案、评论和公告存储为不同的帖子类型。目前我们只使用一种模型来访问数据。但是在系统上工作时感觉很混乱。因为每种帖子类型都有一些差异。

什么是最佳实践:

  1. 将 post 资源拆分为不同的资源,但只使用一个 Post 表进行数据访问?
  2. 将数据库表拆分为评论、问题、答案和公告表;并为每个表使用资源(模型+控制器+视图)?
4

2 回答 2

1

我认为选择应该基于每一个特定的情况。只需为您列举每个选项的优缺点。调查和决策的要点可能是:每种类型实体之间的差异数量、访问实体的方式、每种类型实体的使用频率、代码的可维护性、对未来变化的预测等等。

于 2013-04-23T12:41:08.967 回答
1

简短的回答:这取决于。

您现在所做的非常接近单表继承 (STI),尽管听起来您正在使用Post包含所有不同行为的单个类。STI 是一种有效的存储模型数据的方法,但与所有事物一样,它也有优点和缺点。

我的建议是使用单独的类来封装单独的域模型的行为。这是 OOP 的基本范式,所以我想说这可能是最佳实践。

假设您将您的行为跨类分开,您是使用单个表还是多个表来存储它们的问题实际上取决于查询的复杂性以及模型中有多少公共字段。如果他们有很多共同的领域,STI 可能会很好地工作。如果没有,您可能不会享受您将支付的所有额外读取/写入的开销。但所有这些都是次要的,可以随着您的应用程序的增长以及您对使用模式的了解更多而弄清楚。

使用 STI 尝试一下,看看效果如何。将事物拆分为多个表比相反更容易,因此迁移路径不一定太难。

于 2013-04-23T12:42:50.680 回答