Accessリレーションシップで一対多・多対多テーブルを設計する|外部キー設定・結合クエリ・参照整合性の実践手順とMOS試験対策

「顧客テーブルと注文テーブルをどうつなぐか」「一つの商品に複数の注文が紐づく構造をどう設計するか」──Accessデータベースを業務で使い始めると、テーブル同士のつながりの設計が最初の壁になります。この「テーブル間のつながり」を定義するのがリレーションシップです。

リレーションシップを正しく設定することで、クエリでの自動結合・参照整合性によるデータ整合性の保証・フォームやレポートでの親子関係表示が機能するようになります。逆にリレーションシップが未設定・誤設定のままでは、孤立したレコードや重複データ、集計エラーが多発します。

本記事では主キー・外部キーの基本概念から、リレーションシップウィンドウでの操作手順、一対多・多対多の設計パターン、参照整合性の設定、結合クエリの作成、よくあるエラーの対処、MOS Access試験の頻出ポイントまでを体系的に解説します。

目次

リレーションシップとは

リレーションシップとは、2つのテーブルを共通のフィールドで結びつけ、データを関連付ける仕組みです。Accessでは「リレーションシップウィンドウ」でテーブル間の線を引くことで設定します。

リレーションシップには3種類あります。

種類概要代表例
一対一(1:1)テーブルAの1レコードに対し、テーブルBのレコードも1件だけ社員テーブルと社員詳細テーブル
一対多(1:N)テーブルAの1レコードに対し、テーブルBのレコードが複数紐づく顧客テーブルと注文テーブル
多対多(M:N)テーブルAの1レコードに対しBが複数、Bの1レコードに対しAが複数商品テーブルと注文テーブル(中間テーブルが必要)

業務データベースで最も頻出するのは一対多です。「1人の顧客が複数の注文をする」「1つの部署に複数の社員が所属する」といった構造はすべて一対多に当たります。

Accessのリレーションシップ3種類(一対一・一対多・多対多)の概念図

主キーと外部キーの基本

リレーションシップを設定するには主キー(Primary Key)外部キー(Foreign Key)の概念を正確に理解する必要があります。

主キー(Primary Key)

主キーはテーブル内の各レコードを一意に識別するフィールドです。Null値は許可されず、重複も許可されません。Accessではテーブルを新規作成すると「ID」フィールドが自動的にオートナンバー型の主キーとして追加されます。

デザインビューでは鍵マークのアイコンが表示されたフィールドが主キーです。既存フィールドに主キーを設定するには、対象フィールドを選択して「テーブルデザイン」タブ→「主キー」ボタンをクリックします。

外部キー(Foreign Key)

外部キーは、別テーブルの主キーを参照するフィールドです。例えば「注文テーブル」に「顧客ID」フィールドを持たせると、「顧客テーブル」の主キー「顧客ID」を参照する外部キーになります。

テーブル名フィールド名役割
顧客テーブル顧客ID(数値型またはオートナンバー型)主キー(一側)
注文テーブル顧客ID(数値型)外部キー(多側)

外部キーは参照先の主キーと同じデータ型でなければなりません。オートナンバー型に対しては数値型(長整数)で揃えます。型が一致していないとリレーションシップの作成時にエラーになります。

主キー(PK)と外部キー(FK)の関係図。顧客テーブルと注文テーブルの参照構造

リレーションシップウィンドウの操作手順

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

  1. Accessを開き、データベースファイルを起動する
  2. 「データベースツール」タブをクリックする
  3. 「リレーションシップ」ボタンをクリックする
  4. リレーションシップウィンドウが表示される

テーブルをウィンドウに追加する

  1. 「リレーションシップのデザイン」タブ→「テーブルの追加」をクリックする(または右クリックメニュー)
  2. 「テーブルの表示」ダイアログが開く
  3. 関連付けたいテーブルを選択し「追加」ボタンをクリックする
  4. 追加し終えたら「閉じる」をクリックする

リレーションシップ線を引く(一対多の例)

  1. 「顧客テーブル」の「顧客ID」フィールドをドラッグする
  2. 「注文テーブル」の「顧客ID」フィールドの上でドロップする
  3. 「リレーションシップの編集」ダイアログが表示される
  4. リレーションシップの種類が「一対多」と表示されていることを確認する
  5. 必要に応じて「参照整合性」にチェックを入れる(詳細は後述)
  6. 「作成」ボタンをクリックする

