Accessでお仕事 テーブルのリレーションシップ

テーブルのリレーションシップ

データベース ダイアグラムでは、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 ステートメントの実行中に外部キー制約を無効にする
レプリケーションに対する外部キー制約を無効にする


このページのトップに戻る↑ 次の項目を見る↓ Accessでお仕事 目次に戻る

ホームページのトップに戻る