2010-03-11 5 views
0

인사말 -MS SQL 브리지 테이블 제약

저는 기사 테이블과 카테고리 테이블을 가지고 있습니다.

기사가 많은 카테고리에서 사용할 수있는, 그래서이 같은 ArticleCategories의 테이블을 만들었습니다

  • BridgeID의 INT (PK)

  • 은 articleID의 INT

  • 카테고리 ID의 INT

이제는 const raid/relationships과 같이 ArticleID-CategoryID 조합이 고유하고 ID가 각각의 기본 키 테이블 (기사 및 범주)에 존재해야합니다.

VS2008 서버 탐색기와 엔터프라이즈 관리자 (SQL-2005)를 사용하여 FK 관계를 만들려고 시도했지만 결과적으로 CategoryID가 다르더라도 결과가 항상 브리지 테이블에있는 중복 된 ArticleID를 방지합니다.

나는 명백하게 틀린 무엇인가하고있다라고 꽤 확신한다. 그러나 나는이 점에서 정신 블록을 가지고있는 것처럼 보인다.

아무도 말해 주실 수 없습니까?

Greaty 고맙다!

답변

1

BridgeId 열을 사용하지 마십시오.

ArticleId와 CateogryId에서 복합 기본 키 (일명 compound key)를 만들면 각 조합이 고유하도록 할 수 있습니다.

각 열을 해당 테이블에 foreign key으로 만들고 제한 조건 세트를 완료하십시오.

+0

감사 - 나는 사실은 articleID와 카테고리 ID에 고유 종합 지수는 그것을 시도 BridgeID를 제거하지 않고를 (신원) 열과 작동했지만, 어쨌든 BridgeID를 제거하는 것은 결국 버릇이 없기 때문에 끝났습니다. 다시 한번 감사드립니다. – greg

0

먼저, ArticleID, CategoryID에 고유 색인을 작성하십시오.

그런 다음 기사 테이블에 다시 연결하는 articleID에 대한 외래 키 제약 조건을 설정합니다. CategoryID 및 Catgory 테이블에 대해 동일한 작업을 수행하십시오.

브리지 테이블에 PK를 만들고 다른 테이블에 FK를 작성하는 것처럼 사용자의 설명이 들리므로 작동하지 않습니다. 당신이 뭔가를 할 것이다 HLGEM의 솔루션을 확장

+0

그것은 누락 된 unqiue 복합 색인 문제였습니다. 미안하지만 명확하지 않은 점은 FK가 브리지 테이블에 있었지만 브리지 테이블의 ID 열에 PK가 있었는데 이제는 제거되고 모두 잘됩니다. 감사! – greg

0

:

Create Table ArticleCategories 
(
    Id int not null Primary Key Clustered 
    , ArticleId int not null 
    , CategoryId int not null 
    , Constraint UK_ArticleCategories_Unique (ArticleId, CategoryId) 
    , Constraint FK_ArticleCategories_Articles 
     Foreign Key (ArticleId) 
     References Articles(Id) 
    , Constraint FK_ArticleCategories_Categories 
     Foreign Key (CategoryId) 
     References Categories(Id) 
) 
대단히, 완벽한 이해 물론 작동하게
+0

완벽한 감사합니다. – greg