SQL Serverでは、このエラーが発生しました->
「参照されたテーブル「BookTitle」には、外部キー「FK _BookCopy _ Title__2F10007B」の参照列リストに一致する主キーまたは候補キーがありません。」
最初に、BookTitle
関係という関係を作成しました。
CREATE TABLE BookTitle (
ISBN CHAR(17) NOT NULL,
Title VARCHAR(100) NOT NULL,
Author_Name VARCHAR(30) NOT NULL,
Publisher VARCHAR(30) NOT NULL,
Genre VARCHAR(20) NOT NULL,
Language CHAR(3) NOT NULL,
PRIMARY KEY (ISBN, Title))
次に、BookCopy
関係という関係を作成しました。この関係は、BookTitle
関係の主キーTitle
を参照する必要があります。
CREATE TABLE BookCopy (
CopyNumber CHAR(10) NOT NULL,
Title VARCHAR(100) NOT NULL,
Date_Purchased DATE NOT NULL,
Amount DECIMAL(5, 2) NOT NULL,
PRIMARY KEY (CopyNumber),
FOREIGN KEY (Title) REFERENCES BookTitle(Title))
しかし、上記のエラーが発生したため、BookCopy
関係を作成できません。
私はいくつかの有用な助けに本当に感謝しています。
外部キーは、列を別のテーブルの一意のキーに結合することで機能します。その一意のキーは、プライマリキーまたはその他の一意のインデックスなど、何らかの形式の一意のインデックスとして定義する必要があります。
現時点では、唯一の一意のインデックスは、主キーであるISBN, Title
の複合インデックスです。
BookTitleが保持する内容とその中のデータの関係に応じて、多くのオプションが利用できます。
ISBNはBookTitleの各行に対して一意であると推測するのは危険です。これが事実であるという仮定で、主キーをISBNのみに変更し、タイトルの代わりにISBNを持ち、それに参加するようにBookCopyを変更します。
主キーをISBN, Title
として保持する必要がある場合は、ISBNをBookCopyに保存し、タイトルと外部キーを両方の列に保存する必要がありますOR BookTitle(Title)に一意のインデックスを一意のインデックスとして作成します。
より一般的には、REFERENCES
句に含まれる1つまたは複数の列が親テーブルの一意のインデックスと正確に一致することを確認する必要があります。この場合、Title
単独。
もう1つは、キーが非常に複雑な場合、フィールドの場所を置き換える必要がある場合があります。
この用量が機能する場合:
外部キー(ISBN、タイトル)はBookTitle(ISBN、タイトル)を参照します
次に、これは動作する可能性があります(この特定の例ではなく、一般的に):
外部キー(タイトル、ISBN)はBookTitle(タイトル、ISBN)を参照します
どちらかが必要です
外部キーは親行を一意に識別する必要があります。現在、タイトルは一意ではないため、これを行う方法はありません。
BookTitle
には複合キーがあります。 BookTitle
のキーがforeign key
として参照される場合、完全な複合キーを用意する必要があります。
したがって、問題を解決するには、BookCopy
に完全な複合キーを追加する必要があります。したがって、ISBN
列も追加します。そして彼らは最後に。
foreign key (ISBN, Title) references BookTitle (ISBN, Title)