Accessリレーションシップの設定方法と参照整合性

概要

この記事の結論
Accessのリレーションシップは、[データベース ツール]の[リレーションシップ]から親子のキーを結んで設定します。参照整合性を有効にすると、存在しない親を子が参照するなどの不整合を防げます。

この記事でわかること

  • 親側の一意性と子側の型を確認する
  • リレーションシップを設定する
  • 連鎖更新と連鎖削除を慎重に選ぶ
  • 設定できないときは孤立データを調べる

この記事の主な内容

  1. リレーションシップは表同士の関係を定義する
  2. 親側の一意性と子側の型を確認する
  3. リレーションシップを設定する
  4. 連鎖更新と連鎖削除を慎重に選ぶ
  5. 設定できないときは孤立データを調べる
  6. 動作試験と運用場所を確認する
  7. よくある質問

想定読了時間:約8分


1 リレーションシップは表同士の関係を定義する

Accessのリレーションシップは、[データベース ツール]の[リレーションシップ]から親子のキーを結んで設定します。参照整合性を有効にすると、存在しない親を子が参照するなどの不整合を防げます。

結合クエリで結果を表示できることと、データの整合性が保護されていることは別です。
関係を設定しただけで、参照整合性が自動的に有効になるとは限りません。

関連設定と参照整合性について、関係、制約、JOINの関係を示す図。

2 親側の一意性と子側の型を確認する

M_顧客の顧客IDを主キーにし、T_受注の顧客IDで参照します。
通常のオートナンバーは、子側の数値型・長整数と組み合わせます。
子側の顧客IDは複数行に同じ値を保存できます。

親と子のキーについて、親、子、型の関係を示す図。

親のIDが重複している、型が合わない、既存の子に対応する親がない場合は、その原因を解消してから参照整合性を設定します。

設定例と確認点

項目親 M_顧客子 T_受注
顧客IDの型オートナンバー数値・長整数
重複不可通常は可
役割顧客を識別顧客を参照

3 リレーションシップを設定する

対象の2表を開いている場合は閉じてから設定します。
結合する列をドラッグすると編集ダイアログが開くため、親と子のテーブル名・フィールド名を確認します。

設定の手順について、追加、接続、確認、保存の関係を示す図。

操作手順

1. リレーションシップ画面へM_顧客とT_受注を追加します。

2. M_顧客の顧客IDをT_受注の顧客IDへドラッグします。

3. 対応するフィールドを確認します。

4. 参照整合性を選び、連鎖設定は用途に応じて判断します。

5. 作成して保存し、1対多の表示を確認します。

連鎖設定の違いについて、更新、削除の関係を示す図。

4 連鎖更新と連鎖削除を慎重に選ぶ

連鎖更新は親キーの変更を関連する子へ反映する設定です。
通常のオートナンバー主キーは手で変更する運用ではないため、一般の業務コードの変更とは切り分けて考えます。

連鎖削除を有効にすると、親の削除に伴って関連する子も削除されます。
顧客を消したら売上履歴も消えてよいか、業務上の保存要件から判断してください。
既定で有効にする設定ではありません。

孤立データの例について、子のID、親のID、対応の関係を示す図。

5 設定できないときは孤立データを調べる

子に顧客ID 999があり、親に999がなければ、その行が不整合の候補です。
親を追加するか、子のIDを正しく直すかは業務内容で決めます。
参照を通すためだけに架空の親を作るのは避けましょう。

Nullを許す外部キーは「親が未指定」という状態を表せます。
必須なら値要求などで制限します。0を未指定の代わりに入れると、親ID 0がなければ不整合になる点に注意してください。

Nullと0の違いについて、Null、0の関係を示す図。

既存Accessへの影響を判断できない場合

本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。


6 動作試験と運用場所を確認する

存在する親を参照する登録が成功し、存在しない親を参照する登録が拒否されるか試します。
親の削除についても、制限または連鎖削除が設計どおりかコピーで確認します。

リンクテーブルの場合、Access画面で関係を描くことと接続先DBで制約が有効になることは同じではありません。SQL Serverなどの参照制約は、実データを管理する側で確認してください。

運用前の試験について、正しい親、不明な親、親削除、接続先の関係を示す図。

7 よくある質問

参照整合性が有効か確認してください。
結合線だけでは保証されません。

親と同時に子も消してよい場合だけです。
履歴保持が必要なら別の運用を検討します。

Nullが許される設計なら可能です。
必須にする場合は値要求などを設定します。

まとめ

リンクテーブルの場合、Access画面で関係を描くことと接続先DBで制約が有効になることは同じではありません。SQL Serverなどの参照制約は、実データを管理する側で確認してください。

本記事の手順をコピーしたファイルで試しても解決しない場合や、既存データ・他の画面への影響を判断できない場合は、お気軽にご相談ください。対象ファイル、操作手順、期待する結果を整理すると、調査や改修の範囲を相談しやすくなります。


参考情報

Microsoft公式資料を参照しています。サンプルは説明用の架空データです。
Windows版Accessの実機検証は未実施のため、適用前に対象環境のコピーで結果を確認してください。

Microsoft:リレーションシップ
https://support.microsoft.com/en-us/access/guide-to-table-relationships

Microsoft:関連の編集
https://support.microsoft.com/en-us/access/create-edit-or-delete-a-relationship

TOP