【问题标题】:How to determine which direction a Many to Many relationship should follow?如何确定多对多关系应该遵循的方向?
【发布时间】:2018-03-15 02:52:16
【问题描述】:

我有一个Product 和一个Product Category

我可以定义Product has Product Category 关系,或Product Category has Product

两者都对我有意义。我的目标是实现产品的分组,以便更轻松地对其进行分类。我将Product Category 视为辅助概念,而不是具体概念。即Product 是我可以出售的东西,我可以放入购物车等的东西。我不能用Product Category 做到这一点。但我可以用它来对事物进行分组,即显示属于某个 Product CategoryProduct 列表。

我假设多对多关系是对称的,并且有两种方法可以创建它。在我的情况下,如何确定哪个方向是正确的?有吗?

【问题讨论】:

  • 什么意思,有两种创建方式?或者,导演?也许,哪一列是列表中的第一列?谁在乎? Are There Bidirectional Relational Databases? PS 表表示关系。 “有”、“在”、“属于”、“属于”等都是空洞且糟糕的名称选择——他们只是说有些事情在某种程度上是相关的,我们已经知道了。选择一个名称/短语来捕捉关系,并在其列值如此相关时说明行的状态。有时这种关系只是“是一种类型/排序/种类”。 "产品 p 属于类别 c"

标签: sql database-design many-to-many relational-database entity-relationship


【解决方案1】:

由于多对多是双向的,因此确实不需要考虑“正确的方向”。至于设计,我会将 product_category 创建为只有主键的静态表;具有自己的主键列的产品表,例如产品 ID;第三个关联表,其中外键是两个表中的主键。

PRODUCT_TAGS
PROD_ID|CAT
21|加热
21|安全
25|加热
37|照明
37|安全

【讨论】:

    【解决方案2】:

    我认为您的关系是一对多而不是多对多。

    每当我查看任何类型的关系时,我都会问自己一个关于表格的问题(使用您的表格名称):

    一个产品有很多类别,还是一个类别有很多产品?

    如果第一点为真,则产品表中的 ID 进入类别表。否则,类别表中的 ID 将进入产品表。

    如果两者都为真(一个产品有很多类别,一个类别有很多产品),那么您需要一个连接表。

    我假设一个类别有很多产品,但一个产品只能有一个类别。如果这是真的,你可以在你的产品表中添加一个 category_id。

    如果是多对多关系,您的表格将如下所示: product_category_map (product_id, category_id)

    希望能回答您的问题。我最近wrote an article on normalisation 涵盖了一对多和多对多关系的概念,因为它可能是一个令人困惑的概念。 (披露:我拥有该网站)。

    【讨论】:

      猜你喜欢
      • 2013-11-03
      • 2016-04-30
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      相关资源
      最近更新 更多