我的数据库中有以下表,它们具有多对多关系,由一个连接表表示,该连接表具有到每个主表的主键的外键:
- Widget:WidgetID (PK)、标题、价格
- 用户:用户 ID (PK)、名字、姓氏
假设每个 User-Widget 组合都是唯一的。我可以看到关于如何构造定义数据关系的连接表的两个选项:
- UserWidgets1:UserWidgetID (PK)、WidgetID (FK)、UserID (FK)
- UserWidgets2:WidgetID(PK、FK)、UserID(PK、FK)
选项 1 有一个主键列。但是,这似乎没有必要,因为表中存储的唯一数据是两个主表之间的关系,而这种关系本身可以形成唯一键。因此导致选项 2,它具有两列主键,但丢失了选项 1 具有的一列唯一标识符。我还可以选择在第一个表中添加一个两列唯一索引(WidgetID、UserID)。
两者在性能方面是否有任何真正的区别,或者有任何理由更喜欢一种方法而不是另一种方法来构建 UserWidgets 多对多表?