Microsoft Office Online
Office Online にサインイン (サインインとは?) | サインイン

 
 
Microsoft Office Access
検索
検索
 
以前のバージョン: (c) Microsoft
以前のバージョンの製品情報
更新プログラムの確認: (c) Microsoft
Office のダウンロード
 
 
 
注意: このページはサポートされていない Web ブラウザで表示されています。この Web サイトは、Microsoft Internet Explorer 6.0 以降、Firefox 1.5、または Netscape Navigator 8.0 以降を使用すると、正しく表示されます。 サポートされているブラウザの詳細情報

印刷用ページの表示印刷用ページの表示 ブックマークを設定して共有共有
テーブルのリレーションシップの概要
 

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

詳細については、「データベース設計の基本」を参照してください。

この記事の内容


はじめに

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

5 つのテーブルからの関連する情報が表示されている受注フォーム

コールアウト 1 このフォームは、[得意先] テーブルと、
コールアウト 2 [受注] テーブル、
コールアウト 3 [商品] テーブル、
コールアウト 4 [受注明細] テーブルの情報を表示しています。

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

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

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

コールアウト 1 社員コードは、一方のテーブルに主キーとして、
コールアウト 2 もう一方のテーブルに外部キーとして表示されます。

ページの先頭へ ページの先頭へ

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

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

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

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

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

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

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

ページの先頭へ ページの先頭へ

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

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

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

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

  • テーブルのリレーションシップは参照整合性を適用するための基礎であり、データベースに孤立化したレコードが発生するのを防ぎます。孤立化したレコードとは、存在しない別のレコードを参照しているレコードのことで、たとえば、存在しない得意先レコードを参照している受注レコードがこれに該当します。
  • データベースをデザインするときは、情報を複数のテーブルに分割し、各テーブルに主キーを設定します。次に、これらの主キーを参照する外部キーを関連テーブルに追加します。主キーと外部キーの組み合わせにより、テーブルのリレーションシップおよび、複数テーブルのクエリの基礎が形成されます。したがって、これらの外部キーと主キーの参照の同期が保たれている必要があります。参照整合性は、参照の同期が保たれ、テーブルのリレーションシップに依存していることを保証するのに役立ちます。

ページの先頭へ ページの先頭へ

参照整合性について

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

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

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

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

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

