テーブルのリレーションシップの種類
更新 : 2007 年 11 月
リレーションシップは、キー列のデータを一致させることで機能します。通常、キー列は両方のテーブルに存在する同じ名前の列です。ほとんどの場合、リレーションシップにより、あるテーブルの主キーとほかのテーブルの外部キーのエントリが一致します。主キーは、各行の固有の識別子になります。たとえば、titles テーブルの title_id 列 (主キー) と sales テーブルの title_id 列 (外部キー) の間にリレーションシップを作成することで、本の売上高と売れた特定の書名を関連付けることができます。
テーブル間のリレーションシップには、3 つの種類があります。作成されるリレーションシップの種類は、関連する列の定義方法によって決まります。
一対多リレーションシップ
多対多リレーションシップ
一対一リレーションシップ
一対多リレーションシップ
一対多リレーションシップは、最も一般的なリレーションシップの種類です。一対多リレーションシップでは、テーブル A の 1 つの行はテーブル B の複数の行と一致してかまいませんが、テーブル B の 1 つの行と一致できるテーブル A の行は 1 つだけです。たとえば、publishers テーブルと titles テーブルの関係は一対多リレーションシップです。つまり、1 つの出版社は複数の書籍を発行しますが、1 つの書籍はただ 1 つの出版社からしか出版されません。
関係する列のうち 1 つだけが主キーの場合、または 1 つだけに UNIQUE 制約が設定されている場合は、一対多リレーションシップを作成します。
一対多リレーションシップの主キーの側は、鍵の記号で示されます。リレーションシップの外部キーの側は、無限大の記号で示されます。
多対多リレーションシップ
多対多リレーションシップでは、テーブル A の 1 つの行とテーブル B の複数の行が一致でき、逆の関係も可能です。多対多リレーションシップは、結合テーブルと呼ばれる第 3 のテーブルを定義することで作成します。結合テーブルの主キーは、テーブル A とテーブル B の両方の外部キーによって構成されます。たとえば、authors テーブルと titles テーブルの間には多対多リレーションシップの関係があり、それぞれのテーブルから titleauthors テーブルに対する一対多リレーションシップによって定義されています。titleauthors テーブルの主キーは、au_id 列 (authors テーブルの主キー) と title_id 列 (titles テーブルの主キー) を組み合わせたものです。
一対一リレーションシップ
一対一リレーションシップでは、テーブル A の 1 つの行はテーブル B の 1 つの行としか一致することができず、テーブル B からテーブル A に対しても同じ関係が成立します。一対一リレーションシップは、関連する列が両方とも主キーの場合、または両方に UNIQUE 制約が設定されている場合に作成されます。
このような方法で関連しているほとんどの情報は 1 つのテーブルに格納されるため、この種のリレーションシップは一般的ではありません。一対一リレーションシップは次のような場合に使用します。
列の数が多いテーブルを分割する。
セキュリティ上の理由からテーブルの一部を分離する。
保存期間が短く、単にテーブルを削除することで簡単に削除できるようなデータを格納する。
主テーブルのサブセットに対してだけ適用される情報を格納する。
一対一リレーションシップの主キーの側は、鍵の記号で示されます。外部キーの側も、鍵の記号で示されます。