我有两张桌子:
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)
如果它只是一个简单的映射表,那么我会说不。那个额外的 ID 有什么用途?只需将主键设为复合键即可:(first_id, second_id)。
话虽如此,我已经看到有一个单独的 ID 是有争议的情况,因为使用某些 ORM 工具更容易。但通常我会说,如果可以的话,您应该避免使用额外的 ID 列。
我开始使用两列中的复合 PK,它对我有用了一段时间。
随着业务的增长和业务规则的变化,其中一些表开始获得额外的属性或参与关系,然后我要么需要添加单列 PK,要么只需向下携带一个双键(这会很快变旧)。
然后我决定标准化我自己的设计。现在,作为我设计的一部分,我对所有连接表使用额外的单列 PK。
| 归档时间: |
|
| 查看次数: |
5597 次 |
| 最近记录: |