programing

참조된 테이블에 외부 키의 참조 열 목록과 일치하는 기본 키 또는 후보 키가 없습니다.

itmemos 2023. 6. 26. 21:04
반응형

참조된 테이블에 외부 키의 참조 열 목록과 일치하는 기본 키 또는 후보 키가 없습니다.

SQL Server에서 다음 오류가 발생했습니다.

There are no primary or candidate keys in the referenced table 'BookTitle' that match the referencing column list in the foreign key 'FK__BookCopy__Title__2F10007B'.

나는 처음에 관계를 만들었습니다.BookTitle관계.

CREATE TABLE BookTitle (
ISBN            CHAR(17)       NOT NULL,
Title           VARCHAR(100)   NOT NULL,
Author_Name     VARCHAR(30)    NOT NULL,
Publisher       VARCHAR(30)    NOT NULL,
Genre           VARCHAR(20)    NOT NULL,
Language        CHAR(3)        NOT NULL,    
PRIMARY KEY (ISBN, Title))

그리고 나서 나는 그 관계를 만들었습니다.BookCopy관계.이 관계는 다음을 참조해야 합니다.BookTitle관계의 기본 키,Title.

CREATE TABLE BookCopy (
CopyNumber         CHAR(10)            NOT NULL,
Title              VARCHAR(100)        NOT NULL,
Date_Purchased     DATE                NOT NULL,
Amount             DECIMAL(5, 2)       NOT NULL,
PRIMARY KEY (CopyNumber),
FOREIGN KEY (Title) REFERENCES BookTitle(Title))

하지만 나는 그것을 만들 수 없습니다.BookCopy위에 언급된 오류가 나타났기 때문에 관계가 발생했습니다.

외부 키는 열을 다른 테이블의 고유 키에 결합하는 방식으로 작동하며, 이 고유 키는 기본 키 또는 다른 고유 인덱스와 같은 고유 인덱스 형식으로 정의되어야 합니다.

현재 당신이 가지고 있는 유일한 유일한 고유 인덱스는ISBN, Title기본 키입니다.

책 제목의 정확한 내용과 그 안에 있는 데이터의 관계에 따라 여러 가지 옵션이 열려 있습니다.

ISBN은 BookTitle의 각 행에 대해 고유하다고 추측할 수 있습니다.이 경우를 가정하여 기본 키를 ISBN에만 있도록 변경하고 BookCopy를 변경하여 제목 대신 ISBN을 사용하고 가입합니다.

기본 키를 다음과 같이 유지해야 하는 경우ISBN, Title그런 다음 ISBN을 BookCopy에 저장하고 제목과 외부 키를 두 열에 모두 저장하거나 BookTitle(제목)에 고유 인덱스를 만들어야 합니다.

더 일반적으로, 당신은 당신이 가지고 있는 열들을 확인할 필요가 있습니다.REFERENCES절이 부모 테이블의 고유 인덱스와 정확히 일치합니다. 이 경우 단일 고유 인덱스가 없기 때문에 실패합니다.Title홀로.

또 다른 점은 키가 매우 복잡할 경우 필드의 위치를 교체해야 하기 때문에 다음과 같은 이점이 있습니다.

이것이 작동하지 않는 경우:

foreign key (ISBN, Title) references BookTitle (ISBN, Title)

그러면 다음과 같은 방법이 사용될 수 있습니다(이 특정 예는 아니지만 일반적으로).

foreign key (Title,ISBN) references BookTitle (Title,ISBN)

둘 중 하나가 필요합니다.

  • 책 제목의 제목에 대한 고유 색인
  • BookCopy의 ISBN 열과 FK가 두 열에 모두 있습니다.

외부 키는 상위 행을 고유하게 식별해야 합니다. 제목이 고유하지 않기 때문에 현재 이를 수행할 방법이 없습니다.

BookTitle복합 키가 있습니다.그래서 만약 열쇠가BookTitle로 참조됩니다.foreign key당신은 완전한 복합 키를 가져와야 합니다.

따라서 문제를 해결하려면 전체 복합 키를 에 추가해야 합니다.BookCopy그래서 추가ISBN열도 있고 마지막에 그들도 있습니다.

foreign key (ISBN, Title) references BookTitle (ISBN, Title)

지금 같은 문제에 직면했습니다.간단한 설명: 두 번째 테이블에는 기본 키가 없습니다.첫 번째 테이블의 외부 키는 연결하려는 다른 테이블의 기본 키여야 합니다.

언급URL : https://stackoverflow.com/questions/17879735/there-are-no-primary-or-candidate-keys-in-the-referenced-table-that-match-the-re

반응형