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

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

重要:  この記事は機械翻訳されています。機械翻訳についての「免責事項」をお読みください。この記事の英語版を参照するには、ここをクリックしてください。

良いデータベース デザインの目的の 1 つはデータの重複 (重複データ) を取り除くことです。この目的を達成するには、データを主題ごとの複数のテーブルに分割し、各情報が 1 回だけ表現されるようにします。次に、分割した情報を一緒に取り出すための手段を Access に用意しますが、 このためには、関連する複数のテーブルに共通のフィールドを配置します。ただし、この手順を正しく実行するためには、テーブル間のリレーションシップについて理解したうえで、データベースでテーブルのリレーションシップを指定する必要があります。

この記事の内容

概要

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

テーブル リレーションシップを作成する理由

参照整合性について

テーブル リレーションシップを表示する

テーブル リレーションシップを作成する

テーブル リレーションシップを削除する

テーブル リレーションシップを変更する

参照整合性を適用する

概要

主題ごとのテーブルをデータベースに作成したら、それぞれの情報を必要に応じて一緒に取り出すための手段を Access に用意しておく必要があります。そのためには、関連のある複数のテーブルに共通のフィールドを配置し、テーブル間にリレーションシップを定義します。これにより、複数のテーブルからの情報を同時に表示するクエリ、フォーム、およびレポートを作成できるようになります。たとえば、次に示すフォームには複数のテーブルから取得した情報が含まれています。

5 つのテーブルにある関連情報を一括で表示する受注フォーム

1. このフォームは、[得意先] テーブルと、

2. [受注] テーブル、

3. [商品] テーブル、

4. [受注明細] テーブルの情報を表示しています。

[得意先] ボックスの得意先名は [得意先] テーブルから、受注 ID と受注日の値は [受注] テーブルから、商品名は [商品] テーブルから、単価と数量の値は [受注明細] テーブルからそれぞれ取得されます。これらのテーブルは、各テーブルの情報を一緒にフォームに取り込むために、さまざまな方法で相互にリンクしています。

前の例では、テーブルのフィールドを相互に連携させて、同じ受注に関する情報を表示できるようにする必要があります。テーブルの連係は、テーブルのリレーションシップを使用して行われます。テーブルのリレーションシップが機能するためには、"キー フィールド"  (多くの場合、関連する両方のテーブルに存在する同じ名前のフィールド) のデータが一致している必要があります。ほとんどの場合、このフィールドには、一方のテーブルの各レコードを一意に識別する "主キー" と、もう一方のテーブルの "外部キー" が使用されます。たとえば、[社員 ID] フィールドを使用して [社員] テーブルと [受注] テーブル間にリレーションシップを設定し、社員の氏名とその社員が担当した受注を関連付けることができます。

[社員] テーブルで主キー、[受注] テーブルで外部キーとして使用される社員 ID

1. EmployeeID は、一方のテーブルに主キーとして、

2. もう一方のテーブルに外部キーとして表示されます。

ページの先頭へ

リレーションシップの種類

Access でテーブルのリレーションシップの 3 種類があります。

  • 一対多リレーションシップ

    受注管理データベースに、[得意先] テーブルと [受注] テーブルがある例を考えます。1 つの得意先へは、何件でも注文を発注できます。この場合、[得意先] テーブルで表されている 1 つの得意先が、[受注] テーブルで表されている多数の受注に対応する可能性があります。[得意先] テーブルと [受注] テーブルの間のリレーションシップは一対多リレーションシップになります。

    データベース デザインで一対多リレーションシップを設定するには、一対多リレーションシップの "一" 側の主キーを "多" 側のテーブルにフィールドとして追加します。前述の例では、[得意先] テーブルの [ID] フィールドを [得意先 ID] フィールドとして [受注] テーブルに追加します。  Access は、[受注] テーブルの得意先 ID を使用して、各受注の正しい得意先を特定します。

  • 多対多リレーションシップ

    [商品] テーブルと [受注] テーブルの間の関係を考えてみましょう。1 つの注文には、複数の商品が含まれる可能性があります。また、1 つの商品は、複数の注文に含まれる可能性があります。つまり、[受注] テーブルの各レコードは [商品] テーブルの複数のレコードとなり得ます。また、[商品] テーブルの各レコードは、[受注] テーブルの複数のレコードとなり得ます。このリレーションシップは、多対多リレーションシップと呼ばれます。2 つのテーブルの間に多対多リレーションシップが存在することを検出するには、リレーションシップの両側を考慮する必要があります。

    多対多リレーションシップを設定するには、結合テーブルと呼ばれる 3 番目のテーブルを作成し、多対多リレーションシップを 2 つの一対多リレーションシップに分解します。3 番目のテーブルには、2 つのテーブルの主キーをそれぞれ挿入します。その結果、3 番目のテーブルには 2 つの一対多リレーションシップが設定されます。たとえば、[受注] テーブルと [商品] テーブルの間には多対多リレーションシップがあり、これは、[受注明細] テーブルへの 2 つの一対多リレーションシップを作成して定義されます。1 つの注文には、複数の商品が含まれる可能性があり、1 つの商品は複数の注文に含まれる可能性があります。

  • 一対一リレーションシップ

    一対一リレーションシップでは、最初のテーブルの各レコードは 2 番目のテーブルの 1 つのレコードに対応し、2 番目のテーブルの各レコードは最初のテーブルの 1 つのレコードに対応します。このような方法で関連しているほとんどの情報は 1 つのテーブルに格納されるため、このようなリレーションシップは一般的ではありません。多数のフィールドを持つテーブルを分割したり、主テーブルのサブセットのみに適用される情報を保存したりする場合、一対一リレーションシップを使用することがあります。このリレーションシップを使用する場合は、両方のテーブルに同じフィールドが存在する必要があります。

