是否还需要查找表中的两个表中的主键?

时间:2016-11-23 19:06:09

标签: mysql sql

我在研究项目中使用 MySQL 5.7和WB6.3 来设计 ER图。

当我尝试创建多对多关系时。默认情况下,MySQL会将两个表的主键标记为查找表中的主键。

是否真的需要将两个表中的主键作为查找表中的主键?

请参阅下图中的表格car_item我已从红色(idcar,iditem)中删除了主键。请告诉我他们是否需要PK

My ER diagram

2 个答案:

答案 0 :(得分:1)

(car_idcar, item_list_iditem_list)应该有一个唯一键,但它不一定必须是主键。这样,您可以确保不在两个表中的相同行之间创建重复关系。

一个表只能有一个主键,而car_item表已经有主键id_car_item,因此该关系的外键也不能成为主键。但是可以有任意数量的唯一键。

一些纯粹主义者可能会说,如果有两个唯一键(主键也是一个唯一键),其中一个是多余的。在您的情况下,id_car_item列可能不是必需的,因为在其他表中引用关系并不常见,关系表仅用于连接其他两个表。但事实并非如此。例如,用户表可能包含唯一的username列(因为您不允许多个用户使用相同的名称),但也使用userid个主键作为其他表中的外键(这允许重命名用户而不必更新所有外键)。一些数据库设计人员喜欢在每个表中都有一个自动增量列,因为它在用户界面应用程序中很有用。

答案 1 :(得分:0)

通常的做法是在一个实现多对多的表中使用复合主键。该密钥应包含多对多关系两侧的两个表的主键。

这种方法可以保证数据的一致性并消除重复。

在您的情况下,您应该为表car_item定义一个由两个字段{ car_idcar, item_list_iditem_list }组成的复合主键 不需要列id_car_item,可以删除它,它可能是自动添加的,因为许多RDBMS默认添加代理PK。