Mysql 连接表是否应该具有来自另一个标识表的多个主键?

Mysql 连接表是否应该具有来自另一个标识表的多个主键?,mysql,database,database-design,many-to-many,relational-database,Mysql,Database,Database Design,Many To Many,Relational Database,这里有一个例子:最初我有3张桌子。表B引用了表A,所以现在表B有两个主键。一个用作原始主键,另一个用于加强其与表A的关系。然后我希望表B与表X具有多对多关系。在我添加关系时,MySQL Workbench添加了表Y,其中包含表B主键和表X中的一个主键。因此表Y现在有三个主键 连接表中表B中的第二个主键似乎是不必要的,因为我可以用原始主键标识表B。所以我还需要额外的主键吗?或者我不应该在表A和表B之间有一个标识关系 表A和B的关系类似于用户有很多帖子。帖子必须属于用户。但是Post已经有了自己的主

这里有一个例子:最初我有3张桌子。表B引用了表A,所以现在表B有两个主键。一个用作原始主键,另一个用于加强其与表A的关系。然后我希望表B与表X具有多对多关系。在我添加关系时,MySQL Workbench添加了表Y,其中包含表B主键和表X中的一个主键。因此表Y现在有三个主键

连接表中表B中的第二个主键似乎是不必要的,因为我可以用原始主键标识表B。所以我还需要额外的主键吗?或者我不应该在表A和表B之间有一个标识关系

表A和B的关系类似于用户有很多帖子。帖子必须属于用户。但是Post已经有了自己的主键,所以用户的外键需要是主键吗?

编辑

下面是场景(下图链接)。我关注的表是snippet、snippet\u topic和tag。据我所知,由于每个代码段都必须属于一个代码段主题,因此它具有标识关系。所以我在MySQL Workbench中使用了标识关系,他们添加了snippet_主题ID作为主键。之后,我为标记和代码片段添加了一个m:n关系。MySQL工作台将snippet_主题ID添加到连接表中(但我将其删除)。我的设计有什么问题吗?还是有更正确的方法

图例: 黄色图标-主键 红色图标-不为空

您不能有多个主键。您拥有的可能是索引。如果表
posts
中的
user\u id
列包含在您的主键中,您可以将其取出,让主键仅由
id
列组成


我希望这会有所帮助

每个表应该只有一个主键,而主键只与此表有关。如果希望表a中的第二列包含要查找的表B主键的值,请单击此处。如果需要,只需设置第二个索引即可获得性能

原来我有三张桌子

表B引用了表A。所以现在 表B有两个主键。一用 作为原始主键和 另一个是加强其关系 用表A

否。表B有一个主键和一个外键。外键可能是主键的一部分,也可能不是

那么我希望B表有一个 与表的多对多关系 十,

当我添加关系时,MySQL Workbench添加了表Y和 表B主键和一个主键 在表X中输入。因此表Y现在 三个主键

多对多关系通常实现为包含两个外键作为主键的表。在您的例子中,一个外键是表B的主键,另一个外键是表X的主键。表B的主键似乎包含两列。这些桌子可能看起来像这样

  • 表A:{a1,a2}
  • 表B:{b1,a1,b2,b3},a1参考了表A
  • 表X:{x1,x2}
表Y实现了m:n关系,其中包含来自B和X的键

  • 表Y:{b1,a1,x1},两列b1,a1参考表B;列x1引用表X

如果您想得到更好的答案,请编辑您的问题并为您的表包含SQL DDL。从您编辑的帖子中使用。

获取DDL-正确执行此操作的唯一方法是使用另一个表来保存多对多关系。snipit&snippit_主题有一个主键,这个新表有两列,每个主键都有

引用列是否应该是主键?MySQL Workbench允许我检查多个列作为主键,这是应该发生的吗?一个主键可以由一个单列或多个列组成,但当使用多个列时,主键实际上是所有这些列的组合,而不是单独的主键。一个表只能有一个主键(单个或组合列),但可以有任意多个额外的索引列(单个或组合列)