2012-05-16 56 views
2

我有一个简单经典的例子在多对多关系中调解表真的需要PK吗?

Products -> ProductCategories <- Categories 

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

P.S.我用来创建约束如 ProductCategories.ProductsId + ProductCategories .Id是唯一的

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

回答

1

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

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