私のシナリオでは、次のような同じ問題に直面しました。
最初に教科書の表を作成しました
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(単一列の主キーを持つ)の間に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制約は存在しますが、無効になっています