【发布时间】:2014-05-15 10:18:03
【问题描述】:
我正在使用 mySQL 和 Laravel。 我有两个表:用户和组。每个都有一个 id 字段和一个 name 字段。 我希望用户能够属于许多组,反之亦然;所以我正在与联结表建立多对多关系:group_user。
我的第一个想法是它只需要两个字段:user_id 和 group_id,都是外键。 但是有些事情告诉我,我可能也需要/想要这张桌子的 id。我已经在互联网上的代码示例中看到了这两种方式,我只是想知道如果没有它我会错过什么。
我只是想不出我将如何实际使用它;因为该表只是为了关联另外两个表。
【问题讨论】:
-
简短回答 - 是的,你想要那里的 PK。如果您不自己指定一个,InnoDB(假设您使用 InnoDB)将创建一个隐藏的 6 字节整数 PK(您将无权访问)。您想要 PK 的原因有很多,而且它们通常与事情的执行方式无关,而是与它们在现实世界中的运作方式有关。
-
简短回答 - 不。它必须有一个PK。它不必是代理。但是,如果您确实使用了代理,那么最佳实践建议在旁边形成一个自然(唯一)键。就个人而言,我认为代理只有在您需要在其他上下文中引用该链接时才真正有用。如果您愿意,我可以举一个简短的例子 - 但可能太长,无法在这里发表评论。
-
我希望每个用户/组对都是唯一的。复合键本身是否也强制执行唯一性?我想是的,但不确定。将其设为主键是否有意义?它们将被 user_id 或 group_id 查询......所以应该以某种方式对它们进行索引,对吧?