В ссылочной таблице "Рецензенты" отсутствуют первичные ключи или ключи-кандидаты, соответствующие столбцу ссылок.

Я получаю эту ошибку:

В ссылочной таблице "Рецензенты" нет первичных или потенциальных ключей, соответствующих списку ссылочных столбцов во внешнем ключе "FK_Review_Review_ID".
Сообщение 1750, уровень 16, состояние 0, строка 57
Не удалось создать ограничение или индекс. Смотрите предыдущие ошибки.

Мой код:

/* Table Creation Products */

CREATE TABLE Products
(
    Product_Name VARCHAR(120) NOT NULL
    ,Product_URL VARCHAR(165) NOT NULL
    ,Price MONEY CHECK (Price > 0) NOT NULL
)
GO

/* Entity Integrity by Primary Key*/
ALTER TABLE Products
ADD CONSTRAINT PK_Products_Product_URL
PRIMARY KEY (Product_URL)
GO

/* Table Creation Reviewers */
CREATE TABLE Reviewers
(
    Reviewer_ID INT NOT NULL
    ,Review_ID INT NOT NULL
    ,Review_Summary VARCHAR(15) NOT NULL
    ,Review VARCHAR(280) NOT NULL
    ,Review_Date DATE
    ,Overall_Rating INT NOT NULL
    ,Helpful INT
    ,Unhelpful INT
)
GO

ALTER TABLE Reviewers
ADD CONSTRAINT PK_Reviewers_Reviewer_ID_Review_ID
PRIMARY KEY (Reviewer_ID, Review_ID)
GO

/* Table Creation Review */
CREATE TABLE Review
(
    Product_URL VARCHAR(165) NOT NULL
    ,Review_ID INT NOT NULL
)
GO

/* Entity Integrity by Primary Key*/ 
ALTER TABLE Review
ADD CONSTRAINT PK_Product_URL_Review_ID
PRIMARY KEY (Product_URL, Review_ID)
GO

/* Entity Integrity by Foreign Key */
ALTER TABLE Review
ADD CONSTRAINT FK_Review_Product_URL
FOREIGN KEY (Product_URL)
REFERENCES Products (Product_URL)
GO

ALTER TABLE Review
ADD CONSTRAINT FK_Review_Review_ID
FOREIGN KEY (Review_ID)
REFERENCES Reviewers (Review_ID)
GO

1 ответ

Так как ваш Reviewer таблица имеет первичный ключ на (Reviewer_ID, Review_ID)любая дочерняя таблица, на которую нужно сослаться Reviewer должны также предоставить те же два столбца, чтобы установить отношения FK.

Вы НЕ МОЖЕТЕ ссылаться только на часть первичного ключа - это все или ничего: либо вы предоставляете ВСЕ столбцы первичного ключа вашей ссылочной таблицы, либо не можете установить отношения FK.

Так что в вашем случае вы бы добавили Reviewer_ID колонка к вашему Review таблицу, так что вы можете использовать два обязательных столбца для отношения FK:

ALTER TABLE dbo.Review
ADD CONSTRAINT FK_Review_Review_ID
    FOREIGN KEY (Review_ID, Reviewer_ID) 
    REFERENCES dbo.Reviewers (Review_ID, Reviewer_ID)
Другие вопросы по тегам