引用表'Reviewers'中没有与引用列匹配的主键或候选键

时间:2018-05-10 05:06:43

标签: key candidate

我收到了这个错误:

  

引用表'Reviewers'中没有与外键'FK_Review_Review_ID'中的引用列列表匹配的主键或候选键。
  Msg 1750,Level 16,State 0,Line 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 个答案:

答案 0 :(得分:1)

由于您的Reviewer表格在(Reviewer_ID, Review_ID)上有主键,因此任何想要引用Reviewer 的子表格也必须提供相同的两个列建立FK关系。

不能仅引用主键的一部分 - 全部或全部:要么提供 ALL 主键的列您引用的表格 - 或者您无法建立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)