web-dev-qa-db-ja.com

外部キーと参照キーの違いは何ですか?

私はこれらの2つの用語について非常に混乱しています。それらは同じですか、異なるですか?

一部の本や人々は同じだと言い、他の人は違うと言う。

試しましたが、決定的な答えが見つかりませんでした。

31
Anderson

FOREIGN KEYキーワードが使用されていないREFERENCESの使用について話していると思われます。

author_id INTEGER REFERENCES author(id)

... の代わりに ...

author_id INTEGER,
FOREIGN KEY(author_id) REFERENCES author(id)

答えは、同じものの単純な構文であるということです。 2つの間を変更する際の主な関心事は、読みやすさです。

52

「参照キー」は、リレーショナルモデリングまたは米国英語のSQL実装における通常の技術用語ではありません。

外部キーは、他のテーブルのキーを「参照」します。それが混乱の原因なのでしょうか?

本当に何かを参照キーとは呼ばない...それらは同じものです...あなたはWordを見るかもしれませんreferencessqliteでの例:このような構文を使用して、著者と本のデータベースを開始できます。これにより、1人の著者が多くの本を所有できることを示すことができます。これは、books.author_id(数行上で定義)参照author.id

CREATE TABLE 'author' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    firstname varchar(255)
    lastname varchar(255)
);

CREATE TABLE 'books' (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    author_id INTEGER,
    title varchar(255),
    published date,
    FOREIGN KEY(author_id) REFERENCES author(id)
);
7
maneesha

外部キーmust主キーを参照します。 REFERENCES制約を単純に使用する場合、参照されるキーが主キーである必要はありません。

4
alpha

おそらく、「参照キー」という用語を多少緩く使用しているのでしょうか?

1つの行の外部キー値は、対応するキー値を含む行を「参照」すると言われます。前の文の「参照」という単語は動詞なので、参照する外部キー値と参照されるキー値があると言うことができます。

参照されているのはテーブルキー制約ではなくキー値ですが、大まかに言って、参照される可能性のある値を含む行を意味する「参照キー」と言うことができると思います。次に、「参照キー」が「参照キー」になり得るが、その起源を信じることができない方法を確認します。

3
onedaywhen

外部キーは、他のテーブルのキーを「参照」します。他のテーブルのそのキーは、参照キーと呼ばれます。 phpmyadminでグラフィック機能を使用している場合、おそらくこれについてよく耳にするでしょう。

2
Matt Junior

2つのキーワード「FOREIGN KEY」と「REFERENCES」キーワードの唯一かつ最も重要な違いは、どちらもデータを親テーブルの子データにすることですが、「FOREIGN KEY」はテーブルレベルの制約を作成するために使用されますがREFERENCESキーワードは、列レベルの制約の作成にのみ使用できます列レベルの制約は、テーブルの作成中にのみ作成できますが、テーブルレベルの制約は、ALTER TABLEコマンドを使用して追加できます。

1
user7901336

外部キーを宣言するには2つの方法があります。

  1. 外部キーが単一属性の場合:
    リファレンス()

  2. 外部キーが属性のリストである場合

外部キー()のリファレンス

1