2012-04-05 7 views
0

내 DB에 외래 키를 만드는 데 문제가 있습니다. 여기 내 테이블 모양을의 의역 모델 :새 외래 키 만들기 (SQL Server)

참고

* (PK) NOTE_ID BIGINT 
*  TITLE  VARCHAR(200) 
*  DATE  DATETIME 
*  SERIES_ID BIGINT 

시리즈

* (PK) SERIES_ID BIGINT 
*  TITLE  VARCHAR(200) 
*  DESCR  VARCHAR(1000) 

나는이 NOTE의 관계 "는있다"만들려고하고 있고 SERIES에 의해 SERIES_ID. 나는 SERIES_ID에 의해 두 테이블 사이에 외래 키를 설정하는 것은 해결책이 될 것이라고 생각하지만, 나는 내가 다음과 같은 오류 얻을 만들려고 할 때

ERROR: There are no primary or candidate keys in the referenced table 'dbo.SERIES' that match the referencing column list in the foreign key 'FK_SERIES_NOTE'. Could not create constraint

내가 함께 제공되는 웹 데이터베이스 관리 프로그램을 사용하고 있습니다를 GoDaddy SQL Server를 설치 했으므로 사용하려는 기본 쿼리가 무엇인지 또는 게시 할 것인지 확실하지 않습니다.

결국 내 노트 객체에 대한 NHibernate 매핑에 Series 객체와 일대일 관계가 포함되도록 관계를 작성하는 것이 전부입니다. 비록 외래 키를 사용하여 올바른 방식으로이 문제를 해결하려고 노력하지 않을 수도 있습니다.

나는 올바른 방향으로 가고 있습니까?

편집 : 좀 더 간단한 예제로 테이블을 페어링하려는 시도에서 필자는 몇 가지 중요하지 않은 열로 생각한 것을 제거했습니다. 그러나 실제로 시리즈 테이블에서 합성 기본 키의 일부인 필드를 종료했습니다. 그래서, 외래 키를 합성 키의 한 부분에만 할당하려했기 때문에 그렇게 할 수 없었습니다.

결국 테이블의 구조를 다시 한 번 살펴 봤는데 실제로 다른 키를 필요로하지 않는다는 사실을 알았습니다. 제거한 후에 외래 키 할당이 훌륭하게 작동합니다. 당신이 할 수있는 경우

+0

도움이 될 것입니다 ** 실제 T-SQL 문 ** 생성 중, 아무 것도 말하기가 정말 어렵습니다. 웹 관리자가 잘못된 것일 가능성이 가장 높습니다. 아니면 틀린 열 또는 다른 것을 선택하고 있습니다 ..... –

+1

@Tyler, NHibernate 관점과 데이터베이스 관점에서 볼 때, 일대일 관계가 아닙니다. 다 대일 관계입니다. 두 주 키가 모두 'NOTE_ID'이면 일대일 관계가됩니다. –

+3

'SERIES'에서'SERIES_ID'를 프라이 머리 키로 표시했습니다, 그러나 이것이 실제로 그렇게 확인 했습니까? 많은 사람들이 기본 키와 ID 열을 혼동합니다. 두 가지 개념이 다릅니다. 가능한 경우 사용중인 관리자 응용 프로그램에서 기존 객체에 대한 스크립트를 생성 할 수 있습니까? 그렇다면 의사 정의가 아닌 실제 테이블 정의를 추가하는 것이 유용 할 것입니다. –

답변

0

, 당신은 결과 오류 메시지 쿼리 분석기에서 다음 문을 실행 해 볼 수있다 (나는 @Damien_The_Unbeliever 잘 추측) :

ALTER TABLE NOTE ADD CONSTRAINT FK_SERIES_NOTE 
FOREIGN KEY (SERIES_ID) REFERENCES SERIES(SERIES_ID) 
--ON DELETE CASCADE 
-- uncomment the preceding line if you want a delete on a serie 
-- to automatically delete all notes on this serie 

희망이가없이