我的数据库中有以下几个表,它们具有多对多关系,这是由一个连接表来表示的,它具有每个主表的主键的外键:
>小部件:WidgetID(PK),标题,价格
> User:UserID(PK),FirstName,LastName
假设每个User-Widget组合是唯一的.我可以看到两个选项,用于如何构造定义数据关系的连接表:
> UserWidgets1:UserWidgetID(PK),WidgetID(FK),UserID(FK)
> UserWidgets2:WidgetID(PK,FK),UserID(PK,FK)
选项1具有单个主键的列.然而,这似乎是不必要的,因为存储在表中的唯一数据是两个主表之间的关系,并且此关系本身可以形成唯一的键.因此导致选项2具有两列主键,但是丢失了选项1具有的一列唯一标识符.我也可以选择在第一个表中添加一个两列唯一索引(WidgetID,UserID).
两个表现方式之间是否存在真正的区别,或者任何理由倾向于另一个方法来构造UserWidget多对多表?
解决方法
在这两种情况下,您只能有一个主键.第二个是所谓的复合键.引入新专栏没有什么好的理由.实际上,您必须在所有候选键上保留唯一的索引.添加一个新列后,只需维护开销.
选择2.