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
- Product可以是Type1,Type2等,也就是子类型继承了product(我以为是抽象的class - 什么都不应该是只是一个产品)
- 每个Type1可以有多个Type2作为它的一部分,每个Type2可以属于多个Type1,通过Type2_container
- 每个类型 class 都有许多独特的属性,但也有许多通过产品的通用属性 class
- Source是指一品一店,即Products通过Sources有很多Shop
现在的挑战是:我不能像这样在 Rails 中实现继承,它只支持单一 Table 继承。使用 STI,产品 table 将有 50 多列宽,其中只有 10 列左右会在继承的 class 之间共享。不理想...
另一方面,我不知道如何在 Product 和 Type1/2/3 之间建立简单的 1:1 关系,以便
- 每个产品总是指向一个类型table,并且
- 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
我正在努力弄清楚如何设计我的 PostgreSQL 数据库 tables 和 Rails API 模型,以便它们的关联可以在我的 1:1 中实现Ember 前端,Ember 和 Rails 可以通过共同理解的 JSON 流畅地交流。 (我在 Rails 端使用 ActiveModelSerializers,在 Ember 端使用 ActiveModelAdapter。)
基本思路之前我开始写任何代码:rough class diagram
- Product可以是Type1,Type2等,也就是子类型继承了product(我以为是抽象的class - 什么都不应该是只是一个产品)
- 每个Type1可以有多个Type2作为它的一部分,每个Type2可以属于多个Type1,通过Type2_container
- 每个类型 class 都有许多独特的属性,但也有许多通过产品的通用属性 class
- Source是指一品一店,即Products通过Sources有很多Shop
现在的挑战是:我不能像这样在 Rails 中实现继承,它只支持单一 Table 继承。使用 STI,产品 table 将有 50 多列宽,其中只有 10 列左右会在继承的 class 之间共享。不理想...
另一方面,我不知道如何在 Product 和 Type1/2/3 之间建立简单的 1:1 关系,以便
- 每个产品总是指向一个类型table,并且
- 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