ページの先頭へ

テーブル リレーションシップを作成する理由

リレーションシップ ウィンドウを使用するか、[フィールド リスト] ウィンドウからフィールドをドラッグすることにより、テーブルのリレーションシップを明示的に作成できます。 Access では、1 つのデータベース オブジェクトで複数のテーブルを使用する必要がある場合に、テーブルのリレーションシップを使用してテーブルの結合方法を決定します。いくつかの理由から、テーブルのリレーションシップは、フォーム、クエリ、レポートなどの他のデータベース オブジェクトより先に作成する必要があります。

  • テーブルのリレーションシップがクエリ デザインに反映される

    多くの場合、複数のテーブルのレコードを操作するには、それらのテーブルを結合するクエリを作成する必要があります。クエリは、最初のテーブルの主キー フィールドの値を 2 番目のテーブルの外部キー フィールドに対応させることにより機能します。たとえば、各得意先のすべての注文を示す行を返すには、[得意先 ID] フィールドに基づいて [得意先] テーブルと [受注] テーブルを結合するクエリを作成します。リレーションシップ ウィンドウでは、結合するフィールドを手動で指定できます。ただし、2 つのテーブル間に既にリレーションシップが定義されている場合、Access では、既存のテーブルのリレーションシップに基づいて、既定の結合が行われます。また、いずれかのクエリ ウィザードを使用する場合、Access では既に定義されているテーブルのリレーションシップに基づいて収集された情報を使用して選択肢が示され、適切な既定値を使用してプロパティの設定値が定義されます。

  • テーブルのリレーションシップがフォーム デザインとレポート デザインに反映される

    フォームまたはレポートをデザインする場合、Access では既に定義されているテーブルのリレーションシップに基づいて収集された情報を使用して選択肢が示され、適切な既定値を使用してプロパティの設定値が定義されます。

  • テーブルのリレーションシップは参照整合性を適用するための基礎であり、データベースに孤立したレコードが発生するのを防ぎます。孤立化したレコードとは、存在しない別のレコードを参照しているレコードのことで、 たとえば、存在しない得意先レコードを参照している受注レコードがこれに該当します。

    データベースをデザインするときは、情報を複数のテーブルに分割し、各テーブルに主キーを設定します。次に、これらの主キーを参照する外部キーを関連テーブルに追加します。主キーと外部キーの組み合わせにより、テーブルのリレーションシップおよび、複数テーブルのクエリの基礎が形成されます。これらの外部キーと主キーの参照の同期が保たれている必要があります。テーブルのリレーションシップに依存する参照整合性は、参照を確実に同期しておくのに役立ちます。

ページの先頭へ

参照整合性について

データベースをデザインする場合、データベースの情報を主題ごとの多数のテーブルに分割して、データの重複をできるだけ少なくします。次に、関連のある複数のテーブルに共通のフィールドを配置することにより、分割した情報を一緒に取り出すための手段を Access に用意します。たとえば、一対多リレーションシップを設定するには、"一" 側のテーブルの主キーを "多" 側のテーブルのフィールドとして追加します。データを一緒に取り出すために、Access では "多" 側のテーブルの値から、"一" 側の対応する値が参照されます。このようにして、"多" 側のテーブルの値は、"一" 側のテーブルの対応する値を参照します。

