Подтвердить что ты не робот

В ссылочной таблице нет первичных или потенциальных ключей, которые соответствуют списку столбцов ссылок в внешнем ключе

В SQL Server я получил эту ошибку →

"В ссылочной таблице нет первичных или потенциальных ключей" BookTitle ", которые соответствуют списку столбцов ссылок в внешнем ключе" 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, потому что появилась ошибка, указанная выше.

Я очень ценю полезную помощь.

4b9b3361

Ответ 1

Внешние ключи работают, присоединяя столбцы к уникальному ключу в другой таблице, и этот уникальный ключ должен быть определен как некоторая форма уникального индекса, будь то первичный ключ или какой-либо другой уникальный индекс.

В настоящий момент единственным уникальным индексом, который у вас есть, является составной на ISBN, Title, который является вашим основным ключом.

Для вас есть несколько вариантов, в зависимости от того, что именно хранится в BookTitle, и отношения данных внутри него.

Я бы рискнул предположить, что ISBN уникален для каждой строки в BookTitle. В предположении, что это так, затем измените свой первичный ключ только на ISBN и измените BookCopy, чтобы вместо Title у вас был ISBN и присоединился к нему.

Если вам нужно сохранить свой первичный ключ как ISBN, Title, вам нужно либо сохранить ISBN в BookCopy, либо Title, и внешний ключ в обоих столбцах, или вам нужно создать уникальный индекс в BookTitle (Title ) как отдельный индекс.

В более общем плане вам нужно убедиться, что столбец или столбцы, которые у вас есть в вашем предложении REFERENCES, соответствуют точно уникальному индексу в родительской таблице: в вашем случае он терпит неудачу, потому что у вас нет единственного уникального индекса в Title.

Ответ 2

Другое дело - если ваши ключи очень сложны, иногда вам нужно заменить места полей, и это помогает:

если этот доцент работает:

внешний ключ (ISBN, название) ссылки BookTitle (ISBN, название)

Тогда это может работать (не для этого конкретного примера, но в целом):

внешний ключ (название, ISBN) ссылки BookTitle (Title, ISBN)

Ответ 3

Вам нужно

  • Уникальный индекс в Title в BookTitle
  • Столбец ISBN в BookCopy и FK находится в обоих столбцах

Внешний ключ должен однозначно идентифицировать родительскую строку: у вас нет способа сделать это, потому что Title не уникален.

Ответ 4

BookTitle имеют составной ключ. поэтому, если ключ BookTitle указан как foreign key, вы должны принести полный составной ключ.

Итак, чтобы решить проблему, вам нужно добавить полный составной ключ в BookCopy. Поэтому добавьте столбец ISBN. и они в конце.

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