ページの先頭へ ページの先頭へ

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

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

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

  1. ボタン イメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。
  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。
  3. [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

    Access のリボンのイメージ

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

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

    [隠しオブジェクトの表示] オプションの詳細については、「ナビゲーション ウィンドウの概要」を参照してください。

リレーションシップ ウィンドウ

コールアウト 1 主キー
コールアウト 2 このラインはリレーションシップを表します。
コールアウト 3 外部キー

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

リレーションシップ ウィンドウがアクティブなときは、Microsoft Office Fluent ユーザー インターフェイスの一部であるリボンの次のコマンドから選択できます。

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

  • [リレーションシップ]  [リレーションシップ] ダイアログ ボックスが開きます。リレーションシップ ラインを選択したときは、[リレーションシップ] をクリックしてテーブルのリレーションシップを変更できます。リレーションシップ ラインをダブルクリックすることもできます。
  • [レイアウトのクリア]  リレーションシップ ウィンドウの表示からすべてのテーブルとリレーションシップが削除されます。このコマンドは単にテーブルとリレーションシップを非表示にするだけであり、削除するわけではありません。
  • [リレーションシップ レポート]  データベースのテーブルとリレーションシップを表示するレポートが作成されます。このレポートには、リレーションシップ ウィンドウで非表示になっていないテーブルとリレーションシップだけが表示されます。

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

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

    [隠しオブジェクトの表示] オプションの詳細については、「ナビゲーション ウィンドウの概要」を参照してください。

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

ページの先頭へ ページの先頭へ

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

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

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

  1. ボタン イメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。
  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。
  3. [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

    Access のリボンのイメージ

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

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

  5. 1 つ以上のテーブルまたはクエリを選択し、[追加] をクリックします。テーブルとクエリをリレーションシップ ウィンドウに追加し終わったら、[閉じる] をクリックします。
  6. 1 つのテーブルのフィールド (通常は主キー) を、別のテーブルにおける共通のフィールド (外部キー) にドラッグします。複数のフィールドをドラッグするには、Ctrl キーを押しながら各フィールドをクリックし、ドラッグします。

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

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

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

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

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

一方のテーブルから他方のテーブルに対応するフィールドをドラッグ

  メモ  

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

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

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

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

  1. ボタン イメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。
  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。
  3. ナビゲーション ウィンドウで、フィールドを追加してリレーションシップを作成するテーブルをマウスの右ボタンでクリックし、ショートカット メニューの [データシート ビュー] をクリックします。

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

  • [データシート] タブの [フィールドと列] で [既存のフィールドの追加] をクリックします。

    Access のリボンのイメージ

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

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

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

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

  1. [データシート] タブの [フィールドと列] で [既存のフィールドの追加] をクリックします。

    Access のリボンのイメージ

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

  2. [他のテーブルで利用可能なフィールド] で、テーブル名の横にあるプラス記号 (+) をクリックして、テーブル内にあるフィールドの一覧を表示します。
  3. 目的のフィールドを [フィールド リスト] ウィンドウから、データシート ビューで開いているテーブルにドラッグします。
  4. 挿入位置が表示されたら、フィールドをそこにドロップします。

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

  5. 表示される手順に従って、ルックアップ ウィザードを完了します。
  6. 目的のフィールドがデータシート ビューのテーブルに表示されます。

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

ページの先頭へ ページの先頭へ

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

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

  1. ボタン イメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。
  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。
  3. [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

    Access のリボンのイメージ

    リレーションシップ ウィンドウが表示されます。

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

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

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

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

    または

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

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

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

ページの先頭へ ページの先頭へ

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

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

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

  1. ボタン イメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。
  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。
  3. [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

    Access のリボンのイメージ

    リレーションシップ ウィンドウが表示されます。

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

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

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

    [隠しオブジェクトの表示] オプションの詳細については、「ナビゲーション ウィンドウの概要」を参照してください。

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

    または

    [デザイン] タブの [ツール] で [リレーションシップの編集] をクリックします。

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

    [リレーションシップ] ダイアログ ボックス

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

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

結合の種類を設定する

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

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

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

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

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

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

結合の種類を設定する

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

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

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

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

選択肢 リレーショナル結合 左テーブル 右テーブル
1. 両方のテーブルの結合フィールドが同じ行だけを含める。 内部結合 一致する行 一致する行
2. '得意先' の全レコードと '受注' の同じ結合フィールドのレコードだけを含める。 左外部結合 すべての行 一致する行
3. '受注' の全レコードと '得意先' の同じ結合フィールドのレコードだけを含める。 右外部結合 一致する行 すべての行

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

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

  1. ボタン イメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。
  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。
  3. [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

    Access のリボンのイメージ

    リレーションシップ ウィンドウが表示されます。

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

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

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

    [隠しオブジェクトの表示] オプションの詳細については、「ナビゲーション ウィンドウの概要」を参照してください。

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

    または

    [デザイン] タブの [ツール] で [リレーションシップの編集] をクリックします。

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

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

    [結合プロパティ] ダイアログ ボックス

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

ページの先頭へ ページの先頭へ

参照整合性を適用する

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

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

  1. ボタン イメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。
  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。
  3. [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

    Access のリボンのイメージ

    リレーションシップ ウィンドウが表示されます。

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

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

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

    [隠しオブジェクトの表示] オプションの詳細については、「ナビゲーション ウィンドウの概要」を参照してください。

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

    または

    [デザイン] タブの [ツール] で [リレーションシップの編集] をクリックします。

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

  7. [参照整合性] チェック ボックスをオンにします。
  8. 必要に応じてリレーションシップに変更を加え、[OK] をクリックします。

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

  • 主テーブルの主キー フィールドに存在しない値を、関連テーブルの外部キー フィールドに入力することはできません。このような操作は、孤立化したレコードが作成される原因となります。
  • 一致するレコードが関連テーブルに存在している場合、そのレコードを主テーブルから削除することはできません。たとえば、[受注] テーブルに担当社員として入力されている社員のレコードを [社員] テーブルで削除することはできません。ただし、[レコードの連鎖削除] チェック ボックスをオンにすると、主レコードとすべての関連レコードを 1 回の操作で削除できるようになります。
  • 主テーブルの主キーの値を変更すると孤立化したレコードが作成される結果になる場合、その値を変更することはできません。たとえば、[受注明細] テーブルで品目が関連付けられている受注について、[受注] テーブルの受注番号を変更することはできません。ただし、[フィールドの連鎖更新] チェック ボックスをオンにすると、主レコードとすべての関連レコードを 1 回の操作で更新できるようになります。

  メモ  

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

  • 主テーブルの共通のフィールドが主キーであるか、または固有インデックスが設定されていること。
  • 共通のフィールドが同じデータ型であること。例外として、オートナンバー型フィールドは、"FieldSize/フィールドサイズ" プロパティが長整数型 (Long) に設定されている数値型フィールドに関連付けることができます。
  • 両方のテーブルが同じ Access データベースに存在していること。参照整合性はリンク テーブルには適用できません。ただし、ソース テーブルが Access 形式の場合は、それらのテーブルが格納されているデータベースを開き、そのデータベース内で参照整合性を有効にできます。

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

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

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

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

  1. ボタン イメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。
  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。
  3. [データベース ツール] タブの [表示/非表示] で [リレーションシップ] をクリックします。

    Access のリボンのイメージ

    リレーションシップ ウィンドウが表示されます。

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

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

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

    [隠しオブジェクトの表示] オプションの詳細については、「ナビゲーション ウィンドウの概要」を参照してください。

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

    または

    [デザイン] タブの [ツール] で [リレーションシップの編集] をクリックします。

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

  7. [参照整合性] チェック ボックスをオンにします。
  8. [フィールドの連鎖更新] チェック ボックスと [レコードの連鎖削除] チェック ボックスの一方または両方をオンにします。
  9. 必要に応じてリレーションシップに変更を加え、[OK] をクリックします。

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

ページの先頭へ ページの先頭へ

広告