web-dev-qa-db-ja.com

コンポジットではなく2つの主キー、この種の関係は何と呼ばれますか?

従業員/職位データを別のシステムと統合しています。

最初のシステムはHRです。 EmployeeテーブルとPositionsテーブルがあります。 2番目のシステムは、オフィススペースを追跡し、オフィスが誰に属しているかを追跡します。 1つのテーブル[em]を使用して、従業員と職位データの両方を格納します。

従業員がポジションを変更すると、ポジションIDが変更されます。ポジションが空席になり、新しい従業員がそのポジションを埋めると、従業員IDが変更されます。

ポジションIDと従業員IDはどちらも、このテーブルの主キーのように機能します。データベースの用語にこのタイプの関係の名前があるかどうかを調べようとしていますか?

4
user802599

これは複合キーと呼ばれます。

複合キーをどのように使用するかは問題ではありません。 2つのデータが行を一意に識別する場合、それは複合キーと呼ばれます。実際、定義しているユースケースは、ほとんどの場合、複合キーのユースケースです。

それらは通常自然キー(両方のフィールドがデータに関連している)ではなく、代理キー(両方のフィールドが独立していてデータから抽象化されている)です。店舗の場所と製品IDは、自然な複合キーの標準的な例です。あなたはただ従業員を使っています。

偶然にも、複合キーで使用される両方の入力にUNIQUEプロパティがあるときに名前があるかどうかを尋ねる場合は、いいえ。can実行しますが、あなたの場合、それは少し厄介ですよね?つまり、1人の従業員が2つのスペースを管理している場合はどうなるでしょうか。

CREATE TABLE em ( emid serial PRIMARY KEY, name text, position text );
CREATE TABLE space ( spaceid serial PRIMARY KEY, owner text );
CREATE TABLE em_space (
  emid    int REFERENCES em,
  spaceid int REFERENCES space,
  PRIMARY KEY (emid, spaceid)
);
2
Evan Carroll

2つの異なる列があり、それぞれがテーブルの主キーとして使用できる場合、2つの候補キーがあると言います。

1つの候補キーがthe主キーとして選択されます。選択されなかった他の候補キーは、代替キーと呼ばれることがあります。

キーは、単一の列または列の組み合わせにすることができます。複数の列から作成されたキーは、複合キーと呼ばれます。列は複数のキーの一部である場合があります。たとえば、候補キーは(col_a、col_b)、(col_a、col_c)、(col_d); col_aは複数の候補キーにあります。これらの最初の2つは複合候補キーですが、最後はそうではありません。

2
Michael Green