数据库 – 多对多表中的一个或两个主键?

前端之家收集整理的这篇文章主要介绍了数据库 – 多对多表中的一个或两个主键?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的数据库中有以下几个表,它们具有多对多关系,这是由一个连接表来表示的,它具有每个主表的主键的外键:

>小部件: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.

猜你在找的MsSQL相关文章