【问题标题】:How could I best structure these similar models?我怎样才能最好地构建这些类似的模型?
【发布时间】:2016-07-13 07:24:52
【问题描述】:

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

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

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

性传播感染

STI 表可能有几十列宽。

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

这将是一个从属“通用”模型,它将是每种订单类型的一对一副本,但具有更规范化的更清洁数据。我不喜欢这个选项,因为需要重复数据。

将所有订单类型标准化为单个Order 模型

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

【问题讨论】:

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


    【解决方案1】:

    另一种选择是使用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 列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 2021-01-31
      • 1970-01-01
      • 2013-10-17
      • 2022-10-24
      • 2021-10-01
      • 2020-02-07
      相关资源
      最近更新 更多