演習
リレーショナル データベースを使用すると、テーブル間でデータを組み合わせることができます。 そのためには、最初にテーブル間のリレーションシップを確立する必要があります。 次に、Access 使用して、クエリ、フォーム、レポート内のデータを組み合わせます。
データベースに対して定義された既存のリレーションシップをすべて表示するには、Access テンプレートを開いて、[データベース ツール] タブに移動し、[リレーションシップ] を選びます。
注: 空のデータベースまたはテーブルのリレーションシップが定義されていないデータベースを開いた場合、Access は、テーブルまたはクエリを追加するように要求します。 リレーションシップを追加するには、2 つ以上のテーブルが必要です。 理想的には、最初にすべてのテーブルを作成します。 詳細については、「ルックアップ ウィザードを使ってリレーションシップを作成する」および「リレーションシップ ウィンドウを使ってリレーションシップを作成する」を参照してください。
リレーションシップ ビューについて
リレーションシップ ビュー内の線は、テーブル間のつながりを示します。 次の図で、左側のテーブルは親テーブルです。 右側のテーブルは、子テーブルです。 これらのテーブルの間にある線は、データを一致させるために使用されるフィールド (この場合は、注文 ID と製品 ID) をつなぎます。
テーブル間の関係を示す線と記号は、次のとおりです。
-
太い接続線は、データの参照整合性が適用されていることを意味します。 これは適切です。 データの同期が保たれます。
-
この図で、数字 1 は、そのテーブルには一致するレコードが 1 つしか存在できないことを示します。 ここに示す受注テーブルでは、各注文と一致するレコードは 1 つのみです。
-
無限大 (∞) 記号は、複数のレコードに同じ ID を含められることを示します。 ここに示す受注の詳細テーブルでは、同じ注文に複数の製品を含めることができるので、注文 (注文 ID で示される) が複数回表示される可能性があります。
テーブル間のリレーションシップの種類
テーブル間のリレーションシップには、次の 3 種類があります。
-
一対一。 各テーブル内の各項目が 1 回のみ表示される場合。 たとえば、各従業員が使用できる社用車は 1 台のみです。 詳細については、「Create one-to-one relationships (一対一リレーションシップを作成する)」を参照してください。
-
一対多。 一方のテーブル内の 1 つの項目が他方のテーブル内の複数の項目とリレーションシップを持つことができる場合。 たとえば、1 つの発注書で複数の製品を発注する場合があります。
-
多対多。 一方のテーブル内の 1 つ以上の項目が他方のテーブル内の 1 つ以上の項目とリレーションシップを持つことができる場合。 たとえば、1 つの注文で複数の製品を注文したり、1 つの製品が多数の注文に表示されたりする場合があります。 詳細については、「Create many-to-many relationships (多対多リレーションシップの作成)」を参照してください。
一対多リレーションシップ
適切に設計されたデータベースのテーブル間で最も一般的なリレーションシップの 1 つは、一対多リレーションシップです。
テーブル間のリレーションシップは、通常、一方のテーブルの主キーに依存します。 主キーは、各レコードの一意の識別子 (多くの場合、数値) であることを思い出してください。 2 つの異なるテーブル内の情報が関係していることを示すには、通常、一方のテーブルの主キーを使用してリレーションシップを作成します。
たとえば、次に示すリレーションシップで、連絡先テーブルの各連絡先には ID があり、それが主キーになります (横にある鍵の記号で示されます)。 この ID は、資産テーブルの所有者フィールドにも表示されます。 資産に関連付けられた連絡先にメールを送信するには、電子メール アドレス フィールドから値を取得します。 そのためには、資産テーブルの所有者フィールドで値を検索し、連絡先テーブルでその ID を検索します。 接続線の一方の端にある数字 1 と他方の端にある無限大 (∞) 記号は、これが一対多リレーションシップであり、1 つの連絡先を多数の資産と関連付けられることを示しています。
リレーションシップを編集する
既存のデータベースを変更する場合、またはデータベースをテンプレートから作成した場合、既存のリレーションシップをニーズに合わせて編集できます。
注: 操作するテーブルが使用中の場合は、最初にそのテーブルとそのテーブルを使用する開かれたオブジェクトをすべて閉じます。
-
[データベース ツール]、[リレーションシップ] の順に選択します。
-
関連する 2 つのテーブルをつなぐ線を選びます。
ヒント: 目的のリレーションシップが表示されない場合は、[デザイン] タブの [リレーションシップ] グループで、[すべてのリレーションシップ] を選択します。
-
[デザイン] タブで [リレーションシップの編集] を選択します。
左側の [テーブル/クエリ] は親テーブルです (この例では、"顧客")。
[リレーション テーブル/クエリ] は子テーブルです (この例では、"注文")。
リレーションシップ ビューでテーブルがこの順序で表示されない場合でも、ダイアログ ボックス内の配置は、それらのテーブルをつなぐ線の方向とリレーションシップを示します。 たとえば、一対多リレーションシップの場合、左側のテーブルが一 (親テーブル) で、右側のテーブルが多 (子テーブル) であることを示すので、この配置は重要です。
-
テーブルを接続するフィールドを変更するには、表示されている各テーブルの下で別のフィールドを選びます。 この例では、顧客テーブルの ID フィールドを受注テーブルの顧客 ID フィールドに接続します。
-
Access がテーブル間でデータを同期する方法を変更します。
参照適合性
無効なデータを防止し、テーブル リレーションシップ間で参照の同期を保つには、これを選びます。
たとえば、従業員テーブルと従業員手当テーブルの間に一対一リレーションシップがあるとします。 従業員が退職し、その従業員を従業員テーブルから削除すると、従業員手当テーブルの関連する従業員レコードも削除されます。
参照整合性を適用しても意味がない場合があります。 たとえば、運送会社と注文の間に一対多リレーションシップがあるとします。 運送会社を削除した後に、その運送会社を注文テーブル内の注文にマップすると、それらの注文は孤立します。 つまり、注文に運送会社 ID が含まれていても、その ID で参照されるレコードは既に存在しないので、その ID は有効ではなくなっています。
フィールドの連鎖更新
関連するフィールド内のデータが関連するすべてのテーブルで更新されるようにするには、これを選びます。
たとえば、運送会社の ID のみを変更するとしましょう。 このオプションを設定すると、運送会社テーブル内だけでなく、これに接続され、さらにその運送会社 ID を含む他のすべてのテーブル (例えば、注文テーブルなど) の運送会社 ID が更新されます。
レコードの連鎖削除
このオプションを選択するかどうかは、レコードが他のテーブルから削除されても、一部のテーブルではそのレコードを保持する必要があるかどうかによって決まります。
たとえば、ある運送会社を削除するとしましょう。 このオプションを選択すると、Access は、その運送会社から出荷されるすべての注文 (注文テーブル内) など、その運送会社 ID を参照するすべてのテーブルのすべてのレコードを削除します。 注文履歴を削除してもよいことがわかっている場合のみ、このオプションを選びます。
-
テーブル間のリレーションシップを内部結合から外部結合に変更するには、[結合の種類] ボタンを選びます。 詳細については、「Create queries with outer joins (外部結合を使ってクエリを作成する)」を参照してください。
テーブル リレーションシップを削除する
注: 操作するテーブルが使用中の場合は、最初にそのテーブルとそのテーブルを使用する開かれたオブジェクトをすべて閉じます。
テーブル リレーションシップを削除するには、次の手順を実行します。
-
[データベース ツール]、[リレーションシップ] の順に選択します。
-
関連する 2 つのテーブルをつなぐ線を選びます。
ヒント: 目的のリレーションシップが表示されない場合は、[デザイン] タブの [リレーションシップ] グループで、[すべてのリレーションシップ] を選択します。
-
Del キーを選択します。 リレーションシップを削除することを確認するメッセージが表示されたら、[はい] を選びます。
注: リレーションシップを削除すると、そのリレーションシップに対して参照整合性が選択されている場合、そのサポートも削除されます。 その結果、Access は変更を防止しなくなり、一対多リレーションシップでレコードの孤立が発生します。