設定後、ウィンドウ上にテーブルをつなぐ線が引かれ、一側に「1」、多側に「∞」(無限大)が表示されれば一対多リレーションシップの設定完了です。

リレーションシップの変更・削除

既存のリレーションシップ線をダブルクリックすると「リレーションシップの編集」ダイアログが再表示され、設定を変更できます。線を右クリック→「削除」でリレーションシップを削除できます。削除はテーブルのデータには影響しませんが、クエリの自動結合設定は失われます。

リレーションシップウィンドウでのフィールドドラッグ操作の模式図

一対多リレーションシップの設計パターン

業務データベースの設計でよく登場する一対多パターンを具体的に確認します。

パターン1:顧客→注文

テーブル名フィールド備考
顧客テーブル(一側)顧客ID(主キー)・氏名・住所・電話番号1人の顧客は複数の注文を持てる
注文テーブル(多側)注文ID(主キー)・顧客ID(外部キー)・注文日・合計金額注文は必ず1人の顧客に紐づく

「顧客テーブル.顧客ID」→「注文テーブル.顧客ID」へ線を引きます。これにより、特定の顧客IDを削除しようとしたとき、その顧客の注文レコードが残っているとエラーで止まる(参照整合性が働く)ように設定できます。

パターン2:部署→社員

テーブル名フィールド備考
部署テーブル(一側)部署ID(主キー)・部署名・所在地1つの部署に複数の社員が所属する
社員テーブル(多側)社員ID(主キー)・部署ID(外部キー)・氏名・入社日社員は1つの部署に所属する

パターン3:商品カテゴリ→商品

テーブル名フィールド備考
カテゴリテーブル(一側)カテゴリID(主キー)・カテゴリ名1つのカテゴリに複数の商品が属する
商品テーブル(多側)商品ID(主キー)・カテゴリID(外部キー)・商品名・単価商品は必ず1つのカテゴリに属する

多対多リレーションシップと中間テーブルの設計

「1つの注文に複数の商品が含まれ、同じ商品が複数の注文に含まれる」という構造は多対多(M:N)です。Accessでは多対多を直接設定できないため、中間テーブル(接続テーブル)を作成して2つの一対多に分解します。

注文明細テーブルで分解する例

テーブル名フィールド役割
注文テーブル(一側)注文ID(主キー)・注文日・顧客ID注文の親テーブル
商品テーブル(一側)商品ID(主キー)・商品名・単価商品の親テーブル
注文明細テーブル(中間・多側)明細ID(主キー)・注文ID(外部キー)・商品ID(外部キー)・数量両テーブルを結ぶ中間テーブル

リレーションシップウィンドウでは次の2本の線を設定します。

  • 「注文テーブル.注文ID」→「注文明細テーブル.注文ID」(一対多)
  • 「商品テーブル.商品ID」→「注文明細テーブル.商品ID」(一対多)

中間テーブルの主キーは「明細ID(オートナンバー)」単独でも構いませんが、「注文ID+商品ID」の複合主キーを設定する設計もよく使われます。複合主キーの場合、デザインビューで2つのフィールドを選択した状態で「主キー」ボタンをクリックします。

多対多を中間テーブルで分解する構造図

参照整合性・連鎖更新・連鎖削除の設定

「リレーションシップの編集」ダイアログにある参照整合性のチェックボックスはデータの整合性を守る重要な設定です。

参照整合性とは

参照整合性を有効にすると、以下のルールがAccessによって自動的に強制されます。

  • 多側のテーブル(注文テーブル)に一側(顧客テーブル)に存在しない外部キー値を入力できない
  • 一側のテーブルで参照されている主キーを削除できない(孤立レコードを防ぐ)
  • 一側のテーブルで参照されている主キーを変更できない(孤立レコードを防ぐ)

連鎖更新と連鎖削除

