Access のリレーションシップにより、2 つの異なるテーブルのデータを組み合わせることができます。 各リレーションシップは、対応するデータを含む 2 つのテーブルのフィールドで構成されます。 たとえば、[商品] テーブルと [受注明細] テーブルに [商品 ID] フィールドがあるとします。 [受注明細] テーブルの各レコードには、商品 ID を含む [商品] テーブルのレコードと同じ商品 ID があります。
クエリで関連するテーブルを使用すると、リレーションシップによって、各テーブルのどのレコードを組み合わせて結果セットに表示するかが決まります。 リレーションシップにより、削除したデータが同期されるようになるので、データが失われるのを防ぐこともできます。これは参照整合性と呼ばれます。
リレーションシップを使用する前に、背景の概念を理解しておいてください。 詳細については、「テーブルのリレーションシップの概要」と「テーブルのリレーションシップの使用を開始する」を参照してください。
この記事の内容
概要
Access データベースでは、次のいずれかの方法を使用してテーブル リレーションシップを作成します。
-
リレーションシップ ウィンドウに関連付けるテーブルを追加し、一方のテーブルから他方のテーブルにフィールドをドラッグして関連付けます。
-
フィールドを [フィールド リスト] ウィンドウからテーブルのデータシートにドラッグします。
テーブル間にリレーションシップを作成する場合、共通のフィールドが同じ名前である必要はありません。ただし、多くの場合、同じ名前になっています。 共通のフィールドには、同じデータ型を使用する必要があります。 ただし、主キー フィールドがオートナンバー型フィールドの場合は、外部キー フィールドを数値型のフィールドにすることもできますが、両方のフィールドの "FieldSize/フィールドサイズ" プロパティが同じである必要があります。 たとえば、両方のフィールドの "FieldSize/フィールドサイズ" プロパティが [長整数型] の場合、オートナンバー型フィールドと数値型のフィールドを一致させることができます。 両方の共通のフィールドが数値型のフィールドの場合は、"FieldSize/フィールドサイズ" プロパティの設定を同じにする必要があります。
リレーションシップ ウィンドウを使用してテーブル リレーションシップを作成する
-
[データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。
-
[ リレーションシップ デザイン] タブの [ リレーションシップ ] グループで、[ テーブルの追加] をクリックします。
-
1 つ以上のテーブルまたはクエリを選択し、[追加] をクリックします。 テーブルとクエリを [リレーションシップ] ドキュメント タブに追加したら、[閉じる] をクリックします。
-
1 つのテーブルのフィールド (通常は主キー) を、別のテーブルにおける共通のフィールド (外部キー) にドラッグします。 複数のフィールドをドラッグするには、Ctrl キーを押しながら各フィールドをクリックし、ドラッグします。
[リレーションシップの編集] ダイアログ ボックスが表示されます。 -
表示されたフィールド名が、リレーションシップを作成する共通のフィールドであることを確認します。 フィールド名が正しくない場合は、問題のフィールド名をクリックし、一覧から適切なフィールドを選びます。参照整合性を適用する」を参照してください。
このリレーションシップに参照整合性を適用するには、[参照整合性の適用] チェック ボックスをオンにします。 参照整合性の詳細については、「 -
[作成] をクリックします。
2 つのテーブルの間には、リレーションシップ ラインが描画されます。 [参照整合性] チェック ボックスをオンにすると、ラインの両端が太く表示されます。 また、同様に [参照整合性] チェック ボックスをオンにした場合に限り、次の図に示すように、リレーションシップの一方の太い部分の上に "1" が表示され、ラインの反対側の太い部分の上に無限大記号 (∞) が表示されます。
注:
-
一対一リレーションシップを作成するには 共通のフィールドの両方 (通常は主キー フィールドと外部キー フィールド) に固有インデックスが設定されている必要があります。 つまり、これらのフィールドの "Indexed/インデックス" プロパティが [はい(重複なし)] に設定されている必要があります。 両方のフィールドに一意のインデックスが設定されていれば、Access で一対一リレーションシップが作成されます。
-
一対多リレーションシップを作成するには リレーションシップの一の側のフィールド (通常は主キー) に固有インデックスが設定されている必要があります。 つまり、このフィールドの "Indexed/インデックス" プロパティが [はい(重複なし)] に設定されている必要があります。 多の側のフィールドには、一意のインデックスを設定することはできません。 インデックスを付けることはできますが、重複を許可する必要があります。 つまり、このフィールドの "Indexed/インデックス" プロパティは、[いいえ] または [はい (重複あり)] のいずれかに設定されている必要があります。 一方のフィールドに固有インデックスが設定されており、もう一方のフィールドに固有インデックスが設定されていない場合、Access で一対多リレーションシップが作成されます。
-
[フィールド リスト] ウィンドウを使用してテーブル リレーションシップを作成する
[フィールド リスト] ウィンドウからフィールドをドラッグすることにより、データシート ビューで表示されている既存のテーブルにフィールドを追加できます。 [フィールド リスト] ウィンドウには、関連するテーブルに存在するフィールドと、データベース内の他のテーブルに存在するフィールドが表示されます。
"他" の (関連付けられていない) テーブルからフィールドをドラッグし、ルックアップ ウィザードを完了すると、[フィールド リスト] ウィンドウ内のテーブルとフィールドのドラッグ先のテーブルとの間に、新しい一対多リレーションシップが自動的に作成されます。 Access によって作成されたこのリレーションシップには、既定では参照整合性が適用されません。 参照整合性を適用するには、リレーションシップを編集してください。 詳しくは、「リレーションシップを編集する」を参照してください。
テーブルをデータシート ビューで開く
-
ナビゲーション ウィンドウでテーブルをダブルクリックします。
[フィールド リスト] ウィンドウを開く
-
Alt キーを押しながら F8 キーを押します。 [フィールド リスト] ウィンドウが表示されます。
[フィールド リスト] ウィンドウには、データベース内の他のテーブルがすべてカテゴリ別にグループ分けされて表示されます。 データシート ビューでテーブルを操作する場合、各フィールドは [フィールド リスト] ウィンドウの [リレーション テーブルで利用可能なフィールド] と [他のテーブルで利用可能なフィールド] の 2 つのカテゴリのいずれかに表示されます。 1 つ目のカテゴリには、現在作業中のテーブルとリレーションシップを持つテーブルがすべて表示されます。 2 つ目のカテゴリには、現在作業中のテーブルとのリレーションシップがないテーブルがすべて表示されます。
[フィールド リスト] ウィンドウで、テーブル名の横にあるプラス記号 (+) をクリックすると、テーブルで利用可能なフィールドがすべて一覧表示されます。 テーブルにフィールドを追加するには、目的のフィールドを [フィールド リスト] ウィンドウから、データシート ビューのテーブルにドラッグします。
[フィールド リスト] ウィンドウからフィールドを追加してリレーションシップを作成する
-
データシート ビューでテーブルを開いた状態で、Alt キーを押しながら F8 キーを押します。 [フィールド リスト] ウィンドウが表示されます。
-
[他のテーブルで利用可能なフィールド] で、テーブル名の横にあるプラス記号 (+) をクリックして、テーブル内にあるフィールドの一覧を表示します。
-
目的のフィールドを [フィールド リスト] ウィンドウから、データシート ビューで開いているテーブルにドラッグします。
-
挿入位置が表示されたら、フィールドをその位置にドロップします。
ルックアップ ウィザードが起動します。
-
表示される手順に従って、ルックアップ ウィザードを完了します。
目的のフィールドがデータシート ビューのテーブルに表示されます。
"他" の (関連付けられていない) テーブルからフィールドをドラッグし、ルックアップ ウィザードを完了すると、[フィールド リスト] 内のテーブルとフィールドのドラッグ先のテーブルとの間に、新しい一対多リレーションシップが自動的に作成されます。 Access によって作成されたこのリレーションシップには、既定では参照整合性が適用されません。 参照整合性を適用するには、リレーションシップを編集してください。 詳しくは、「リレーションシップを編集する」を参照してください。
リレーションシップを編集する
リレーションシップを変更するには、リレーションシップ ウィンドウでリレーションシップを選択して編集します。
-
マウス ポインターを慎重に移動してリレーションシップ ラインをポイントし、そのラインをクリックして選択します。
選択されたリレーションシップ ラインは太い線で表示されます。
-
リレーションシップ ラインが選択されている状態で、そのラインをダブルクリックします。
または
[ リレーションシップのデザイン ] タブの [ ツール ] グループで、[ リレーションシップの編集] をクリックします。
[リレーションシップ] ダイアログ ボックスが表示されます。
[リレーションシップ] ダイアログ ボックスを開く
-
[データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。
-
[ リレーションシップ デザイン] タブの [ リレーションシップ ] グループで、[ すべてのリレーションシップ] をクリックします。
リレーションシップが設定されているすべてのテーブルが、リレーションシップ ラインと共に表示されます。 ただし、隠しテーブル (テーブルの [プロパティ] ダイアログ ボックスで [隠しオブジェクト] チェック ボックスがオンになっているテーブル) とそれらのリレーションシップは、[ナビゲーション オプション] ダイアログ ボックスで [隠しオブジェクトの表示] チェック ボックスをオンにしない限り表示されません。
-
変更するリレーションシップのリレーションシップ ラインをクリックします。 選択されたリレーションシップ ラインは太い線で表示されます。
-
リレーションシップ ラインをダブルクリックします。
または
[ リレーションシップのデザイン ] タブの [ ツール ] グループで、[ リレーションシップの編集] をクリックします。
[リレーションシップ] ダイアログ ボックスが表示されます。
-
必要な変更を行って、[OK] をクリックします。
[リレーションシップ] ダイアログ ボックスでは、テーブルのリレーションシップを変更することができます。 具体的には、リレーションシップの両側のテーブルやクエリ、または両側のフィールドを変更できます。 また、結合の種類を設定したり、参照整合性を適用して連鎖オプションを選択したりもできます。 結合の種類とその設定方法の詳細については、「結合の種類を設定する」を参照してください。 参照整合性を適用して連鎖オプションを選択する方法の詳細については、「参照整合性を適用する」を参照してください。
結合の種類を設定する
テーブルのリレーションシップを定義すると、リレーションシップの情報がクエリ デザインに反映されます。 たとえば、2 つのテーブル間にリレーションシップを定義した後、それらの 2 つのテーブルを使用するクエリを作成すると、リレーションシップで指定されているフィールドを基に、既定の一致フィールドが自動的に選択されます。 このようなクエリの初期の既定値は上書きできますが、リレーションシップによって設定された値が適切であったことに後で気付くこともよくあります。 複数のテーブルのデータを一致させて同時に取り出す操作は、ごく単純なデータベースを除くほとんどのデータベースで頻繁に実行されるため、リレーションシップを作成することで既定値が設定されれば、時間を節約できて便利です。
複数テーブルのクエリでは、共通のフィールドの値を一致させることによって、1 つ以上のテーブルの情報を組み合わせます。 一致や組み合わせを行う操作は、結合と呼ばれます。 たとえば、得意先の受注情報を表示する必要があるとします。 そこで、[得意先] テーブルと [受注] テーブルを [得意先 ID] フィールドで結合するクエリを作成します。 クエリ結果には、該当する一致が見つかった行に対する得意先情報と受注情報が含まれます。
リレーションシップごとに指定できる値の 1 つに、結合の種類があります。 結合の種類は、どのレコードをクエリ結果に含めるかを Access に指示するものです。 たとえば、[得意先] テーブルと [受注] テーブルを共通の [得意先 ID] フィールドで結合するクエリについて、もう一度考えます。 既定の結合の種類 (内部結合) を使用した場合は、共通のフィールド (結合フィールド) が等しい [得意先] の行と [受注] の行だけがクエリから返されます。
しかし、まだ 1 度も注文していない得意先も含め、すべての [得意先] の行を取得したい場合もあります。 これを実現するには、結合の種類を内部結合から左外部結合に変更してください。 左外部結合では、リレーションシップの左側のテーブルからはすべての行が返され、右側のテーブルからは一致する行だけが返されます。 右外部結合では、右側の行のすべてと、左側の一致する行だけが返されます。
注: この場合、"左" および "右" は、リレーションシップ ウィンドウでのテーブルの位置ではなく、[リレーションシップ] ダイアログ ボックスでのテーブルの位置を示します。
リレーションシップを設定するときは、そのリレーションシップに基づいてテーブルを結合するクエリの結果を考慮して、適切な結合の種類を設定する必要があります。
結合の種類を設定する
-
[リレーションシップ] ダイアログ ボックスで、[結合の種類] をクリックします。
[結合プロパティ] ダイアログ ボックスが表示されます。
-
選択した項目を選択し、[ OK] をクリックします。
次の表は、[得意先] テーブルと [受注] テーブルを使用した場合に [結合プロパティ] ダイアログ ボックスに表示される 3 つのオプションと、それぞれのオプションで使用される結合の種類、および各テーブルに対してすべての行または一致する行のどちらが返されるかを示しています。
選択肢 |
リレーショナル結合 |
左テーブル |
右テーブル |
---|---|---|---|
1. 両方のテーブルの結合フィールドが同じ行だけを含める。 |
内部結合 |
一致する行 |
一致する行 |
2. [得意先] の全レコードと [受注] の同じ結合フィールドのレコードだけを含める。 |
左外部結合 |
すべての行 |
一致する行 |
3. [受注] の全レコードと [得意先] の同じ結合フィールドのレコードだけを含める。 |
右外部結合 |
一致する行 |
すべての行 |
オプション 2 またはオプション 3 を選択すると、リレーションシップ ラインに矢印が表示されます。 この矢印の向きは、リレーションシップの一致する行だけを表示する側を指します。
[結合プロパティ] ダイアログ ボックスで変更する
-
[データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。
-
[ リレーションシップ デザイン] タブの [ リレーションシップ ] グループで、[ すべてのリレーションシップ] をクリックします。
リレーションシップが設定されているすべてのテーブルが、リレーションシップ ラインと共に表示されます。 ただし、隠しテーブル (テーブルの [プロパティ] ダイアログ ボックスで [隠しオブジェクト] チェック ボックスがオンになっているテーブル) とそれらのリレーションシップは、[ナビゲーション オプション] ダイアログ ボックスで [隠しオブジェクトの表示] チェック ボックスをオンにしない限り表示されません。 -
変更するリレーションシップのリレーションシップ ラインをクリックします。 選択されたリレーションシップ ラインは太い線で表示されます。
-
リレーションシップ ラインをダブルクリックします。 [リレーションシップ] ダイアログ ボックスが表示されます。
-
[結合の種類]をクリックします。
-
[ 結合のプロパティ ] ダイアログ ボックスでオプションを選択し、[OK] をクリック します。
-
必要に応じてリレーションシップに変更を加え、[OK] をクリックします。
参照整合性を適用する
参照整合性の目的は、存在しない他のレコードを参照する孤立したレコードを防ぐことです。 参照整合性を適用するには、テーブルのリレーションシップで参照整合性を有効にします。 いったん有効にすると、テーブルのリレーションシップに設定した参照整合性に違反する操作はすべて拒否されるようになります。 つまり、参照先を変更する更新操作と、参照先を削除する操作の両方が拒否されます。 参照の更新や削除を反映して、関連するすべての行が適切に変更されるようにするには、「連鎖オプションを設定する」を参照してください。
参照整合性を有効または無効にする
-
[データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。
-
[ リレーションシップ デザイン] タブの [ リレーションシップ ] グループで、[ すべてのリレーションシップ] をクリックします。
リレーションシップが設定されているすべてのテーブルが、リレーションシップ ラインと共に表示されます。 ただし、隠しテーブル (テーブルの [プロパティ] ダイアログ ボックスで [隠しオブジェクト] チェック ボックスがオンになっているテーブル) とそれらのリレーションシップは、[ナビゲーション オプション] ダイアログ ボックスで [隠しオブジェクトの表示] チェック ボックスをオンにしない限り表示されません。 -
変更するリレーションシップのリレーションシップ ラインをクリックします。 選択されたリレーションシップ ラインは太い線で表示されます。
-
リレーションシップ ラインをダブルクリックします。 [リレーションシップ] ダイアログ ボックスが表示されます。
-
[参照整合性] チェック ボックスをオンまたはオフにします。
-
必要に応じてリレーションシップに変更を加え、[OK] をクリックします。
参照整合性を有効にすると、次の規則が適用されます。
-
主テーブルの主キー フィールドに存在しない値を、関連テーブルの外部キー フィールドに入力することはできません。 このような操作は、孤立化したレコードが作成される原因となります。
-
一致するレコードが関連テーブルに存在している場合、そのレコードを主テーブルから削除することはできません。 たとえば、[受注] テーブルに担当社員として入力されている社員のレコードを [社員] テーブルで削除することはできません。 ただし、[レコードの連鎖削除] チェック ボックスをオンにすると、主レコードとすべての関連レコードを 1 回の操作で削除できるようになります。
-
主テーブルの主キーの値を変更すると孤立したレコードが作成される結果になる場合、その値を変更することはできません。 たとえば、[受注明細] テーブルで品目が関連付けられている受注について、[受注] テーブルの受注番号を変更することはできません。 ただし、[フィールドの連鎖更新] チェック ボックスをオンにすると、主レコードとすべての関連レコードを 1 回の操作で更新できるようになります。
注: 参照整合性を有効にできない場合、参照整合性を適用するためには、次の条件を満たす必要があることに注意してください。
-
主テーブルの共通のフィールドが主キーであるか、または固有インデックスが設定されていること。
-
共通のフィールドが同じデータ型であること。 例外として、オートナンバー型フィールドは、"FieldSize/フィールドサイズ" プロパティが [長整数型] に設定されている数値型フィールドに関連付けることができます。
-
両方のテーブルが同じ Access データベースに存在していること。 参照整合性はリンク テーブルには適用できません。 ただし、ソース テーブルが Access 形式の場合は、それらのテーブルが格納されているデータベースを開き、そのデータベース内で参照整合性を有効にできます。
-
連鎖オプションを設定する
状況によっては、リレーションシップの "一" 側の値をどうしても変更する必要が生じることがあります。 このような場合は、1 回の操作で、関連するすべての行が自動的に更新されるようにしてください。 この方法であれば更新が完全に完了するので、データベースに更新された行と更新されていない行が混在するような矛盾した状態になることはありません。 Access では、この問題を回避するために、フィールドの連鎖更新オプションがサポートされています。 参照整合性を適用し、フィールドの連鎖更新オプションを有効にすると、主キーを更新した場合に、その主キーを参照しているすべてのフィールドが自動的に更新されます。
また、1 つの行と関連するすべてのレコードを削除しなければならない場合があります (たとえば、特定の運送会社レコードとその運送会社に関連するすべてのレコードを削除する必要がある場合)。 このため、Access では、[レコードの連鎖削除] オプションがサポートされています。 参照整合性を適用し、[レコードの連鎖削除] チェック ボックスをオンにすると、主キーを含むレコードを削除した場合に、その主キーを参照しているすべてのレコードが自動的に削除されます。
連鎖更新や連鎖削除を有効または無効にする
-
[データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。
-
[ リレーションシップ デザイン] タブの [ リレーションシップ ] グループで、[ すべてのリレーションシップ] をクリックします。
リレーションシップが設定されているすべてのテーブルが、リレーションシップ ラインと共に表示されます。 ただし、隠しテーブル (テーブルの [プロパティ] ダイアログ ボックスで [隠しオブジェクト] チェック ボックスがオンになっているテーブル) とそれらのリレーションシップは、[ナビゲーション オプション] ダイアログ ボックスで [隠しオブジェクトの表示] チェック ボックスをオンにしない限り表示されません。 -
変更するリレーションシップのリレーションシップ ラインをクリックします。 選択されたリレーションシップ ラインは太い線で表示されます。
-
リレーションシップ ラインをダブルクリックします。
[リレーションシップの編集] ダイアログ ボックスが表示されます。 -
[参照整合性] チェック ボックスをオンにします。
-
[フィールドの連鎖更新] チェック ボックスと [レコードの連鎖削除] チェック ボックスの一方または両方をオンにします。
-
必要に応じてリレーションシップに変更を加え、[OK] をクリックします。
注: 主キーがオートナンバー型フィールドである場合、オートナンバー型フィールドでは値の変更ができないので、[フィールドの連鎖更新] チェック ボックスをオンにしても効果はありません。
テーブル リレーションシップを削除する
重要: リレーションシップを削除すると、そのリレーションシップで参照整合性が有効になっている場合は、参照整合性のサポートも削除されます。 結果として、リレーションシップの "多" 側に孤立したレコードが作成されるのを自動的に防止することはできなくなります。
テーブルのリレーションシップを削除するには、リレーションシップ ウィンドウでリレーションシップ ラインを削除してください。 マウス ポインターを移動してリレーションシップ ラインをポイントし、そのラインをクリックします。 選択されたリレーションシップ ラインは太い線で表示されます。 リレーションシップ ラインが選択されている状態で、Del キーを押します。
-
[データベース ツール] タブの [リレーションシップ] グループで [リレーションシップ] をクリックします。
-
[ リレーションシップ デザイン] タブの [ リレーションシップ ] グループで、[ すべてのリレーションシップ] をクリックします。
リレーションシップが設定されているすべてのテーブルが、リレーションシップ ラインと共に表示されます。 ただし、隠しテーブル (テーブルの [プロパティ] ダイアログ ボックスで [隠しオブジェクト] チェック ボックスがオンになっているテーブル) とそれらのリレーションシップは、[ナビゲーション オプション] ダイアログ ボックスで [隠しオブジェクトの表示] チェック ボックスをオンにしない限り表示されません。 -
削除するリレーションシップのリレーションシップ ラインをクリックします。 選択されたリレーションシップ ラインは太い線で表示されます。
-
Del キーを押します。
-
"選択したリレーションシップをデータベースから削除しますか?" というメッセージが Access から表示されることがあります。 この確認メッセージが表示されたら、[はい] をクリックします。
注: テーブルのリレーションシップで参照されているテーブルのいずれかが、他のユーザーやプロセス、または開かれているデータベース オブジェクト (フォームなど) によって使用されている場合、そのリレーションシップを削除することはできません。 リレーションシップの削除を試みる前に、該当するテーブルを参照しているオブジェクトをすべて閉じる必要があります。