我收到了这个错误:
引用表'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
答案 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)