복붙노트

[SQL] 외래 키에서 참조하는 열 목록과 일치 참조 테이블에 기본 또는 후보 키가 없습니다

SQL

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

SQL Server에서이 오류가있어 ->

내가 먼저 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 관계의 기본 키, 제목을 참조하여이 관계가 필요합니다.

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 관계를 만들 수 없습니다.

정말 유용한 도움을 주셔서 감사합니다.

해결법

  1. ==============================

    1.외부 키는 그것을 기본 키 또는 다른 고유 인덱스를 할, 다른 테이블의 고유 키에 열을 결합하여 작동하고, 그 고유 키는 고유 인덱스의 형태로 정의해야합니다.

    외부 키는 그것을 기본 키 또는 다른 고유 인덱스를 할, 다른 테이블의 고유 키에 열을 결합하여 작동하고, 그 고유 키는 고유 인덱스의 형태로 정의해야합니다.

    지금이 순간, 당신이 유일한 고유 인덱스는 기본 키 ISBN에 합성 한 제목이다.

    옵션의 수는 BOOKTITLE 보유하고 그 안에 데이터의 관계를 정확히 무엇에 따라, 당신에게 열이 있습니다.

    ISBN이이 BOOKTITLE 각 행에 대해 고유한지 나는 짐작한다. 가정이 경우, 만 ISBN에있을 기본 키를 변경하고, 그 대신 제목의 당신이 ISBN 수 있도록 BookCopy을 변경하고 그에 가입 할 수 있습니다.

    당신은 ISBN 등의 기본 키를 누른 다음 제목을 유지해야 할 경우 당신은 같은 BOOKTITLE (제목)에 고유 인덱스를 작성해야 하나 잘 제목 등으로 BookCopy에 ISBN을 저장해야하고, 두 열에서 외래 키, 또는 별개의 인덱스입니다.

    당신은 혼자가 제목에 하나의 고유 인덱스가 없기 때문에 귀하의 경우에는 실패 : 더 일반적으로, 당신은 당신이 당신의 참조 절 일치 부모 테이블에서 정확히 고유 인덱스에있는 열 또는 열이 있는지 확인해야합니다.

  2. ==============================

    2.또 다른 한가지는 - 당신의 키가 아주 가끔 복잡하면 필드의 장소를 교체해야하고 도움이되는 경우 :

    또 다른 한가지는 - 당신의 키가 아주 가끔 복잡하면 필드의 장소를 교체해야하고 도움이되는 경우 :

    문제가 해결되지 않는 경우 :

    외래 키 (ISBN, 제목) 참조 BOOKTITLE (ISBN, 제목)

    그런 (안이 특정 예를 들어 있지만, 일반적으로)이 힘 작업 :

    외래 키 (제목, ISBN) 참조 BOOKTITLE (제목, ISBN)

  3. ==============================

    3.당신도 필요

    당신도 필요

    고유에 대한 외래 키 필요는 부모 행을 식별 : 현재 제목이 고유하지 않기 때문에 그렇게 할 수있는 방법이 없습니다.

  4. ==============================

    4.BOOKTITLE는 복합 키가 있습니다. BOOKTITLE의 키를 외래 키로 참조 그렇다면 당신은 전체 복합 키를 가지고해야합니다.

    BOOKTITLE는 복합 키가 있습니다. BOOKTITLE의 키를 외래 키로 참조 그렇다면 당신은 전체 복합 키를 가지고해야합니다.

    그래서이 문제를 해결하기 위해 당신은 BookCopy의 전체 복합 키를 추가해야합니다. 그래서 ISBN에게 열을 추가 할뿐만 아니라. 마지막에하고.

    foreign key (ISBN, Title) references BookTitle (ISBN, Title)
    
  5. from https://stackoverflow.com/questions/17879735/there-are-no-primary-or-candidate-keys-in-the-referenced-table-that-match-the-re by cc-by-sa and MIT license