ACCESS リレーションシップの設定方法

ACCESSはEXCELとは異なり、複数のテーブル(表)をつなぎ合わせてデータを作っていくリレーショナルデータベースです。

このリレーションシップ設定がACCESSの基本であり、EXCELを使っている方には最もわかりにくい部分です。

この記事ではテーブルのリレーションシップ設定方法についてご説明します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSの基本的な使い方をご紹介していきます。

リレーションシップとは

そもそもリレーションシップとは何でしょうか。

ACCESSは、複数のテーブルを連結して一つの表を作っていくリレーションデータベースです。
複数のテーブルに分割することで、以下のメリットがあります。

①入力規則を徹底できる

②集計が容易

③更新がある場合に一ヶ所変更すれば全て変更できる

テーブルの設計方法について詳しく知りたい方は、はこちらの記事もご覧ください。

テーブルを作成する方法

こうして複数に分割したテーブルは、バラバラでは意味をなしません。

テーブルをつなぎ合わせ、リレーションシップを設定してようやく使えるようになります。

リレーションシップとは、複数のテーブルを共通のキー値でつないで意味を持たせることです。

例えば、下記の例では売上マスターと商品マスターが共通の商品IDで連結されています。

こういったテーブル構成にすることで、売上マスターには商品IDだけを情報として保有することができ、商品名が変更になった際は商品マスターの商品名を1か所書き換えるだけで、売上マスターから参照される商品名を更新することが可能です。

リレーションシップの設定方法

では、実際にリレーションシップの設定方法を見ていきましょう。
今回はこちらの3つのテーブルを用意しました。

顧客テーブル

商品テーブル

売上テーブル

では、リレーションシップの設定をしていきましょう。

ACCESSを起動し、メニューの「データベースツール」から「リレーションシップ」を選択します。

リレーションシップのウィンドウが開きますので、「テーブルの表示」を選択します。

テーブルが表示されますので、今回リレーションシップを設定する、3つのテーブルを選択しましょう。

するとこんな画面になります。

現在は3つのテーブルが独立している状態ですので、ここからリレーションシップの設定をしていきましょう。

まずは、売上テーブルの「顧客ID」と顧客テーブルの「顧客ID」をつなぎます。
どちらかをもう一方にドラッグアンドドロップしましょう。

するとこんな画面が表示されます。

リレーションシップの設定ウィザードです。
チェックボックスが中央に3つありますが、3つともチェックしておけばよいでしょう。
ちなみに、それぞれは以下の意味です。

参照整合性一対多のリレーションにおいて、両方のテーブルでデータの整合性が取れている。一側(今回でいう顧客テーブル)に無い値が多側(今回でいう売上テーブル)に存在しない。
フィールドの連鎖更新一対多のリレーションにおいて、一側(今回でいう顧客テーブル)の主キーの値(顧客ID)が変更された場合に、多側(今回でいう売上テーブル)に設定されている同じフィールド(顧客ID)も連動して変更される。
レコードの連鎖削除一対多のリレーションにおいて、一側(今回でいう顧客テーブル)のレコードが削除された場合に、多側(今回でいう売上テーブル)で該当の顧客IDが設定されているレコードも連動して削除される。

設定を行うと画面はこのような形になります。

売上テーブルと顧客テーブルの顧客IDが線でつながったのが分かると思います。

顧客テーブル側に「1」、売上テーブル側に「∞」と記載がありますが、これは顧客テーブルが一側、売上テーブルが多側であることを示します。

一側とはその値が一度しか現れないテーブルです。
顧客テーブルでは顧客IDが主キーですので、同じ顧客IDは2つは無い、ということです。

多側とは、その値が何度も現れる可能性があるテーブルです。
売上テーブルでは同じ顧客の売上が複数回記録されることがありますので、同じ顧客IDが複数存在します。

では、同じように商品テーブルもリレーションシップを設定してみましょう。

上記のようになりました。
これでリレーションシップ設定は完了です。

この設定により、売上テーブルの顧客IDと顧客テーブルの顧客ID、売上テーブルの商品IDと商品テーブルの商品IDがリレーション設定できました。

こうして複数のテーブルをリレーションさせて利用するのがACCESSの基本的な使い方です。

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

基本はここまでで完了していますが、もう少し追加でご説明しましょう。
リレーションシップには種類があります。

先ほどのリレーションシップの設定画面で「結合の種類」というボタンを押してください。

すると、下記の画面が表示されます。

ここでは、結合の種類を3パターンから選択することになります。

両方のテーブルの結合フィールドが同じ行だけを含める

これが標準です。

売上テーブル、顧客テーブルの両方に同じ値が存在するレコードのみを表示し、片方には存在するがもう一方には存在しない値が入っているレコードは表示されなくなります。

例えば、売上テーブルには顧客ID:10と入力されているのに顧客テーブルには顧客ID:10がいない場合は売上テーブルのレコードも表示されない、ということです。

この結合方法を内部結合と呼びます。

顧客テーブルの全レコードと売上テーブルの同じ結合フィールドのレコードだけを含める

こちらは、売上テーブル側に無い顧客IDでも、顧客テーブル側にある全てのレコードを表示する場合に利用します。
今回は顧客テーブルが一側テーブルなので、あまりこの結合方法を選択するシーンは多くありません。

この結合方法を外部結合と呼びます。

売上テーブルの全レコードと顧客テーブルの同じ結合フィールドのレコードだけを含める

こちらは逆に、顧客テーブル側に無い顧客IDでも、売上テーブル側のレコードは全て表示する、という方法です。
こちらも外部結合です。

売上テーブルには顧客ID:10と入力されているのに顧客テーブルには顧客ID:10がいない場合でも、この結合方法を選択すれば売り気テーブルのレコードを表示することが可能です。

そんなのはデータ入力上の誤りじゃないか?と思われるかもしれません。
実際にはこの結合方法を使うのは、多側のテーブルで入力値がNULL(空白)の場合が圧倒的に多いです。

今回は売上テーブルに入力されるのは顧客IDなので考えにくいのですが、売上テーブルの中には、レコードによって入力されたりされなかったりするフィールドもあると思います。
こうしたフィールドを他のテーブルとリレーション設定すると、内部結合の場合だと売上が表示されなくなってしまうのです。
そのため、外部結合を使ってい売上テーブルのレコードは全て表示させるのです。

実際に、外部結合に変更するとリレーションシップ画面でも、片側だけが矢印に変更されるのが確認できます。

以上、リレーションシップの設定方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。