2012-05-16 2 views
2

나는 간단한 고전적인 예를 가지고다 대다 관계의 중재 테이블에 PK가 필요합니까?

한편으로
Products -> ProductCategories <- Categories 

일부 또는/M의 (예 Linq2SQL와 같은) 다른 한편으로는, PK없이 "제품"에서 "ProductCategories"탐색 속성을 생성하지 않습니다 , 이것은 단지 링크 테이블입니까? 이 테이블에 PK-ok가 포함되어 있으면 모든 CRUD 작업을 수행 할 수 있습니다. 그렇지 않은 경우에도 마찬가지입니다. - 복잡한 키 ProductsId + CategoriesId를 사용하여 각 행을 조작 할 수 있습니다.

P.S. 나는 과 같은 제약을 만드는 데 익숙하다. ProductCategory.ProductsId + ProductCategories .CategoriesId는 고유하다.

따라서 성능 측면에서보다 유용한 접근 방법은 무엇인가?

답변

1

필자는 사실상 항상 PK를 사용할 것을 권장합니다. 한 가지는 정규화에 필요합니다. 다른 경우 클러스터 된 인덱스 (기술적으로 PK와 같지 않지만 기본적으로 클러스터 된 인덱스는 PK에 정의되어 있음)는 일반적으로 사용 특성에 크게 좌우되지만 성능에 도움이됩니다. 그리고 언급했듯이 SQL 데이터베이스로 작업하는 많은 ORM 및 기타 프레임 워크는 구조적 목적으로 PK를 기대합니다.

상황에 따라 링크 테이블의 두 열에 모두 PK를 작성하는 것이 좋습니다. 모든 테이블에 정수 ID 열이 있어야한다는 하나의 프레임 워크로 작업했지만.

관련 문제