在rails数据库中实现基于超类子类模型的设计的最佳方法?

时间:2015-06-13 11:33:50

标签: ruby-on-rails ruby

假设我正在为在线商店设计数据库,他们在那里销售不同类型的商品。每个项目都有自己独特的属性,除了价格,制造商等几个常见的属性。因此它可以分为超类(公共字段)和子类(不同字段)

说我有以下表格:

Product manufacturer:decimal 
Pen ink:string 
Shirt size:int 

product_idPen表中创建Shirt字段可以解决我的问题,但还有其他好方法吗?在这里将它分隔成超类和子类真的是个好主意吗?

1 个答案:

答案 0 :(得分:3)

这种情况下的常见方法是使用单表继承(STI)。 Product将是基类:

class Product < ActiveRecord::Base
end

Pen / Shirt子类:

class Pen < Product
end

class Shirt < Product
end

通常所有信息都存储在基础Product表中(这就是它的单表继承),并在特殊type列的帮助下进行区分(当然,你会有<{1}} nil字段中的衬衫)。

如果只想在ink表中存储公共字段,可以为子类创建单独的表。然后,我认为您不仅需要指定Product,还需要type之类的内容,以便能够提取有关产品的完整信息(它将介于STI和{{3之间) }})。所以它会是这样的:

specific_product_id

决定取决于你。