【发布时间】: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