Inheritance 正确的关联和数据库设计,无需Rails Ember的(单表)继承

Inheritance 正确的关联和数据库设计,无需Rails Ember的(单表)继承,inheritance,ember-data,associations,rails-postgresql,rails-api,Inheritance,Ember Data,Associations,Rails Postgresql,Rails Api,我正在努力弄清楚如何设计我的PostgreSQL数据库表和Rails API模型,以便它们的关联可以在我的Ember前端1:1实现,从而Ember和Rails可以通过通常理解的JSON流畅地通信。(我在Rails端使用ActiveModelSerializer,在Ember端使用ActiveModelAdapter。) 在我开始编写任何代码之前,我的基本想法是: Product可以是Type1、Type2等,也就是说,子类型继承Product(我认为它是一个抽象类——没有什么东西应该只是Pro

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

在我开始编写任何代码之前,我的基本想法是:

  • Product可以是Type1、Type2等,也就是说,子类型继承Product(我认为它是一个抽象类——没有什么东西应该只是Product)
  • 通过Type2_容器,每个Type1可以有几个Type2作为它的一部分,每个Type2可以属于几个Type1
  • 每个类型类都有许多独特的属性,但通过Product类也有许多常规属性
  • 来源是指一个产品和一个店铺,即产品通过来源拥有多个店铺
现在的挑战是:我不能在只支持单表继承的Rails中实现这样的继承。使用STI,产品表将有50多列宽,其中只有10多列在继承类之间共享。不理想

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

  • 每个产品始终指向一个类型表,并且
  • Rails和Ember数据都知道如何解释Product和Type1/2/3之间的关联,因此每次在Ember中检索/修改产品时,我也检索/修改其特定于类型的属性
  • 我考虑的第三个选项是一个属性表,其中包含“name”、“value\u num”、“value\u int”、“value\u boolean”和“value\u text”列。产品有很多属性,每个属性都属于产品。这将消除类型表,但也会导致不必要的大量行(例如,100个产品,每个40个属性=4000行,而只有200个产品类型关联)。这将使访问产品属性(?)变得更加困难


    感谢您的帮助。另外,如果您愿意为我想要实现的目标建议完全不同的数据库/前端/后端,请这样做。我对其中的大部分都是新手,不知道不同方法的所有优点和缺点,我也不急着这么做。

    决定让产品具有多态性,完全符合我的场景。无需担心产品有任何数据库表,它只是工作。这是我遵循的指南:

    已解决,请参见下文