在多对多关系中调解表真的需要PK吗?

时间:2012-05-16 20:32:20

标签: sql linq-to-sql many-to-many

我有一个简单的经典例子

Products -> ProductCategories <- Categories

一方面,一些OR / M(如Linq2SQL)不希望在没有PK的“产品”中生成导航属性“ProductCategories”,另一方面,这只是链接表? 如果这个表包含PK - ok,我可以预先形成所有CRUD操作,否则 - 也是如此(我可以使用复杂的关键ProductsId + CategoriesId来操作每一行)

P.S。我习惯于创造约束 ProductCategories.ProductsId + ProductCategories .CategoriesId是唯一的

那么,哪种方法从性能角度来看更有用呢?

1 个答案:

答案 0 :(得分:1)

我几乎总是建议使用PK。首先,它是标准化所必需的。另一方面,聚集索引(技术上与PK不同,但默认情况下,聚类索引在PK上定义)通常有助于提高性能,但多少在很大程度上取决于使用特性。而且,正如您所指出的,许多与SQL数据库一起使用的ORM和其他框架都需要PK用于结构目的。

根据您的情况,只需在链接表的两列上创建PK通常是有意义的,尽管我使用了一个框架,期望每个表都有一个整数Id列。