【问题标题】:Three tables association三表关联
【发布时间】:2019-07-13 00:54:45
【问题描述】:

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

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

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

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

我的问题是:我如何在数据库以及我的 Ruby on Rails 项目中构建它,因为我想要获得的税款不仅取决于产品的类型,还取决于省/州好吗?

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

注意:所有三个表之间都有多对多的关系。

【问题讨论】:

  • 我怀疑其他人也面临过这个难题。他们做了什么?
  • @Strawberry 相信我,我已经搜索过了。没有找到任何我能理解并适用于我的特定问题的东西。但是如果你知道的话,请告诉我。
  • 看我的回答,看来Tax不应该对Province和ProductType有has_many,但应该属于它。这将在实际税率中产生冗余......如果您想对其进行规范化,您应该创建一个单独的表来存储 TaxRates,并将 Tax 模型重命名为 TaxRule
  • 不是重复的,其他问题适用于 2 个表格,在巴西有一个名为“NCM”的分类(为了便于理解,我已翻译为 productType),为该问题增加了另一个维度。

标签: mysql ruby-on-rails database join ruby-on-rails-5


【解决方案1】:
class ProductType
  has_many :taxes
end

class Tax
  belongs_to :product_type
  belongs_to :province
end

class Province
  has_many :taxes
end

在查找某个 ProductType 的税时,请执行以下操作:

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

【讨论】:

  • 这种方式是正确的。我稍作修改:我将Taxes 表转换为ProvincesProductTypes 的连接表,然后我在省份和产品中使用has_many through 关联,以便在必要时从每个表中获取税款。谢谢@bo-oz。
  • 看看我的评论,你可能会通过添加第三个模型 TaxRate 来进一步规范化它,即 has_many :taxes。
  • 我写错了,确实我确实将第四个表作为前三个(`Taxation')的连接表。那个拥有其他每个人的 id,因此我不必创建多个冗余产品、省份甚至税收。
猜你喜欢
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
相关资源
最近更新 更多