gpt4 book ai didi

sql - N-M 关系中的复合主键与否?

转载 作者:行者123 更新时间:2023-12-04 21:42:18 26 4
gpt4 key购买 nike

假设我们有 3 个表(实际上我现在有 2 个,但这个例子可能会更好地说明这个想法):

[人物]

  • ID: int, 主键
  • 姓名:nvarchar(xx)

[组]

  • ID: int, 主键
  • 姓名:nvarchar(xx)

[角色]

  • ID: int, 主键
  • 姓名:nvarchar(xx)

[PersonGroupRole]

  • Person_ID:int,是否为主要复合 Material ?
  • Group_ID:int,是否为主要复合体?
  • Role_ID:int,是否为主要复合体?

关系 PersonGroupRole 中的 3 个 ID 中的任何一个应该被标记为主键还是应该将它们全部 3 个组合成一个组合?做与不做的真正好处是什么?

据我所知,无论如何我都可以加入,所以 Person JOIN PersonGroupRole JOIN Group 告诉我哪些人在哪些组等中。

我将在 SQL-express 和 SQL-server 之上使用 LINQ/C#/.NET,因此如果有任何关于语言/SQL 的原因可能会使选择更加明确,那就是我询问的平台。

期待看到弹出的答案,因为我在制作组合时多次想到这些主键/索引。

编辑:

好吧,我现在明白了这个问题被误解了。

问题是,为了索引目的,将 PersonGroupRole 中的三个 ID 标记为 PRIMARY KEYS 是否有意义。这会增加与三个表中的每一个连接的额外速度,还是它们应该在 PersonGroupRole 表中没有 PRIMARY KEY 而只在单独的表中是主要的。

抱歉,关于困惑。将尝试更好地解释我的问题。

最佳答案

复合键清楚地标识每一行(假设一个人不能在同一组中担任相同角色两次),因此它是一个很好的主键。

您是否真的将其声明为您的物理主键取决于您使用的工具以及围绕这些表的数据库的其余部分。你会有很多其他表对这张表有 FK 吗?如果是这样,那么代理键可能是合适的。

关于sql - N-M 关系中的复合主键与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2968544/

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