我怎样才能最好地构建这些类似的模型?

时间:2016-07-13 07:24:53

标签: ruby-on-rails ruby database activerecord database-design

我有n个代表订单的模型,例如EbayOrderAmazonOrder。每个订单模型都有略微不同的字段,但它们都代表相同的基本事物,即订单。

问题是我经常需要查询我的所有订单,以便在视图中显示它们,添加费用和销售总额,并对它们执行其他分析。当模型是独立的实体时,这样做很棘手。

以下是我考虑的一些选项:

STI

STI表可能会有几十列宽。

保留单独的模型,但生成具有规范化数据的副本Order模型

这将是一个奴隶“通用”模型,它将是每种类型订单的一对一复制品,但具有更多标准化的清洁数据。我不喜欢这个选项,因为需要重复数据。

将所有订单类型规范化为单个Order模型

如果数据足够相似,那将是理想的,但它们在订单类型中差异很大。

1 个答案:

答案 0 :(得分:0)

另一种选择是使用Polymorphic associations

class Order < ApplicationRecord
  belongs_to :specific, polymorphic: true, dependent: :destroy
end

class EbayOrder < ApplicationRecord
  has_one :order, as: :specific
end

class AmazonOrder < ApplicationRecord
  has_one :order, as: :specific
end

Order模型中,您可以保留共享属性,但对于自定义属性,您可以使用单独的模型。无论如何,这种方法使得查询数据库变得更加复杂。

此外,如果您使用Postgres,那么您可以查看另一种方法:将所有订单保留在一个表中,但为自定义属性创建JSON列。