[運送会社] と [受注] の間に一対多リレーションシップが設定されているとします。削除しようとしている運送会社の注文が [受注] テーブルにある場合、運送会社レコードを削除すると、この注文が "孤立" した状態になります。注文には運送会社 ID が含まれていますが、参照先のレコードが存在しないため、この ID は有効ではなくなります。

参照整合性の目的は、参照の同期を保ち、このような孤立した状態が発生しないようにすることです。

参照整合性を適用するには、テーブルのリレーションシップで参照整合性を有効にします (手順については「参照整合性を適用する」を参照)。いったん有効にすると、Access ではテーブルのリレーションシップに設定した参照整合性に違反する操作はすべて拒否されるようになります。つまり、Access では参照先を変更する更新操作と、参照先を削除する操作の両方が拒否されます。[受注] テーブルに注文が存在する運送会社の主キーをどうしても変更しなければならない場合もあります。このような場合は、Access で 1 回の操作で関連するすべての行が自動的に更新されるようにする必要があります。この方法であれば更新が完全に完了するので、Access の中でデータベースに更新された行と更新されていない行が混在するような矛盾した状態になることはありません。このため、Access では、[フィールドの連鎖更新] オプションがサポートされています。参照整合性を適用し、[フィールドの連鎖更新] オプションを有効にすると、Access では主キーを更新した場合に、その主キーを参照しているすべてのフィールドが自動的に更新されます。

また、1 つの行と関連するすべてのレコードをどうしても削除しなければならない場合があります  (たとえば、特定の運送会社レコードとその運送会社に関連するすべてのレコードを削除する必要がある場合)。このため、Access では、[フィールドの連鎖更新] オプションがサポートされています。参照整合性を適用し、[フィールドの連鎖更新] を有効にすると、リレーションシップの主キー側のレコードを削除した場合、Access によってその主キーを参照しているすべてのレコードが削除されます。

ページの先頭へ

テーブル リレーションシップを表示する

テーブル リレーションシップを表示するには、[データベース ツール] タブの [リレーションシップ] をクリックします。リレーションシップ ウィンドウが開き、既存のリレーションシップが表示されます。定義済みのテーブル リレーションシップがなく、リレーションシップ ウィンドウを初めて開いた場合は、テーブルまたはクエリをウィンドウに追加するよう求めるメッセージが Access によって表示されます。

