2

我有一个简单的经典例子

Products -> ProductCategories <- Categories

一方面,一些OR/M(如Linq2SQL)不想在没有PK的“Products”中生成导航属性“ProductCategories”,另一方面,这只是链接表?如果此表包含 PK - 好的,我可以执行所有 CRUD 操作,否则 - 也是正确的(我可以使用复杂的键 ProductsId + CategoriesId 来操作每一行)

PS 我习惯于创建像 ProductCategories.ProductsId + ProductCategories 这样的约束。CategoriesId 是唯一的

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

4

1 回答 1

1

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

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

于 2012-05-16T20:35:49.623 回答