另一个多对多的关系问题

时间:2011-09-03 00:01:56

标签: sql-server tsql sql-server-2008 many-to-many

我的数据库包括一个客户和一个子类别表 客户可以属于一个或多个子类别(当然,任何子类别都有一个或多个客户)。
我想知道哪个是连接这些共享多对多关系的表的最佳解决方案:

  • “标准”联结CustomerSubcategory表,仅包含两个字段:CustomerID(PK,FK)和SubcategoryID(PK,FK)或
  • CustomerSubcategoryDe​​tail表,它还包括CustomerSubcategoryDe​​tailID(PK),以及SubcategoryID(PK,FK)和CustomerID(FK)字段。

有什么建议吗?

干杯,Corbex

3 个答案:

答案 0 :(得分:2)

我不认为联结表上的额外PK会增加任何值。您是否需要查找该表中的值,而无法通过Customer和/或SubCategoryID识别它们? CustomerSubCategoryDe​​tailID值是否可以在其他任何地方使用?

当我complained about folks knee-jerking an IDENTITY column onto every single table时,我的博客上发生了一个有趣的讨论。有些人为OrderDetails表上的OrderDetailID列做了一些很好的论据。这些情况是否适用于您?

答案 1 :(得分:1)

我认为不需要带有customersubcategoryid的第三列;因此,我会选择第一个选项。额外的列不会在任何连接中为您提供任何优势。你甚至不会使用它。

答案 2 :(得分:1)

选择你的第一选择。确保您创建包含两列的密钥并强制实施唯一性。这样你就不需要一个单独的主键来区分其他相同的行。

在唯一键中包含两个列还有一个额外的好处。需要通过第一列执行查找的查询可以使用索引,但它们永远不需要读取数据行,因为索引已经包含第二列。