Accessのリレーションシップについてお探しですね。
広告
Accessのリレーションシップって何?初心者向けにやさしく解説
Microsoft Accessを使い始めると、Excelにはない「リレーションシップ」という言葉が出てきて、「これ何?」と戸惑う人がとても多いです。
リレーションシップとは、簡単に言うと、別々に作った複数の表(テーブル)を共通の項目でつなげて、一つの大きなデータベースとして使えるようにする仕組みのことです。
この記事では、Access初心者の方向けに、一番基本となる「一対多」のリレーションシップの設定方法から、データの間違いを防ぐ「参照整合性」の使い方、そして実際に使うときに迷いやすい連鎖更新や連鎖削除の使い分けまで、分かりやすく説明していきます。
リレーションシップって何?「一対多」の考え方を理解しよう
Accessが「リレーショナルデータベース」と呼ばれるのは、データを複数のテーブルに分けて管理して、それらをリレーションシップでつなげて使うからなんです。
たとえば、Excelで売上を管理するとき、一つのシートに顧客名、住所、商品名、値段などを全部入力することが多いですよね。
でも、この方法だと顧客の住所が変わったときに、過去のデータを全部直さないといけなくて大変です。
しかも入力ミスやデータのズレも起こりやすくなります。
そこでAccessでは、「顧客テーブル」と「売上テーブル」のように、データを役割ごとに分けて保存します。
分けたテーブル同士を共通のキー(たとえば顧客IDなど)でつなぐのが、リレーションシップの役割というわけです。
この設定をしておけば、売上テーブルには顧客IDだけを記録しておけばOK。
いつでも顧客テーブルから最新の住所や名前を引っ張ってこれるようになります。
このとき、一番よく使われるのが「一対多」という関係です。
一対多とは、片方のテーブルにはデータが一回しか出てこない(顧客テーブルの顧客ID)けど、もう片方のテーブルには同じデータが何回も出てくる(売上テーブルには同じお客さんの購入履歴が何件も記録される)という関係のことです。
この「一対多」の関係をちゃんと設定すると、同じデータを何度も入力しなくて済むし、データベース全体の容量も抑えられて、正確な集計や管理ができるようになります。
一対多のリレーションシップを理解して、きちんと設定することは、Accessを使って仕事を効率化するための最初のステップなんです。
ExcelのVLOOKUP関数でやっていたようなデータ参照を、システム全体で自動的に、しかも正確にやってくれる土台作りだと思ってください。
リレーションシップを設定する前の準備と手順
リレーションシップをスムーズに設定するには、事前の準備がとても大切です。
何も準備せずにいきなりテーブル同士を線で結ぼうとすると、エラーが出て設定できないことがよくあります。
まず確認すべきなのは、「一」の側になるテーブルに「主キー」が設定されているかどうかです。
主キーとは、そのテーブルの中でデータが絶対にかぶらないことを保証する項目のことで、顧客テーブルなら「顧客ID」などがそれにあたります。
また、両方のテーブルをつなぐフィールドの「データ型」を完全に一致させておくことも必須です。
数値型なら細かいサイズまで合わせる必要があるので、事前にテーブルのデザイン画面で確認しておきましょう。
**リレーションシップを設定するための基本条件**
1. 「一」側のテーブルのつなぐフィールドに主キーが設定されていること
2. つなぐ両方のフィールドのデータ型(数値型、短いテキストなど)が同じであること
3. テーブルが他の人や他の画面で開かれていないこと
準備ができたら、実際の操作に進みます。
Accessの画面上部にある「データベースツール」タブから「リレーションシップ」をクリックします。
画面に何も表示されていない場合は「テーブルの表示(または追加)」を選んで、つなぎたいテーブルを画面上に配置してください。
次に、「一」の側になるテーブルの主キーフィールド(例:顧客テーブルの顧客ID)をクリックしたまま、「多」の側になるテーブルの外部キーフィールド(例:売上テーブルの顧客ID)までドラッグ&ドロップします。
すると「リレーションシップの編集」という画面が出てきて、両者をつなぐ準備が完了します。
このドラッグ&ドロップの方向は厳密にはどちらからでもいいんですが、「一」から「多」へ引く癖をつけておくと、テーブル同士の関係が直感的に分かりやすくなります。
データの間違いを防ぐ「参照整合性」って何?
リレーションシップの編集画面を開いたとき、真ん中に「参照整合性」というチェックボックスが出てきます。
これは、データベースの信頼性を保つためのすごく大事な機能なんです。
参照整合性とは、簡単に言うと「親(一の側)が存在しない子(多の側)のデータを作らせない」という強力なルールのことです。
このチェックを入れずに単に線を結んだだけだと、見た目上つながっているだけで、間違ったデータの入力をシステム側で防ぐことはできません。
**参照整合性で防げる間違いの例**
1. 売上テーブル(多側)に、顧客テーブル(一側)に存在しない架空の顧客IDを入力できなくなる
2. すでに売上データがある顧客の情報を、顧客テーブルから誤って削除できなくなる
3. すでに売上データとつながっている顧客IDを、別のIDに勝手に変更できなくなる
このように、参照整合性を設定すると「誰に売ったか分からない売上データ」や「存在しない商品が記録された注文データ」といった、おかしなデータ(孤立したデータ)が発生するのを完全にブロックしてくれます。
実際にAccessを仕事で使う場合、データの正確性を保つことは何よりも大切です。
だから、一対多のリレーションシップを設定するときは、特別な理由がない限り必ずこの「参照整合性」にチェックを入れるのがおすすめです。
チェックを入れて「作成」ボタンを押すと、リレーションシップの線に「1」と「∞(無限大)」の記号が表示されます。
これで、どのテーブルが「一」でどのテーブルが「多」なのかという関係が見た目でもはっきり分かるようになって、今後のデータベース作りがずっとスムーズになります。
連鎖更新と連鎖削除はどう使い分ける?
参照整合性にチェックを入れると、その下に「フィールドの連鎖更新」と「レコードの連鎖削除」という2つのオプションが選べるようになります。
これらはとても便利な機能なんですが、使い方を間違えると大事なデータを意図せず変更したり消してしまったりするリスクがあるので、それぞれの仕組みをちゃんと理解して使う必要があります。
まず「フィールドの連鎖更新」は、「一」側の主キーの値が変わったとき、それにつながる「多」側の値も自動的に書き換えてくれる機能です。
たとえば、顧客IDの番号の付け方が変わって、ある顧客のIDを「1」から「999」に変更したとします。
普通は参照整合性のエラーで変更できませんが、連鎖更新を有効にしておけば、過去の売上データに記録された顧客IDも一斉に「999」へと自動更新されます。
顧客情報の変更でデータがバラバラになるのを防げるので、実際の仕事ではチェックを入れておくと便利な場面が多い機能です。
一方、「レコードの連鎖削除」の扱いには注意が必要です。
これを有効にすると、「一」側のデータを削除したとき、つながっている「多」側のデータまで連動して全部消えてしまいます。
たとえば、取引がなくなった顧客を顧客テーブルから削除すると、過去の大事な売上履歴までシステムから跡形もなく消えてしまうんです。
売上集計の数字が過去と合わなくなってしまうなど、深刻なトラブルの原因になりかねません。
なので、基本的には「連鎖削除」にはチェックを入れない運用を強くおすすめします。
どうしても過去の顧客を非表示にしたい場合は、テーブルに「取引停止」というチェック項目(フラグ)を作るなどの別の方法を考えるべきです。
例外として、売上伝票と売上明細のように「親伝票そのものを間違えて入力したので消したい。
そのとき、つながっている明細も一括で消えてほしい」という明確な運用ルールがある場合にだけ、自己責任で使うようにしましょう。
広告
