データベース ダイアグラムでは、2 つのテーブルの間にリレーションシップを作成して、一方のテーブルの列がもう一方のテーブルの列にどのようにリンクされているかを示すことができます。
リレーションシップを設定した 2 つのテーブルは、同じデータを共有できます。これにより、データが重複しないようにデータベースを設計できます。たとえば、書籍に関する情報を記録するデータベースを設計する場合なら、タイトル、出版日、出版社など、各書籍に関する情報を titles という名前のテーブルに格納することが考えられます。また、出版社に関しては、電話番号、所在地、郵便番号などの情報もデータベース内に維持する必要があるでしょう。この場合、すべての情報を titles テーブルに格納するように設計すると、同じ出版社の書籍のレコードには、電話番号が必ず重複して登録されるようになるため、データが冗長になってしまいます。
そこで、出版社情報を publishers という名前の別のテーブルにまとめて格納し、titles テーブルから publishers テーブルのエントリを参照するように設計すれば、データが冗長になるのを避けることができます。
titles テーブルのデータと publishers テーブルのデータを常に同期させるには、この 2 つのテーブルの間のリレーションシップに参照整合性を適用します。参照整合性は、2 つのテーブルの情報を必ず同期させるためのメカニズムです。titles テーブル内の各書名は、publishers テーブル内の特定の出版社に関連付ける必要があります。この場合、データベースに既に登録されている出版社についてのみ、書名をデータベースに追加できるようになります。
テーブルのリレーションシップの詳細については、次のトピックを参照してください。
リレーションシップでは、2 つのテーブルのキー列 (通常は両方のテーブルの間で名前が一致する列) を互いに関連付けます。ほとんどの場合は、一方のテーブルの主キーがもう一方のテーブルの外部キーに関連付けられます。なお、主キーでは、それぞれの行に固有の識別子が割り当てられます。たとえば、titles テーブルの title_id 列 (主キー) と sales テーブルの title_id 列 (外部キー) の間にリレーションシップを作成することで、特定のタイトルに売上げを関連付けることができます。
テーブル間のリレーションシップには、3 つの種類があります。作成したリレーションシップがどの種類になるかは、関連する列がどのように定義されているかによって決まります。
一対多リレーションシップは、最も多用されるリレーションシップです。このリレーションシップでは、テーブル A の行がテーブル B の複数の行に対応します。ただし、テーブル B の各行は、テーブル A の 1 つの行にのみ対応します。たとえば、publishers テーブルと titles テーブルの間には、一対多リレーションシップを設定します。これは、各出版社は多数の書籍を出版しますが、各書籍は 1 社の出版社からのみ出版されるためです。
一対多リレーションシップが作成されるのは、2 つの列のうち、どちらか一方だけが主キーとして定義されているか、または UNIQUE 制約を割り当てられている場合です。
多対多リレーションシップでは、テーブル A の各行がテーブル B の複数の行に対応し、テーブル B の各行がテーブル A の複数の行に対応します。多対多リレーションシップを作成するには、交差テーブルと呼ばれる第 3 のテーブルを定義します。交差テーブルの主キーは、テーブル A とテーブル B の両方の外部キーに対応します。たとえば、authors テーブルと titles テーブルの間に多対多リレーションシップを作成するには、各テーブルから titleauthors テーブルの間に一対多リレーションシップを作成します。titleauthors テーブルの主キーは、au_id 列 (authors テーブルの主キー) と title_id 列 (titles テーブルの主キー) の組み合わせです。
一対一リレーションシップでは、テーブル A の各行がテーブル B の単一の行に対応し、テーブル B の各行がテーブル A の単一の行に対応します。一対一リレーションシップが作成されるのは、2 つの列の両方が主キーとして定義されているか、または UNIQUE 制約を割り当てられている場合です。
通常、一対一で対応するデータはすべて同じテーブルに格納するため、一対一リレーションシップはあまり使われません。一対一リレーションシップを使うのは、次のような特別な理由がある場合です。
参照整合性は、関連するテーブルの行の間のリレーションシップの有効性を維持すると共に、関連するデータを誤って削除または変更するのを防止するためのルール体系です。
参照整合性を適用する場合は、次のルールに従う必要があります。
参照整合性を設定できるのは、次の条件がすべて成立している場合です。
データベース ダイアグラムでリレーションシップ ラインを作成すると、関連するテーブルに外部キー制約が作成され、そのリレーションシップに参照整合性が自動的に適用されます。参照整合性が適用されたリレーションシップは、実線としてデータベース ダイアグラムに表示されます。次に例を示します。
外部キー制約が無効になっており、参照整合性が適用されていないリレーションシップは、破線としてダイアグラムに表示されます。次に例を示します。
データベースによっては、INSERT トランザクションや UPDATE トランザクションの実行中など、特定の条件下で外部キー制約を無効にするオプションを設定できることがあります。
目的 | 参照先 |
---|---|
データベース ダイアグラム内でデータベース テーブルの間にリレーションシップを作成する。 | テーブル間にリレーションシップを作成する |
外部キー列に入力した各値を関連する主キー列の既存の値に必ず一致させる。 | テーブル間のリレーションシップに参照整合性を適用する |
テーブル内の列を同じテーブル内のほかの列とリンクする。 | 単一テーブルの再帰リレーションシップを作成する |
テーブル内の複数の行をほかのテーブル内の複数の行に関連付ける。 | データベース ダイアグラムに多対多リレーションシップをマップする |
リレーションシップの名前を変更する。 | リレーションシップの名前を変更する |
2 つのテーブルの間のリレーションシップを削除する。 | リレーションシップを削除する |
外部キー制約を無効にする。 | INSERT および UPDATE ステートメントの実行中に外部キー制約を無効にする レプリケーションに対する外部キー制約を無効にする |