2012-01-04 7 views
1

내가 가지고있는 다음과 같은 3 개 테이블 :외래 키 복합 기본 키

TBLA

ID - PK 
name 

tblB

ID - PK 
tblAID - FK references tblA.ID 
pkID2 

tblC

ID - PK 
tblAID * 
fkID2 * 
... 

내가이 할 경우,이 튜플 (tblB.tblAID, tblB.pkID2)

의 FK을 만들고 싶어 :

더 기본 또는 후보 키에 없습니다 : 나는 오류 메시지가

alter table tblC with check 
add constraint FK_tblC_tblB 
foreign key (tblAID, fkID2) 
references tblB (tblAID, pkID2) 

을 외부 키의 참조 열 목록과 일치하는 참조 된 테이블 'tblB' 'FK_tblC_tblB'

1 : 나는 에 tblC에 삽입 된 튜플 쌍이 존재하도록하고 싶다. 하지만 pkID2은 키가 아니기 때문에 그렇게 할 수 없습니다. 실제로 tblB은 복합 기본 키로 tblAID, pkID2을 가질 수 있습니다. 그러나 tblAID은 여전히 ​​tblA.ID의 FK 여야합니다.

+0

이것은 반 수사법이지만 tblC에 넣는 열을 tblB에 넣을 수없는 이유는 무엇입니까? – Dave

+0

나는 당신이 머무르고 자하는 것을 분명히 알지 못합니다. tblB에 tblAID 및 pkID2 값이 포함되어 있지 않으면 tblC에 행을 추가하지 못하게하고 tblC에 tblAID 및 pkID2 값이 포함되어 있으면 tblB에서 삭제되지 않도록이 제약 조건이 적용됩니까? –

답변

5

실제로 tblB는 복합 기본 키로 tblAID, pkID2를 가질 수 있습니다.

또는이 두 필드에서 새 고유 키를 만듭니다. 외래 키는 기본 키를 참조 할 필요가 없습니다.

그러나 tblAID는 여전히 tblA.ID의 FK 여야합니다.

여전히 작동합니다. 기본 키 또는 고유 키의 열은 외래 키 제약 조건을 비롯한 다른 제약 조건에도 참여할 수 있습니다.

+0

그래서'tblAID, pkID2'에 대해 새로운 고유 키를 추가 하시겠습니까? – Marcus

+0

네, 그게 제가 제안하는 것입니다. – hvd

+0

@IgorK : 정확합니다. http://msdn.microsoft.com/en-us/library/ms191166.aspx, http://msdn.microsoft.com/en-us/library/ms188066.aspx를 참조하십시오. – ruakh