基本(Access)

【超入門】Accessのリレーションシップについて

スポンサーリンク

こんにちは。システム担当の父親、KATSUです。
Excel歴20年、Access歴10年ですが、ブログは週一ペースで新記事を投稿しています。

今回は、Accessのリレーションシップについて解説します。

Accessを習得するために避けて通れないことは、「リレーションシップの学習」です。

リレーションシップは、データベースの正規化をイメージできるとスムーズに学習できます。
このブログでも過去記事で正規化について書いていますが、今行っている業務を正規化する流れがつかめるので、一読をオススメします。

Accessデータベース設計の基本(正規化)

また、今回は操作マニュアルだけではなく、実戦でどのように使い分けたら良いかについても触れました。

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

部品発注データベースに「T00小分類マスタ」と「T01部品マスタ」の2つのテーブルがあるので、リレーションシップでつないでみます。

リレーションシップでテーブルをつなぐ

「T00小分類マスタ」のテーブルデータです。
「小分類ID」を主キーにしています。

小分類IDが主キーになっている

「T01商品マスタ」のテーブルデータです。
「T00小分類マスタ」の主キーで使っている「小分類ID」が含まれていることが分かります。
「小分類ID」は「T01商品マスタ」の外部キーになっているとも言えます。

商品マスタの小分類ID

「T00小分類マスタ」と「T01商品マスタ」をつなぐためには、「小分類ID」同士を設定してあげればよいということになります。

「デーベースツール」タブの「リレーションシップ」をクリックします。

リレーションシップをクリックする

リレーションシップの編集画面が開きますが、まだ何も設定されていない状態です。

何も選択されていないリレーションシップ編集画面

「テーブルの追加」をクリックします。

テーブルの追加をクリック

設定したいテーブルを選び、追加することができます。

テーブル追加のダイアログ

「T00小分類マスタ」と「T01部品マスタ」を追加した状態です。

テーブルが追加された状態

「T00小分類マスタ」の小分類IDから「T01部品マスタ」の小分類IDに、マウスをドラッグします。

マウスをドラッグする

ダイアログが表示されますが、「参照整合性」にチェックを入れて「作成」をクリックします。
リレーションシップを設定するときは、必ず「参照整合性」を設定するものだと覚えておきましょう。

参照整合性を設定して作成

2つのテーブル間のリレーションシップが設定されました。

リレーションシップが作成された状態

線の両端に「1」と「∞」が表示されていますよね?
「1」が主キー側、「∞」が外部キー側で、「一対多のリレーションシップ」とも呼ばれます。

主キー側と外部キー側

リレーションシップを設定することで、外部キー側のテーブルに主キーに無いデータが入力されるのを防ぐ効果があります。

試しにマスタに存在しないデータを入力しようとすると、このように警告が表示されてデータ入力を完了できなくなります。

リレーションシップの警告表示

他のテーブルのリレーションシップ設定を行った結果、下のようになりました。

部品発注データベースのリレーションシップ

リレーションシップのオプションについて

設定したリレーションシップをクリックすると、設定用のダイアログが表示されます。

リレーションシップ3つのオプション

リレーションシップには3つの設定があります。

参照整合性

初めて聞く方もいると思いますが、リレーションシップの根幹となる機能です。
参照整合性は、Wikipediaでこのように説明してあります。

参照整合性 は、コンピュータの関係データベースの関係モデルにおいて2つの関連しあった関係変数 (表、テーブル) の間の一貫性 (データ完全性) をいう。

Wikipediaより

ちょっと難しく書かれていますが、データに矛盾で不具合が発生しないための性能になります。
Accessはもちろん、OracleやSQL SERVERなど、世の中で使われている他のデータベースシステムにとっても、参照整合性は欠かせない機能です。

データの連鎖更新

主キー側のデータを変更すると、外部キー側も連動して変わります。
連鎖更新を設定するかどうかは、主キーを作るルールがどのようになっているかで判断するとよいです。

ただの数値が主キーになっている場合は設定不要ですが、文字列で主キーを決めている場合は設定しておいた方が無難です。

データの連鎖削除

マスタ側のデータを削除すると、対象の入力データも削除されます。
連鎖削除を設定してしまうと、残しておきたいデータも削除されるリスクがありますので、慎重に考えたほうがいいですね。

あえてリレーションシップを設定しないパターン

次のパターンに当てはまる場合は、リレーションシップをあえて設定しないという選択肢を考えてもいいでしょう。

入力データの過去履歴を残す

当ブログのテーマにしている「部品発注データベース」にも当てはまりますが、発注履歴が部品マスタと連動して勝手に変更されたら困りますよね?

そんな不具合を避けるために、商品マスタ関連と伝票関連のデータは切り離しています
更に、発注データ側にも商品名や規格などのデータも収納できるようにしています。

伝票はマスタから切り離している

昔はディスクの容量が少なかったので、できるだけデータを少なくするためにもっとシビアな設計になっていたようです。
恐らく、伝票に品名などを残すのも、ディスクを圧迫するという理由で禁じられていたのでしょう。

今は、テキストデータが1フィールド増えた程度でディスクを圧迫したり、動作に支障がきたすことはありませんので、必要なデータは重複しても残す方がメリットは大きいです。

基幹システムのサブシステムとして使う場合

既に運用している基幹システムから参照してデータを加工するだけの場合も、リレーションシップを設定するのは不要です。
なぜなら、既存のシステム自体にリレーションシップが設定されていて、データに整合性がとられているからです。

整合性をもう一度取り直す必要がありませんので、テーブルをそのままインポートするだけで問題ありません。

まとめ

今回は、Aceessのリレーションシップについて解説しました。

リレーションシップはAccessの核になる大事な機能です。
リレーションシップを設定するための操作は簡単ですが、データベース設計を事前に想定しておくと、不要なリレーションシップを組まなくても済みます

使いやすいAccessデータベースを作りあげるためにも、不要なリレーションシップを組まないことも大切ですので、頭の片隅にでも置いておくと役に立つでしょう。

スポンサーリンク

-基本(Access)