rostamiani Asked: 2018-07-18 18:44:10 +0800 CST2018-07-18 18:44:10 +0800 CST 2018-07-18 18:44:10 +0800 CST 为什么 MySQL Workbench 会为多对多关系创建两个以上的外键? 772 我正在使用 MySQL 工作台。我知道需要一个额外的表来定义多对多关系。但是为什么有时工作台会使用两个以上的外键创建这个表呢?是否添加了管理性能问题?我应该如何使用这种结构进行查询? 例如,这个多对多关系是使用三个外键自动创建的: mysql many-to-many 1 个回答 Voted Best Answer EzLo 2018-07-18T22:53:46+08:002018-07-18T22:53:46+08:00 如果id是主键,pstx_project那么您绝对不需要在您的多对多pstx_project_company_id细分表中。正如您所说,这些表只需要它们的相关表主键(其中它的组合将成为它自己的主键),以及针对每个引用表的单独外键(这也可能是组合的,具体取决于来自引用表的主键),以及您可能想要添加的其他可选列。 如果company_id它是某个点的主键的pstx_project一部分,那么将它包含在您的多对多表中是有意义的。也许您在某个时候编辑了主键? pstx_project_company_id从你的多对多表中删除,因为它会给你带来一致性问题,因为它是多余的。还要确保user_idwith pstx_project_idinsideuser_has_pstx_project是一个主键,所以它强制不重复。 作为旁注,我还注意到您的设计中的一个循环:有两种方法可以从用户那里到达公司。虽然在某些情况下可能会出现循环,但请检查它是否适合您的情况,因为您可能在用户和公司之间存在另一个冗余链接。
如果
id
是主键,pstx_project
那么您绝对不需要在您的多对多pstx_project_company_id
细分表中。正如您所说,这些表只需要它们的相关表主键(其中它的组合将成为它自己的主键),以及针对每个引用表的单独外键(这也可能是组合的,具体取决于来自引用表的主键),以及您可能想要添加的其他可选列。如果
company_id
它是某个点的主键的pstx_project
一部分,那么将它包含在您的多对多表中是有意义的。也许您在某个时候编辑了主键?pstx_project_company_id
从你的多对多表中删除,因为它会给你带来一致性问题,因为它是多余的。还要确保user_id
withpstx_project_id
insideuser_has_pstx_project
是一个主键,所以它强制不重复。作为旁注,我还注意到您的设计中的一个循环:有两种方法可以从用户那里到达公司。虽然在某些情况下可能会出现循环,但请检查它是否适合您的情况,因为您可能在用户和公司之间存在另一个冗余链接。