连接两个表的表是否应该有自己的ID?

Boj*_*goj 11 sql

我有两张桌子:

First
------
id
name

Second
------
id
name
Run Code Online (Sandbox Code Playgroud)

另外一个表连接前两个:

Third
------
first_id
second_id
Run Code Online (Sandbox Code Playgroud)

第三个表用于解决M:N问题.它应该有自己的ID吗?

Guf*_*ffa 13

如果表只包含两个外键,则没有理由拥有其他键.您不会在任何查询中使用它.

使用连接表连接表时,一次是对一个外键进行连接,而不是一次对两个外键进行连接,因此连接表中的另一个键没有用处.例:

select t1.name, t2.name
from First t1
inner join Third t3 on t3.first_id = t1.id -- one foreign key
inner join Second t2 on t2.id = t3.second_id -- the other foreign key
Run Code Online (Sandbox Code Playgroud)

只需制作一个组合两个外键的主键即可.

 PRIMARY KEY (first_id, second_id)
Run Code Online (Sandbox Code Playgroud)


Nic*_*ark 5

不,您通常不需要连接两者的表格上的id字段.您可以为连接表创建主键(first_id,second_id).


Joh*_*hnD 5

如果它只是一个简单的映射表,那么我会说不。那个额外的 ID 有什么用途?只需将主键设为复合键即可:(first_id, second_id)。

话虽如此,我已经看到有一个单独的 ID 是有争议的情况,因为使用某些 ORM 工具更容易。但通常我会说,如果可以的话,您应该避免使用额外的 ID 列。


Raj*_*ore 5

我开始使用两列中的复合 PK,它对我有用了一段时间。

随着业务的增长和业务规则的变化,其中一些表开始获得额外的属性或参与关系,然后我要么需要添加单列 PK,要么只需向下携带一个双键(这会很快变旧)。

然后我决定标准化我自己的设计。现在,作为我设计的一部分,我对所有连接表使用额外的单列 PK。