【发布时间】:2014-06-17 06:40:08
【问题描述】:
CREATE TABLE SECTION,`
SectionNo int,
Semester CHAR(7),
CourseID CHAR(8),
PRIMARY KEY (SectionNo, Semester, CourseID),
FOREIGN KEY (CourseID) REFERENCES COURSE (CourseID),
);
CREATE TABLE REGISTRATION(
StudentID int,
SectionNo int,
Semester char(7),
PRIMARY KEY (StudentID, SectionNo, Semester),
FOREIGN KEY (SectionNo, Semester) REFERENCES Section (SectionNo, Semester),
下划线出现在“部分”下方。错误说:“在引用的表 'Section' 中没有与外键中的引用列列表匹配的主键或候选键。”我该如何解决这个问题?!
FOREIGN KEY (StudentID) REFERENCES Student (StudentID),
);
【问题讨论】:
-
嗯,错误信息是正确的。您不能仅使用
SectionNo和Semester唯一标识Section中的一行,因为它声明的主键还包括CourseID。如果您向我们提供有关您要建模的内容的任何实际解释,我们可能会提供更多帮助。 -
我获得了实体、属性和数据类型来创建六个不同的表。 SECTION 表有 3 个主键,因此我不能只将 SectionNo 和 Semester 添加到 SECTION 表的一个括号中。有什么建议吗?
-
如果通过“注册”,您的意思是“
Section表,那么不,它没有 3 个主键(实际上,在 SQL 中,您最多只能有一个 PK每个表,因此名称中包含单词 primary)。它有一个包含 3 列的 single 主键。这意味着为了引用该主键,您需要 3 列包含相同类型的数据和原版一样。 -
假设您的
Section表包含两行(列的顺序与您的问题中显示的顺序相同):- 第 1 行包含1,abc,def,第 2 行包含1,abc,ghi。也就是说,它们用于两个不同的课程,但具有相同的SectionNo和Semester值。现在我们在Registration中插入一行:2,1,abc- 该注册意味着是什么意思? -
感谢您的解释。那么,既然主键中有三列,我该如何将 SectionNo 和 Semester 引用到 REGISTRATION 表?
标签: sql foreign-keys primary-key ddl