참조된 테이블에 외부 키의 참조 열 목록과 일치하는 기본 키 또는 후보 키가 없습니다.
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
'programing' 카테고리의 다른 글
| HttpContext는 왜입니까?현재 null? (0) | 2023.06.26 |
|---|---|
| "쿼리 내에서 DML 작업을 수행할 수 없음"에 대한 솔루션? (0) | 2023.06.26 |
| Git: 리포지토리에서 파일을 삭제하지 않고 인덱스에서 파일을 제거하는 방법 (0) | 2023.06.26 |
| 자바를 이용한 대용량 엑셀 파일 작성 API (0) | 2023.06.21 |
| Spring Boot의 리소스에서 JSON 파일을 읽는 방법 (0) | 2023.06.21 |