Ruby on rails 如何使用指示其他字段的类型字段创建订单模型

Ruby on rails 如何使用指示其他字段的类型字段创建订单模型,ruby-on-rails,ruby,activerecord,architecture,Ruby On Rails,Ruby,Activerecord,Architecture,我正在为一家企业构建一个RubyonRails应用程序,并将利用ActiveRecord数据库。我的问题实际上与数据库体系结构有关,而且实际上是我组织应用程序中所有不同表和模型的最佳方式。因此,我正在构建的应用程序将有一个电子商务业务订单数据库,通过两个不同的渠道销售产品,一个订阅服务,用户可以选择产品并以固定的月费销售,另一个是传统的电子商务渠道,用户可以直接为其产品付费。因此,基本上,虽然所有这些都被归类为订单模型,但有两种类型的订单:订阅订单和常规订单 因此,最初我认为我应该在Orders

我正在为一家企业构建一个RubyonRails应用程序,并将利用ActiveRecord数据库。我的问题实际上与数据库体系结构有关,而且实际上是我组织应用程序中所有不同表和模型的最佳方式。因此,我正在构建的应用程序将有一个电子商务业务订单数据库,通过两个不同的渠道销售产品,一个订阅服务,用户可以选择产品并以固定的月费销售,另一个是传统的电子商务渠道,用户可以直接为其产品付费。因此,基本上,虽然所有这些都被归类为订单模型,但有两种类型的订单:订阅订单和常规订单

因此,最初我认为我应该在Orders表中对所有这些活动进行分类,并包括一个字段“Type”,用于指示它是订阅订单还是常规订单。我的问题是,对于每种类型,我都需要一些特定的字段。例如,transaction_id、batch_id和sub_id都是只有订单类型为订阅时才会出现的字段,反之,如果订单类型为常规,则不存在

我的问题是,仅仅创建两个单独的表,一个用于订阅订单,另一个用于常规订单,是否符合我的最佳利益?或者,是否有一种方式可以使字段仅以字段的类型为条件显示?例如,如果订单类型是常规订单,我不希望看到这么多的Nil值

抱歉,这个问题的技术性不强,因为它只涉及最佳实践和组织

谢谢,
Sunny

我会把所有的订单放在一张桌子上。您可以为“订阅订单信息”创建第二个表,该表仅包含列transaction\u id、batch\u id和sub\u id,以及将其链接回主订单表的主键。不过,您仍然希望在主数据库中包含一个order-type列,以便在调试时更容易一些

假设您使用的是Postgres,我可能会倾向于使用Hstore

一些阅读:


您所描述的是一个名为-aka的模式,其中一个表存储具有不同行为的不同类型对象的数据

通常,人们会告诉您不要这样做,因为这会导致数据库中出现大量空字段,这将长期影响性能。它看起来也很恶心


您可能应该将数据存储在单独的表中。如果您想更进一步,可以尝试实现类表继承,其中每个子类实际上都有独立但连接的表。ActiveRecord本机不支持此操作。也许能帮你,但我从来没有用过,所以我不能给你一个坚定的建议

创建一个名为order\u type的整数列

在模型中,请执行以下操作:

订阅=0

在线=1

它的查询性能优于字符串,无论何时,只要您想调用一个,您都可以执行顺序:SUBSCRIPTION。 使外键等于orders中相应行的ID的两个+其他表


现在,您可以将所有共享数据保存在orders表中,以便于查询,并将所有唯一数据保存在其他表中,这样您就不会有臃肿的模型。

请注意,避免将任何字段命名为“type”。ActiveRecord会引起一阵骚动。