オプション動作使いどころ
フィールドの連鎖更新一側の主キーを変更すると、多側の外部キーも自動的に更新される主キーを人間が読める値で設計している場合(コード番号の変更など)
レコードの連鎖削除一側のレコードを削除すると、多側の関連レコードもすべて自動削除される親レコード削除時に子レコードも不要になる場合。ただし意図しない大量削除のリスクあり

連鎖削除は便利ですが、誤操作で大量のデータを失うリスクがあります。業務データベースでは連鎖削除は慎重に検討し、必要でない限り無効のままにすることを推奨します。削除ではなく「削除フラグ」フィールドで論理削除する設計も有効です。

参照整合性エラーが発生する典型例

エラー場面原因対処法
注文テーブルへのレコード追加時にエラー存在しない顧客IDを外部キーに入力した顧客テーブルに対象の顧客IDを先に追加してから注文レコードを入力する
顧客テーブルのレコード削除時にエラー削除しようとした顧客IDが注文テーブルで参照されている先に注文テーブルの関連レコードを削除してから顧客レコードを削除する
インポート時に大量エラー外部キー列に存在しない値を含むCSVをインポートしたインポート前にマスターテーブル側にデータを揃えておく。または一時的に参照整合性を外して後から修正する

リレーションシップを使った結合クエリの作成

リレーションシップを設定した後、クエリデザインビューで複数テーブルを追加すると自動的に結合線が引かれます。この結合により、顧客名と注文日を1つのクエリで取り出すといった操作が簡単になります。

クエリデザインビューでの結合操作

  1. 「作成」タブ→「クエリデザイン」をクリックする
  2. 「テーブルの表示」ダイアログで「顧客テーブル」と「注文テーブル」を追加する
  3. リレーションシップが設定済みであれば自動的に結合線が表示される
  4. デザイングリッドに取り出したいフィールドをドラッグする(例:顧客テーブルの「氏名」、注文テーブルの「注文日」「合計金額」)
  5. 「クエリのデザイン」タブ→「実行」をクリックして結果を確認する

内部結合と外部結合

既定の結合は内部結合(INNER JOIN)です。両方のテーブルに一致するレコードのみが表示されるため、注文のない顧客は結果に含まれません。注文のない顧客も一覧に含めたい場合は外部結合(LEFT JOIN)に変更します。

結合線をダブルクリックすると「結合プロパティ」ダイアログが開き、以下の3種類から選択できます。

オプション内容SQL相当
オプション1両方のテーブルに一致するレコードのみ表示INNER JOIN
オプション2左テーブルのすべてのレコードと、右テーブルの一致するレコードを表示LEFT JOIN
オプション3右テーブルのすべてのレコードと、左テーブルの一致するレコードを表示RIGHT JOIN

外部結合を選択すると結合線の矢印の向きが変化して視覚的に確認できます。LEFT JOINを選ぶと、注文が0件の顧客の行も出力され、注文件数フィールドはNullで表示されます。

結合クエリの集計例

顧客ごとの注文件数を集計する場合は、クエリデザインビューで「集計」行を表示(「クエリのデザイン」タブ→「集計」)し、次のように設定します。

フィールドテーブル集計
氏名顧客テーブルグループ化
注文ID注文テーブルカウント

「注文ID」列の集計を「カウント」にすると、各顧客の注文件数がカウントされます。列ラベルを「注文件数: 注文ID」と書き換えると結果列に分かりやすい名前を付けられます。

よくあるエラーと対処法

エラー・症状原因対処法
「リレーションシップを作成できません」参照先と参照元のフィールドのデータ型が一致していない(オートナンバー型と数値型以外の組み合わせ)多側テーブルの外部キーフィールドのデータ型を数値型(長整数)に変更する
リレーションシップ線が引けない(ドロップしても何も起きない)参照元か参照先のフィールド名がテーブルに存在しない、またはデザインビューでテーブルを開いたまますべてのテーブルを閉じてからリレーションシップウィンドウで操作する
「参照整合性ルールに違反します」外部キーに存在しない値があるレコードを追加しようとしたまず一側テーブルに対応する主キーのレコードを追加してから多側レコードを入力する
クエリの結合線が自動表示されないリレーションシップが未設定、またはテーブル追加後に外部キー名が不一致リレーションシップウィンドウで設定を確認・追加する。手動で結合線を引くこともできる(ただし設定はクエリ内だけで有効)
「このリレーションシップは削除できません」別のクエリがそのリレーションシップを参照している場合関連するクエリを閉じてからリレーションシップを削除する
オートナンバー型と数値型で型不一致エラー一側がオートナンバーで多側が数値型(整数)や短いテキストになっている多側の外部キーフィールドのフィールドサイズを「長整数」に変更する(整数ではなく長整数が正しい)

