gpt4 book ai didi

mysql - 用户对 MySQL 中的(多对多)关系表进行分组是否需要 PRIMARY KEY?

转载 作者:行者123 更新时间:2023-11-29 05:20:22 25 4
gpt4 key购买 nike

我做了一些研究,但找不到明确的答案。

我有一个简单的多对多关系表,user_id 是外来的,group_id 是外来的,是否有理由添加 PRIMARY KEY?

最佳答案

我将对已接受的答案发表反对意见。您应该添加自动递增主键来连接(或交叉引用)表。原因如下。

首先,您不会使用它。此表存在的唯一原因是跟踪您的用户和组之间的多对多关系。添加自动递增字段只是添加了另一个您不会阅读的字段。换句话说,您查询此表的唯一时间是因为您想要查看哪些用户属于某个组,或者某个用户是哪些组的成员。在这两种情况下,都不会使用这个额外的主键表。

其次,如果您向该表添加额外的数据,主键仍然是无用的。考虑一下:如果我们添加一个字段来指示组成员身份对于给定用户是“主要”,我们仍然需要知道用户和组才能使这种“主要”有意义。

技术上从不任何表都需要自动递增的“代理”键。您只需要一个您知道是唯一的字段或一组字段(从而使我们至少处于第二范式)。问题是,大多数时候,我们很难预测什么是足够独特的,所以我们添加了这个额外的 key 来保护我们自己免受这个问题的影响。 交叉引用不是我们不擅长预测的情况之一。用户永远不会两次成为同一组的成员,也永远不会出现一个组将包含同一用户两次。我们知道该组合是唯一的,因此额外的代理键不会增加任何内容。

但是,请注意,如果您要向这样的表中添加字段(除了两个外键),您实际上可能正在建模并非真正多对多的对象。您实际上可能正在建模一对多对一。例如,如果您要将字段添加到用户到组的映射中,您实际上可能是在为“成员身份”实体建模。 可能已经获得了代理键,因为让一个用户在不同时间对同一组具有不同成员身份可能开始变得有意义。但同样,这是在建模其他东西,而不是多对多关系。

关于mysql - 用户对 MySQL 中的(多对多)关系表进行分组是否需要 PRIMARY KEY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26737607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com