我在我的场景中遇到了同样的问题,如下所示:
我首先创建了教科书表
create table textbook(txtbk_isbn varchar2(13)
primary key,txtbk_title varchar2(40),
txtbk_author varchar2(40) );
然后章节表:
create table chapter(txtbk_isbn varchar2(13),chapter_title varchar2(40),
constraint pk_chapter primary key(txtbk_isbn,chapter_title),
constraint chapter_txtbook foreign key (txtbk_isbn) references textbook (txtbk_isbn));
然后主题表:
create table topic(topic_id varchar2(20) primary key,topic_name varchar2(40));
现在,当我想在章节(具有复合主键)和主题(具有单列主键)之间创建一个名为 chapter_topic 的关系时,我遇到了以下查询的问题:
create table chapter_topic(txtbk_isbn varchar2(13),chapter_title varchar2(40),topic_id varchar2(20),
primary key (txtbk_isbn, chapter_title, topic_id),
foreign key (txtbk_isbn) references textbook(txtbk_isbn),
foreign key (chapter_title) references chapter(chapter_title),
foreign key (topic_id) references topic (topic_id));
解决方案是引用复合外键,如下所示:
create table chapter_topic(txtbk_isbn varchar2(13),chapter_title varchar2(40),topic_id varchar2(20),
primary key (txtbk_isbn, chapter_title, topic_id),
foreign key (txtbk_isbn, chapter_title) references chapter(txtbk_isbn, chapter_title),
foreign key (topic_id) references topic (topic_id));
感谢 APC 的帖子,他在帖子中提到了以下声明:
造成这种情况的常见原因是
——父表完全没有约束
——父表的约束是一个复合键,我们没有引用外键语句中的所有列。
- 引用的 PK 约束存在但已禁用