我有两张桌子:
First
------
id
name
Second
------
id
name
连接前两个的另一个表格:
Third
------
first_id
second_id
第三个表只有 来解决M:N问题。它应该有自己的ID吗?
答案 0 :(得分:11)
如果表只包含两个外键,则没有理由拥有其他键。您不会在任何查询中使用它。
使用连接表连接表时,一次只能对一个外键进行连接,而不是同时对两个外键进行连接,因此连接表中的另一个键没有用处。例如:
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
只需制作一个组合两个外键的主键。
PRIMARY KEY (first_id, second_id)
答案 1 :(得分:5)
不,您通常不需要连接两者的表格上的id字段。您可以为连接表创建主键(first_id,second_id)。
答案 2 :(得分:1)
如果它只是一个简单的映射表,那么我会说不。额外ID的目的是什么?只需将主键设为复合键:(first_id,second_id)。
话虽如此,我已经看到过可以使用单独的ID的情况,因为使用某些ORM工具更容易。但一般来说,如果可以,我会说你应该避免额外的ID列。
答案 3 :(得分:1)
我开始在两列中使用复合PK,它对我有用了一段时间。
随着业务的增长和业务规则的改变,这些表中的一些开始获得额外的属性或参与关系,然后我要么需要添加单个列PK,要么只需要一个双键(这会快速增长)。 / p>
然后我决定将自己的设计标准化。现在,作为我设计的一部分,我为所有连接表使用了额外的单列PK。
答案 4 :(得分:0)
这取决于表的作用"'第三" (连接或连接表)。让我们假设,例如,该表表示两个其他表之间的关系。因为它是全部,所以不需要额外的Id。
但是,如果这种关系,表格和#34; One"和"两个"变得暂时的?我的意思是,这种关系是一段时间的。例如所有权,婚姻等等。然后你不能在连接表中添加另一个记录/实体(" Third"),因为这种关系已经存在。
因此,为每个表建立它自己的Id更安全。我们确信,在未来,临时(因为那个多时间)关系不会发生。
========================================= 对不起我的英文