gpt4 book ai didi

sql - 引用表中没有与外键中引用列列表匹配的主键或候选键

转载 作者:行者123 更新时间:2023-12-01 18:14:18 24 4
gpt4 key购买 nike

在 SQL Server 中,我收到此错误:

There are no primary or candidate keys in the referenced table 'BookTitle' that match the referencing column list in the foreign key '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 关系,因为出现了上述错误。

最佳答案

外键的工作原理是将列连接到另一个表中的唯一键,并且该唯一键必须定义为某种形式的唯一索引,无论是主键还是其他唯一索引。

目前,您拥有的唯一唯一索引是 ISBN, Title 的复合索引,这是您的主键。

有许多选项可供您选择,具体取决于 BookTitle 所包含的内容以及其中数据的关系。

我大胆猜测 BookTitle 中每一行的 ISBN 都是唯一的。假设情况确实如此,则将您的主键更改为仅在 ISBN 上,并更改 BookCopy,以便您拥有 ISBN 并加入其中,而不是标题。

如果您需要将主键保留为 ISBN, Title,那么您需要将 ISBN 以及标题和两列上的外键存储在 BookCopy 中,或者您需要创建BookTitle(Title) 上的唯一索引作为唯一索引。

更一般地说,您需要确保 REFERENCES 子句中的一列或多列与父表中的唯一索引完全匹配:在您的情况下,它会失败,因为您没有仅针对 Title 建立单一唯一索引。

关于sql - 引用表中没有与外键中引用列列表匹配的主键或候选键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17879735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com