【问题标题】:MSG 1776 SQL "There are no primary or candidate keys in the referenced table"MSG 1776 SQL“引用的表中没有主键或候选键”
【发布时间】:2014-10-20 01:12:44
【问题描述】:

我正在创建表,我收到外键约束错误,并说该表在引用的表中没有主键或候选键。但是我愿意。

CREATE TABLE TCourses 
(
 intCourseID                        INTEGER                         NOT NULL
,strCourse                          VARCHAR(50)                     NOT NULL
,strDescription                     VARCHAR(50)                     NOT NULL
,intRoomID                          INTEGER                         NOT NULL
,intInstructorID                    INTEGER                         NOT NULL
,intBookID                          INTEGER                         NOT NULL

CONSTRAINT  TCourses_PK                     PRIMARY KEY ( intCourseID )
);

CREATE TABLE TBooks
(
 intBookID                          INTEGER                         NOT NULL
,intAuthorID                        INTEGER                         NOT NULL
,intAuthorIndex                     INTEGER                         NOT NULL
,strBookTitle                       VARCHAR(50)                     NOT NULL
,strBookISBN                        VARCHAR(50)                     NOT NULL

CONSTRAINT TBooks_PK                        PRIMARY KEY ( intBookID, intAuthorID, intAuthorIndex )
);


--3


ALTER TABLE TCourses    ​ADD CONSTRAINT TCourses_TBooks_FK


FOREIGN KEY (intBookID) REFERENCES TBooks (intBookID)

【问题讨论】:

  • 粘贴实际代码。您的 CREATE TABLE 语句不可能像现在这样运行。
  • tbooks 有一个复合主键(三件事)。您的外键引用仅指向一个。可能与所有这些有关......
  • tbook_id成为你在tbooks中的主键。这将修复您的外键引用。如果您需要 tbooks 中的其他字段是唯一的,请添加唯一约束。
  • 我将 intAuthorID 作为 TAuthors 表中的主键键就好了,这是一个外键。只是 intBookID 不想成为 TCourses 表中的外键。
  • 我什至将其更改为 intCourseID、intBookID、intAuthorID 删除了 intAuthorIndex,它将允许 intCourseID 和 intAuthorID 作为外键,但不允许 intBookID。

标签: mysql sql-server database


【解决方案1】:

好吧,伙计们,我想通了。如果我按原样保留它,strBookISBN 将是一个隐藏的重复组。所以我需要 TCourses、TBooks、TCourseBooks 才能让它工作。 TCourseBooks 是我的关系表。

感谢大家的帮助。

【讨论】:

  • 当您回来时,请考虑正式接受您的回答。这样一来,您的问题就会在问题列表中显示为已解决,人们不会浪费时间打开它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 2018-12-25
  • 2022-01-07
  • 1970-01-01
  • 2016-06-08
相关资源
最近更新 更多