Rails-Ember 没有(单个 table)继承的更正关联和数据库设计

Correct associations and database design without (single table) inheritance for Rails-Ember

我正在努力弄清楚如何设计我的 PostgreSQL 数据库 tables 和 Rails API 模型,以便它们的关联可以在我的 1:1 中实现Ember 前端,Ember 和 Rails 可以通过共同理解的 JSON 流畅地交流。 (我在 Rails 端使用 ActiveModelSerializers,在 Ember 端使用 ActiveModelAdapter。)

基本思路之前我开始写任何代码:rough class diagram

现在的挑战是:我不能像这样在 Rails 中实现继承,它只支持单一 Table 继承。使用 STI,产品 table 将有 50 多列宽,其中只有 10 列左右会在继承的 class 之间共享。不理想...

另一方面,我不知道如何在 Product 和 Type1/2/3 之间建立简单的 1:1 关系,以便

  1. 每个产品总是指向一个类型table,并且
  2. Rails 和 Ember 数据都知道如何解释产品与 Type1/2/3 之间的关联,因此每次我 retrieve/modify Ember 中的产品], 我还 retrieve/modify 它的特定于类型的属性。

我考虑的第三个选项 - 具有列 "name"、"value_num"、"value_int"、"value_boolean" 和 "value_text" 的属性 table。产品将 has_many 属性,每个属性将 belongs_to 产品。这会取消 Type-tables,但也会导致不必要的大量行(例如,100 个产品,每个产品有 40 个属性 = 4000 行,而只有 200 个产品类型关联)。而且这会使访问产品属性变得更加困难 (?)。

感谢任何帮助。此外,如果您更愿意完全针对我想要实现的目标提出不同的 database/frontend/backend,请这样做。我对其中的大部分都是新手,不知道不同方法的所有优缺点,而且我并不着急。

决定让 Product 多态化,非常适合我的场景。无需担心产品有任何数据库 table,它可以正常工作。这是我遵循的指南:emberigniter.com