MOS Access試験でのリレーションシップ出題ポイント

MOS Access 365&2019では、リレーションシップの作成・変更操作が「データベースの管理と保守」のスキル項目で出題されます。操作の手順と概念を両方理解しておくことが重要です。

  • リレーションシップウィンドウの開き方:「データベースツール」タブ→「リレーションシップ」の操作手順
  • 一対多リレーションシップの作成:主キー側から外部キー側へドラッグ&ドロップする操作
  • 参照整合性の設定:チェックボックスの位置と有効化する意味を理解していること
  • 連鎖更新・連鎖削除の違い:どちらをどのような場合に使うかを選択問題で問われる
  • 一対多と多対多の違い:中間テーブルが必要な理由を概念として理解していること
  • 結合の種類(内部結合・外部結合):結合プロパティダイアログでの変更操作

MOS試験チェックリスト

確認ポイント操作内容難易度
リレーションシップウィンドウを開く「データベースツール」タブ→「リレーションシップ」をクリックできる★☆☆
テーブルをウィンドウに追加する「テーブルの追加」ダイアログからテーブルを選んで追加できる★☆☆
一対多リレーションシップを作成する主キーフィールドを外部キーフィールドへドラッグ&ドロップして設定できる★★☆
参照整合性を有効にする「リレーションシップの編集」で「参照整合性」にチェックを入れて作成できる★★☆
連鎖更新・連鎖削除を設定する参照整合性チェック後に表示されるオプションを適切に設定できる★★☆
既存のリレーションシップを編集するリレーションシップ線をダブルクリックしてダイアログを開き変更できる★★☆
外部結合に変更するクエリデザインビューで結合線をダブルクリックして結合プロパティを変更できる★★★

まとめ:リレーションシップ設計でデータベースの「骨格」を整える

本記事のポイントをまとめます。

  • 主キーと外部キーが基本:一側テーブルの主キーを多側テーブルの外部キーが参照する。データ型は必ず一致させる(オートナンバー対長整数)
  • 一対多が最頻出:「1つの顧客が複数の注文を持つ」構造はすべて一対多。リレーションシップウィンドウで主キー→外部キーへ線を引く
  • 多対多は中間テーブルで分解:直接設定できないため中間テーブルを作成し、2本の一対多に変換する
  • 参照整合性でデータを守る:孤立レコードや存在しない外部キーの入力を自動的に防ぐ。連鎖削除は意図しない大量削除のリスクがあるため慎重に設定する
  • 結合クエリで複数テーブルを横断集計:リレーションシップ設定済みならデザインビューで自動結合。INNER JOIN(既定)とLEFT JOINを使い分けて必要な結果を得る
  • MOS試験対策:リレーションシップウィンドウの操作・参照整合性の設定・結合プロパティの変更を実際に手を動かして繰り返し練習する

リレーションシップを正しく設計することは、Accessデータベース全体の品質を左右します。テーブルの正規化とリレーションシップ設計がしっかりできていれば、クエリ・フォーム・レポートの構築がスムーズになり、データ不整合に悩まされることも減ります。MOS試験の準備としても、実際にサンプルデータベースを作成しながら繰り返し操作を体験することが最短の攻略法です。

PR

MOS Excel 365 対策テキスト&問題集

MOS試験の出題形式と操作確認の流れはExcelとAccessで共通しており、本書でプロパティシート操作や設定ダイアログの「どこで何を確認するか」という感覚を養うと、AccessのリレーションシップやMOS Access試験対策にも直接応用できます。

PR

Microsoft Copilot for Microsoft 365活用大全

Microsoft 365スイート全体を見渡すことでAccessのデータベース設計がWordやExcelとどう連携するかも理解できます。Copilotを使ったデータ集計・分析フローの全体像を把握するにも最適な一冊です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次