2012-05-16 96 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列的框架。