【发布时间】:2010-09-07 12:30:45
【问题描述】:
我的数据库中有以下表,它们具有多对多关系,由一个连接表表示,该连接表具有每个主表的主键的外键:
- 小部件:小部件ID (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 多对多表?
【问题讨论】:
-
您需要的索引取决于您的查询要求,而不是您的架构设计。
标签: database data-structures indexing schema