web-dev-qa-db-ja.com

複合キーを持つ外部キー

次の依存関係を持つテーブルがあるとします。

Name、BoughtFrom、TimeBought)->コスト

太字の3つの属性は、テーブルの複合主キーを形成します。次に、別のテーブルからこのテーブルにリンク(関係を形成)したいと思います。それ、どうやったら出来るの? ID列があれば何をすべきかはわかりますが、このようなシナリオに遭遇したことはありません。

3つの列をすべて追加する必要がありますか(Name, BoughtFrom, TimeBought)他のテーブルへ?それとも別の方法がありますか?

5
J86

はい、3つの列をすべて追加します。両方のテーブルで同じ名前を持っていると仮定すると、次のようなものを使用します

foreign key (Name, BoughtFrom, TimeBought) 
  references the_other_table_name (Name, BoughtFrom, TimeBought)

サロゲートID番号を使用する場合でも、{Name、BoughtFrom、TimeBought}に一意の制約が必要です。あなたはこれらの線に沿った何かでそれを行うことができます。

create table your_table (
  your_id_number integer primary key,
  Name ... ,
  BoughtFrom ... ,
  TimeBought ... ,
  unique (Name, BoughtFrom, TimeBought)
);

サロゲートキーはhaveをID番号にすることはできません。 anyである必要はありません。しかし、自動的に増加するID番号が最も一般的です。

サロゲート代わりになるを意味します。 ID番号のような代理キーは、自然キーの代わりになります。代理母のようなものは、自然の母の代わりをします。