リレーションシップ ウィンドウを開く

  1. [ファイル] をクリックし、[開く] をクリックします。

  2. データベースを選択して開きます。

  3. [データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。

    データベースにリレーションシップが設定されている場合は、リレーションシップ ウィンドウが開きます。データベースに定義済みのリレーションシップがなく、リレーションシップ ウィンドウを初めて開いた場合は、[テーブルの表示] ダイアログ ボックスが表示されます。[閉じる] をクリックしてダイアログ ボックスを閉じます。

  4. [デザイン] タブの [リレーションシップ] で [すべてのリレーションシップ] をクリックします。

    データベースのすべての定義済みリレーションシップが表示されます。ただし、隠しテーブル (テーブルの [プロパティ] ダイアログ ボックスで [隠しオブジェクト] チェック ボックスがオンになっているテーブル) とそれらのリレーションシップは、[ナビゲーション オプション] ダイアログ ボックスで [隠しオブジェクトの表示] チェック ボックスをオンにしない限り表示されません。

テーブルのリレーションシップは、リレーションシップ ウィンドウで 2 つのテーブルの間に描画されたリレーションシップ ラインで表現されます。参照整合性が適用されないリレーションシップは、リレーションシップの基礎となる共通のフィールドを結ぶ細線で表現されます。リレーションシップ ラインをクリックしてリレーションシップを選択すると、リレーションシップが選択されていることを示すためにラインが太い線に変わります。このリレーションシップに参照整合性を適用すると、ラインの両端が太く表示されます。また、リレーションシップ ラインの "一" 側の太い部分の上に数字 "1" が表示され、ラインの反対側の太い部分の上には無限大記号 () が表示されます。

リレーションシップ ウィンドウがアクティブなときは、リボンの次のコマンドから選択できます。

[デザイン] タブの [ツール] グループでは以下が選択できます。

  • [リレーションシップ]    [リレーションシップ] ダイアログ ボックスを開きます。リレーションシップ ラインを選択したときは、[リレーションシップ] をクリックしてテーブルのリレーションシップを変更できます。リレーションシップ ラインをダブルクリックすることもできます。

  • [レイアウトのクリア]    リレーションシップ ウィンドウの表示からすべてのテーブルとリレーションシップが削除されます。このコマンドは単にテーブルとリレーションシップを非表示にするだけであり、 削除するわけではありません。

  • [リレーションシップ レポート]    データベースのテーブルとリレーションシップを表示するレポートが作成されます。このレポートには、リレーションシップ ウィンドウで非表示になっていないテーブルとリレーションシップだけが表示されます。

[デザイン] タブの [リレーションシップ] グループでは以下が選択できます。

  • [テーブルの表示]    [テーブルの表示] ダイアログ ボックスが表示され、リレーションシップ ウィンドウに表示するテーブルおよびクエリを選択できます。

  • [テーブルを表示しない]    選択したテーブルがリレーションシップ ウィンドウで非表示になります。

  • [直接リレーションシップ]    選択したテーブルのすべてのリレーションシップおよび関連テーブルがリレーションシップ ウィンドウに表示されていない場合、これらが表示されます。

  • [すべてのリレーションシップ]    データベースのすべてのリレーションシップおよび関連テーブルがリレーションシップ ウィンドウに表示されます。ただし、隠しテーブル (テーブルの [プロパティ] ダイアログ ボックスで [隠しオブジェクト] チェック ボックスがオンになっているテーブル) とそれらのリレーションシップは、[ナビゲーション オプション] ダイアログ ボックスで [隠しオブジェクトの表示] チェック ボックスをオンにしない限り表示されません。

  • [終値]    リレーションシップ ウィンドウを閉じます。リレーションシップ ウィンドウのレイアウトを変更した場合は、変更を保存するかどうかの確認を求めるメッセージが表示されます。

ページの先頭へ

テーブル リレーションシップを作成する

テーブルのリレーションシップは、リレーションシップ ウィンドウを使用するか、または [フィールド リスト] ウィンドウからデータシートにフィールドをドラッグして作成できます。テーブル間にリレーションシップを作成する場合、共通のフィールドが同じ名前になっている必要はありません。ただし、多くの場合、同じ名前になっています。共通のフィールドには、むしろ同じデータ型を使用する必要があります。ただし、主キー フィールドがオートナンバー型フィールドのときは、外部キー フィールドを数値型のフィールドにすることもできますが、両方のフィールドの "FieldSize/フィールドサイズ" プロパティが一致している必要があります。たとえば、両方のフィールドの "FieldSize/フィールドサイズ" プロパティが [長整数型] の場合、オートナンバー型フィールドと数値型のフィールドを関連付けることができます。両方の共通のフィールドが数値型のフィールドの場合は、"FieldSize/フィールドサイズ" プロパティの設定を同じにする必要があります。

リレーションシップ ウィンドウを使用してテーブル リレーションシップを作成する

  1. [ファイル] をクリックし、[開く] をクリックします。

  2. データベースを選択して開きます。

  3. [データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。

  4. リレーションシップが 1 つも定義されていない場合は、[テーブルの表示] ダイアログ ボックスが自動的に表示されます。表示されない場合は、[デザイン] タブの [リレーションシップ] グループで [テーブルの表示] をクリックします。

    [テーブルの表示] ダイアログ ボックスには、データベース内のすべてのテーブルとクエリが表示されます。テーブルだけを表示するには、[テーブル] をクリックします。クエリだけを表示するには、[クエリ] をクリックします。テーブルとクエリの両方を表示するには、[両方] をクリックします。

  5. 1 つ以上のテーブルまたはクエリを選択し、[追加] をクリックします。テーブルとクエリをリレーションシップ ウィンドウに追加し終わったら、[閉じる] をクリックします。

  6. 1 つのテーブルのフィールド (通常は主キー) を、別のテーブルにおける共通のフィールド (外部キー) にドラッグします。複数のフィールドをドラッグするには、Ctrl キーを押しながら各フィールドをクリックし、ドラッグします。

    [リレーションシップ] ダイアログ ボックスが表示されます。

  7. 表示されたフィールド名が、リレーションシップを作成する共通のフィールドであることを確認します。フィールド名が正しくない場合は、問題のフィールド名をクリックし、一覧から別のフィールド名を選択します。

    このリレーションシップに参照整合性を適用するには、[参照整合性] チェック ボックスをオンにします。参照整合性の詳細については、「参照整合性について」および「参照整合性を適用する」を参照してください。

  8. [作成] をクリックします。

    2 つのテーブルの間には、リレーションシップ ラインが描画されます。[参照整合性] チェック ボックスをオンにすると、ラインの両端が太く表示されます。また、[参照整合性] チェック ボックスをオンにした場合に限り、リレーションシップ ラインの一方の太い部分の上に "1" が表示され、ラインの反対側の太い部分の上に無限大記号 () が表示されます。

    注記: 

    • 一対一リレーションシップを作成するには    共通のフィールドの両方 (通常は主キー フィールドと外部キー フィールド) に固有インデックスが設定されている必要があります。つまり、これらのフィールドの "Indexed/インデックス" プロパティが [はい (重複なし)] に設定されている必要があります。両方のフィールドに一意のインデックスが設定されていれば、Access で一対一リレーションシップが作成されます。

    • 一対多リレーションシップを作成するには    リレーションシップの "一" 側のフィールド (通常は主キー) に固有インデックスが設定されている必要があります。つまり、このフィールドの "Indexed/インデックス" プロパティが [はい (重複なし)] に設定されている必要があります。"多" 側のフィールドには、一意のインデックスを設定することはできません。"多" 側のフィールドには、インデックスを付けることはできますが、重複を許可する必要があります。つまり、このフィールドの "Indexed/インデックス" プロパティは、[いいえ] または [はい (重複あり)] のどちらかに設定されている必要があります。一方のフィールドに固有インデックスが設定されていて、もう一方のフィールドに固有インデックスが設定されていなければ、Access で一対多リレーションシップが作成されます。

[フィールド リスト] ウィンドウを使用してテーブル リレーションシップを作成する

[フィールド リスト] ウィンドウからフィールドをドラッグすることにより、データシート ビューで表示されている既存のテーブルにフィールドを追加できます。[フィールド リスト] ウィンドウには、関連するテーブルに存在するフィールドと、他のテーブルに存在するフィールドが表示されます。"他" の (関連付けられていない) テーブルからフィールドをドラッグし、ルックアップ ウィザードを完了すると、[フィールド リスト] ウィンドウ内のテーブルとフィールドのドラッグ先のテーブルとの間に、新しい一対多リレーションシップが自動的に作成されます。Access によって作成されたこのリレーションシップには、既定では参照整合性が適用されません。参照整合性を適用するには、リレーションシップを編集する必要があります。詳細については、「テーブル リレーションシップを変更する」をご覧ください。

テーブルをデータシート ビューで開く

  1. [ファイル] タブの [開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. ナビゲーション ウィンドウで、フィールドを追加してリレーションシップを作成するテーブルをマウスの右ボタンでクリックし、[開く] をクリックします。

[フィールド リスト] ウィンドウを開く

  • Alt キーを押しながら F8 キーを押します。

    [フィールド リスト] ウィンドウが表示されます。

[フィールド リスト] ウィンドウには、データベース内の他のテーブルがすべてカテゴリ別にグループ分けされて表示されます。Access では、データシート ビューでテーブルを操作する場合、各フィールドは [フィール ドリスト] ウィンドウの [リレーション テーブルで利用可能なフィールド] と [他のテーブルで利用可能なフィールド] の 2 つのカテゴリのいずれかに表示されます。1 つ目のカテゴリには、現在作業中のテーブルに関連付けられたテーブルがすべて一覧表示されます。2 つ目のカテゴリには、現在作業中のテーブルとのリレーションシップがないテーブルがすべて表示されます。

[フィールド リスト] ウィンドウで、テーブル名の横にあるプラス記号 (+) をクリックすると、テーブルで利用可能なフィールドがすべて一覧表示されます。テーブルにフィールドを追加するには、目的のフィールドを [フィールド リスト] ウィンドウから、データシート ビューのテーブルにドラッグします。

[フィールド リスト] ウィンドウからフィールドを追加してリレーションシップを作成する

  1. [フィールド リスト] ウィンドウの [他のテーブルで利用可能なフィールド] で、テーブル名の横にあるプラス記号 (+) をクリックして、テーブル内にあるフィールドの一覧を表示します。

  2. 目的のフィールドを [フィールド リスト] ウィンドウから、データシート ビューで開いているテーブルにドラッグします。

  3. 挿入位置が表示されたら、フィールドをそこにドロップします。

    ルックアップ ウィザードが起動します。

  4. 表示される手順に従って、ルックアップ ウィザードを完了します。

    目的のフィールドがデータシート ビューのテーブルに表示されます。

"他" の (関連付けられていない) テーブルからフィールドをドラッグし、ルックアップ ウィザードを完了すると、[フィールド リスト] 内のテーブルとフィールドのドラッグ先のテーブルとの間に、新しい一対多リレーションシップが自動的に作成されます。Access によって作成されたこのリレーションシップには、既定では参照整合性が適用されません。参照整合性を適用するには、リレーションシップを編集する必要があります。詳細については、「テーブル リレーションシップを変更する」をご覧ください。

ページの先頭へ

テーブル リレーションシップを削除する

テーブルのリレーションシップを削除するには、リレーションシップ ウィンドウでリレーションシップ ラインを削除する必要があります。マウス ポインターを慎重に移動してリレーションシップ ラインをポイントし、そのラインをクリックします。選択されたリレーションシップ ラインは太い線で表示されます。リレーションシップ ラインが選択されている状態で、Del キーを押します。リレーションシップを削除すると、そのリレーションシップで参照整合性が有効になっている場合は、参照整合性のサポートも削除されることに注意してください。結果として、Access でリレーションシップの "多" 側に孤立したレコードが作成されるのを自動的に防止することはできなくなります。

  1. [データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。

    リレーションシップ ウィンドウが表示されます。まだリレーションシップを定義したことがなく、初めてリレーションシップ ウィンドウを開いた場合は、[テーブルの表示] ダイアログ ボックスが表示されます。ダイアログ ボックスが表示されたら、[閉じる] をクリックします。

  2. [デザイン] タブの [リレーションシップ] で [すべてのリレーションシップ] をクリックします。

    リレーションシップが設定されているすべてのテーブルが、リレーションシップ ラインと共に表示されます。

  3. 削除するリレーションシップのリレーションシップ ラインをクリックします。選択されたリレーションシップ ラインは太い線で表示されます。

  4. Del キーを押します。

    または

マウスの右ボタンをクリックし、[削除] をクリックします。

  • "選択したリレーションシップをデータベースから削除しますか?" というメッセージが Access から表示されることがあります。この確認メッセージが表示されたら、[はい] をクリックします。

注: テーブルのリレーションシップで参照されているテーブルのいずれかが、他のユーザーやプロセス、または開かれているデータベース オブジェクト (フォームなど) によって使用されている場合、そのリレーションシップを削除することはできません。リレーションシップの削除を試みる前に、該当するテーブルを参照しているオブジェクトをすべて閉じる必要があります。

ページの先頭へ

テーブル リレーションシップを変更する

テーブルのリレーションシップを変更するには、リレーションシップ ウィンドウでリレーションシップを選択して編集します。マウス ポインターを慎重に移動してリレーションシップ ラインをポイントし、そのラインをクリックします。選択されたリレーションシップ ラインは太い線で表示されます。リレーションシップ ラインを選択した状態でダブルクリックするか、または [デザイン] タブの [ツール] グループで [リレーションシップ] をクリックします。[リレーションシップ] ダイアログ ボックスが表示されます。

[リレーションシップ] ダイアログ ボックスで変更する

  1. [データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。

    リレーションシップ ウィンドウが表示されます。まだリレーションシップを定義したことがなく、初めてリレーションシップ ウィンドウを開いた場合は、[テーブルの表示] ダイアログ ボックスが表示されます。ダイアログ ボックスが表示されたら、[閉じる] をクリックします。

  2. [デザイン] タブの [リレーションシップ] で [すべてのリレーションシップ] をクリックします。

    リレーションシップが設定されているすべてのテーブルが、リレーションシップ ラインと共に表示されます。

  3. 変更するリレーションシップのリレーションシップ ラインをクリックします。選択されたリレーションシップ ラインは太い線で表示されます。

  4. リレーションシップ ラインをダブルクリックします。

  5. 必要な変更を行って、[OK] をクリックします。

    [リレーションシップ] ダイアログ ボックスでは、テーブルのリレーションシップを変更することができます。具体的には、リレーションシップの両側のテーブルやクエリ、または両側のフィールドを変更できます。また、結合の種類を設定したり、参照整合性を適用して連鎖オプションを選択したりもできます。結合の種類とその設定方法の詳細については、「結合の種類を設定する」を参照してください。参照整合性を適用して連鎖オプションを選択する方法の詳細については、「参照整合性を適用する」を参照してください。

結合の種類を設定する

テーブルのリレーションシップを定義すると、リレーションシップの情報がクエリ デザインに反映されます。たとえば、2 つのテーブル間にリレーションシップを定義した後、それらのテーブルを使用するクエリを作成すると、Access ではリレーションシップで指定されているフィールドを基に、既定の一致フィールドが自動的に選択されます。このようなクエリの初期の既定値は上書きできますが、リレーションシップによって設定された値が適切であったことに後で気付くこともよくあります。複数のテーブルのデータを一致させて同時に取り出す操作は、ごく単純なデータベースを除くほとんどのデータベースで頻繁に実行されるため、リレーションシップを作成することで既定値が設定されれば、時間を節約できて便利です。

複数テーブルのクエリでは、共通のフィールドの値を一致させることによって、1 つ以上のテーブルの情報を組み合わせます。一致および組み合わせを行う操作は、結合と呼ばれます。たとえば、得意先の受注情報を表示する必要があるとします。そこで、[得意先] テーブルと [受注] テーブルを [得意先 ID] フィールドで結合するクエリを作成します。クエリ結果には、該当する一致が見つかった行に対する得意先情報と受注情報が含まれます。

リレーションシップごとに指定できる値の 1 つに、結合の種類があります。結合の種類は、どのレコードをクエリ結果に含めるかを Access に指示するものです。たとえば、[得意先] テーブルと [受注] テーブルを共通の [得意先 ID] フィールドで結合するクエリについて、もう一度考えます。既定の結合の種類 (内部結合) を使用した場合は、共通のフィールド (結合フィールド) が等しい [得意先] の行と [受注] の行だけがクエリから返されます。

しかし、まだ 1 度も注文していない得意先も含め、すべての [得意先] の行を取得したい場合もあります。そのためには、結合の種類を内部結合から左外部結合に変更する必要があります。左外部結合では、リレーションシップの左側のテーブルからはすべての行が返され、右側のテーブルからは一致する行だけが返されます。右外部結合では、右側の行のすべてと、左側の一致する行だけが返されます。

注: この場合、"左" および "右" は、リレーションシップ ウィンドウでのテーブルの位置ではなく、[リレーションシップ] ダイアログ ボックスでのテーブルの位置を示します。

リレーションシップを設定するときは、そのリレーションシップに基づいてテーブルを結合するクエリの結果を考慮して、適切な結合の種類を設定する必要があります。

結合の種類を設定する

  1. [リレーションシップ] ダイアログ ボックスで、[結合の種類] をクリックします。

    [結合プロパティ] ダイアログ ボックスが表示されます。

  2. 適切なオプションをクリックし、[OK] をクリックします。

次の表は、[得意先] テーブルと [受注] テーブルを使用した場合に [結合プロパティ] ダイアログ ボックスに表示される 3 つのオプションと、それぞれのオプションで使用される結合、および各テーブルのすべての行が含まれるか、または一致する行だけが含まれるかを示しています。

選択肢

リレーショナル結合

左テーブル

右テーブル

1. 両方のテーブルの結合フィールドが同じ行だけを含める。

内部結合

一致する行

一致する行

2. [得意先] の全レコードと [受注] の同じ結合フィールドのレコードだけを含める。

左外部結合

すべての行

一致する行

3. [受注] の全レコードと [得意先] の同じ結合フィールドのレコードだけを含める。

右外部結合

一致する行

すべての行

オプション 2 またはオプション 3 を選択すると、リレーションシップ ラインに矢印が表示されます。この矢印の向きは、リレーションシップの一致する行だけを表示する側を指します。

[結合プロパティ] ダイアログ ボックスで変更する

  1. [データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。

    リレーションシップ ウィンドウが表示されます。まだリレーションシップを定義したことがなく、初めてリレーションシップ ウィンドウを開いた場合は、[テーブルの表示] ダイアログ ボックスが表示されます。ダイアログ ボックスが表示されたら、[閉じる] をクリックします。

  2. [デザイン] タブの [リレーションシップ] で [すべてのリレーションシップ] をクリックします。

    リレーションシップが設定されているすべてのテーブルが、リレーションシップ ラインと共に表示されます。

  3. 変更するリレーションシップのリレーションシップ ラインをクリックします。選択されたリレーションシップ ラインは太い線で表示されます。

  4. リレーションシップ ラインをダブルクリックします。

    [リレーションシップ] ダイアログ ボックスが表示されます。

  5. [結合の種類] をクリックします。

  6. [結合プロパティ] ダイアログ ボックスで、いずれかのオプションをクリックし、[OK] をクリックします。

  7. 必要に応じてリレーションシップに変更を加え、[OK] をクリックします。

ページの先頭へ

参照整合性を適用する

参照整合性を使用する目的は、レコードの孤立を防ぎ、参照の同期を保つことによって、存在しない他のレコードを参照するレコードができないようにすることです。参照整合性を適用するには、テーブルのリレーションシップで参照整合性を有効にします。いったん有効にすると、Access ではテーブルのリレーションシップに設定した参照整合性に違反する操作はすべて拒否されるようになります。 Access では、参照先を変更する更新操作と、参照先を削除する操作の両方が拒否されます。Access で参照の更新および削除を反映して、関連するすべての行が適切に変更されるようにするには、「連鎖オプションを設定する」をご覧ください。

参照整合性を有効または無効にする

  1. リレーションシップ ウィンドウで、変更するリレーションシップのリレーションシップ ラインをクリックします。選択されたリレーションシップ ラインは太い線で表示されます。

  2. リレーションシップ ラインをダブルクリックします。

[リレーションシップ] ダイアログ ボックスが表示されます。

  1. [参照整合性] チェック ボックスをオンにします。

  2. 必要に応じてリレーションシップに変更を加え、[OK] をクリックします。

参照整合性を有効にすると、次の規則が適用されます。

  • 主テーブルの主キー フィールドに存在しない値を、関連テーブルの外部キー フィールドに入力することはできません。 このような操作は、孤立したレコードが作成される原因となります。

  • 一致するレコードが関連テーブルに存在している場合、そのレコードを主テーブルから削除することはできません。たとえば、[受注] テーブルに担当社員として入力されている社員のレコードを [社員] テーブルで削除することはできません。[レコードの連鎖削除] チェック ボックスをオンにすると、主レコードおよびすべての関連レコードを 1 回の操作で削除できるようになります。

  • 主テーブルの主キーの値を変更すると孤立したレコードが作成される結果になる場合、その値を変更することはできません。たとえば、[受注明細] テーブルで品目が関連付けられている受注について、[受注] テーブルの受注番号を変更することはできません。[フィールドの連鎖更新] チェック ボックスをオンにすると、主レコードおよびすべての関連レコードを 1 回の操作で更新できるようになります。

    注記: 参照整合性を有効にできない場合、参照整合性を適用するためには、次の条件を満たす必要があることに注意してください。

    • 主テーブルの共通のフィールドが主キーであるか、または固有インデックスが設定されていること。

    • 共通のフィールドが同じデータ型であること。例外として、オートナンバー型フィールドは、"FieldSize/フィールドサイズ" プロパティが [長整数型] に設定されている数値型フィールドに関連付けることができます。

    • 両方のテーブルが同じ Access データベースに存在していること。参照整合性はリンク テーブルには適用できません。ただし、ソース テーブルが Access 形式の場合は、それらのテーブルが格納されているデータベースを開き、そのデータベース内で参照整合性を有効にできます。

連鎖オプションを設定する

状況によっては、リレーションシップの "一" 側の値をどうしても変更する必要が生じることがあります。このような場合は、Access で 1 回の操作で関連するすべての行が自動的に更新されるようにする必要があります。この方法であれば更新が完全に完了するので、 データベースに更新された行と更新されていない行が混在するような矛盾した状態になることはありません。 Access では、この問題を回避するために、[フィールドの連鎖更新] オプションがサポートされています。参照整合性を適用し、[フィールドの連鎖更新] オプションを有効にすると、Access では主キーを更新した場合に、その主キーを参照しているすべてのフィールドが自動的に更新されます。

また、1 つの行と関連するすべてのレコードをどうしても削除しなければならない場合があります  (たとえば、特定の運送会社レコードとその運送会社に関連するすべてのレコードを削除する必要がある場合)。このため、Access では、[フィールドの連鎖更新] オプションがサポートされています。参照整合性を適用し、[レコードの連鎖削除] を有効にすると、Access では主キーを含むレコードを削除した場合にその主キーを参照しているすべてのレコードが自動的に削除されます。

連鎖更新や連鎖削除を有効または無効にする

  1. リレーションシップ ウィンドウで、変更するリレーションシップのリレーションシップ ラインをクリックします。選択されたリレーションシップ ラインは太い線で表示されます。

  2. リレーションシップ ラインをダブルクリックします。

[リレーションシップ] ダイアログ ボックスが表示されます。

  1. [参照整合性] チェック ボックスをオンにします。

  2. [フィールドの連鎖更新] チェック ボックスと [レコードの連鎖削除] チェック ボックスの一方または両方をオンにします。

  3. 必要に応じてリレーションシップに変更を加え、[OK] をクリックします。

注: 主キーがオートナンバー型フィールドである場合、オートナンバー型フィールドでは値の変更ができないので、[フィールドの連鎖更新] チェック ボックスをオンにしても効果はありません。

ページの先頭へ

注: 機械翻訳についての免責事項: この記事の翻訳はコンピューター システムによって行われており、人間の手は加えられていません。マイクロソフトでは、英語を話さないユーザーがマイクロソフトの製品、サービス、テクノロジに関するコンテンツを理解するのに役立てるため、こうした機械翻訳を提供しています。記事は機械翻訳されているため、用語、構文、文法などに誤りがある場合があります。

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×