与数据透视表的关系是个好主意吗?

时间:2018-04-03 20:50:30

标签: mysql database database-design

假设我们有以下表格:

公司

  • ID
  • 名称
  • ...

类别

  • ID
  • 名称

category_company

  • category_id
  • COMPANY_ID

现在,对于公司所属的每个类别,我们需要存储他们为该类别提供的产品。我想知道将自动递增主键添加到数据透视表是否是个好主意,然后在产品表上使用该ID,如下所示。

category_company

  • id
  • category_id
  • COMPANY_ID

产品

  • id
  • category_company_id
  • 名称

有没有更好的方法来解决这个问题?在我正在研究的真正的项目中,我还有5个表依赖于公司类别的关系。

1 个答案:

答案 0 :(得分:1)

您的问题还有其他方法,但您的问题也是正确的。您可能会或可能不会在category_company表中拥有该ID,具体取决于您是使用某个特定框架还是ORM,但正如@AndrewShmig所说,您不需要它。

重要提示:请记住,您正在建立多对多关系,因此您需要将一个主键或唯一的复合索引添加到' category_company'列上的表' category_id'和' company_id',即使你保持' id'柱。您不希望同一公司在类别中列出两次,反之亦然。

在MVC模型ORM中,您的方法(在category_company / pivot中使用&id;#)最好,因为您可以为关系本身分配其他信息,像对待另一个对象一样处理数据透视表。

不一样,但想到这两种情况:
enter image description here

enter image description here

如果你是一个更加面向对象的程序员,那么第二个选项可能符合你的需求(这就是你所拥有的),而且你可以为关系添加额外的信息,比如' classifiedized_by',&#39 ; date_of_categorization'或类似的东西。

*如果您有5个以上依赖于该关系的表格(例如'产品'),当然在中间表格中处理关系比使用&category; category_id'更好。和' company_id'他们每个人的领域。

来源: