Mysql 三表协会

Mysql 三表协会,mysql,ruby-on-rails,database,join,ruby-on-rails-5,Mysql,Ruby On Rails,Database,Join,Ruby On Rails 5,我有三个相互依赖的表,以便检索产品类型的正确税。下面我将详细描述这些表及其功能: 产品类型:确定正在销售的产品类型。它保存有关产品的信息,例如:名称、尺寸、重量、价格等 税费:确定产品将销售到的每个省份的每种产品类型的税费百分比。它有多种税种 省:确定产品销售到的省/州。它包含有关省份的信息,如首字母缩略词、名称、国家等。它还用于确定其他对象(表格)的覆盖区域以及供应商、销售人员等的位置 我的问题是:我如何在DB和RubyonRails项目中构建它,因为我想要获得的税收不仅取决于产品的类型,

我有三个相互依赖的表,以便检索产品类型的正确税。下面我将详细描述这些表及其功能:

  • 产品类型:确定正在销售的产品类型。它保存有关产品的信息,例如:名称、尺寸、重量、价格等

  • 税费:确定产品将销售到的每个省份的每种产品类型的税费百分比。它有多种税种

  • 省:确定产品销售到的省/州。它包含有关省份的信息,如首字母缩略词、名称、国家等。它还用于确定其他对象(表格)的覆盖区域以及供应商、销售人员等的位置

我的问题是:我如何在DB和RubyonRails项目中构建它,因为我想要获得的税收不仅取决于产品的类型,还取决于省/州

我不希望有同一省份的多个记录,每个产品类型一个记录,或同一产品类型的多个记录,每个省份或税务一个记录

注意:这三个表之间都有多对多关系

class ProductType
  has_many :taxes
end

class Tax
  belongs_to :product_type
  belongs_to :province
end

class Province
  has_many :taxes
end
在查找特定产品类型的税款时,请执行以下操作:

ProductType.find(123).taxes.where(province: 'XYZ')
在查找特定产品类型的税款时,请执行以下操作:

ProductType.find(123).taxes.where(province: 'XYZ')

我怀疑其他人也遇到过这个难题。“他们做了什么?”草莓相信我,我已经找过了。没有发现任何我能理解的东西,也没有发现任何适用于我的特殊问题的东西。但是如果你知道,请告诉我。例如:看我的回答,似乎税收不应该对省和产品类型有太多,而应该属于它。这将在实际税率中产生冗余。。。如果您想将其规范化,您应该创建一个单独的表来存储税率,并将税务模型重命名为TaxRuleNot duplicate,其他问题适用于2个表,在巴西有一个称为“NCM”的分类(为了便于理解,我已翻译为productType)这又增加了问题的另一个层面。我怀疑其他人也面临着这个难题。“他们做了什么?”草莓相信我,我已经找过了。没有发现任何我能理解的东西,也没有发现任何适用于我的特殊问题的东西。但是如果你知道,请告诉我。例如:看我的回答,似乎税收不应该对省和产品类型有太多,而应该属于它。这将在实际税率中产生冗余。。。如果您想将其规范化,您应该创建一个单独的表来存储税率,并将税务模型重命名为TaxRuleNot duplicate,其他问题适用于2个表,在巴西有一个称为“NCM”的分类(为了便于理解,我已翻译为productType)这又增加了问题的另一个层面。这种方式是正确的。我对它做了一点修改:我将
税收
表转换为
省份
产品类型
的联接表,然后我使用
在省份和产品中的多个关联来访问每个省份和产品的税收。谢谢你@bo oz。看看我的评论,你可能会受益于通过增加第三个模型税率进一步规范化,这有很多:税收。我写错了,事实上,我确实把第四个表作为前三个(“税收”)的联接表。其中一个拥有其他每个人的ID,因此我不必创建多个冗余产品、省份甚至税收。这种方法是正确的。我对它做了一点修改:我将
税收
表转换为
省份
产品类型
的联接表,然后我使用
在省份和产品中的多个关联来访问每个省份和产品的税收。谢谢你@bo oz。看看我的评论,你可能会受益于通过增加第三个模型税率进一步规范化,这有很多:税收。我写错了,事实上,我确实把第四个表作为前三个(“税收”)的联接表。其中一个拥有其他每个人的ID,因此我不必创建多个冗余产品、省份甚至税收。