今回は、Accessのリレーションシップについて解説します。
もくじ
Accessを習得するために避けて通れないことは、「リレーションシップの学習」です。
リレーションシップは、データベースの正規化をイメージできるとスムーズに学習できます。
このブログでも過去記事で正規化について書いていますが、今行っている業務を正規化する流れがつかめるので、一読をオススメします。
また、今回は操作マニュアルだけではなく、実戦でどのように使い分けたら良いかについても触れました。
Accessのリレーションシップを設定する
部品発注データベースに「T00小分類マスタ」と「T01部品マスタ」の2つのテーブルがあるので、リレーションシップでつないでみます。
「T00小分類マスタ」のテーブルデータです。
「小分類ID」を主キーにしています。
「T01商品マスタ」のテーブルデータです。
「T00小分類マスタ」の主キーで使っている「小分類ID」が含まれていることが分かります。
「小分類ID」は「T01商品マスタ」の外部キーになっているとも言えます。
「T00小分類マスタ」と「T01商品マスタ」をつなぐためには、「小分類ID」同士を設定してあげればよいということになります。
「デーベースツール」タブの「リレーションシップ」をクリックします。
リレーションシップの編集画面が開きますが、まだ何も設定されていない状態です。
「テーブルの追加」をクリックします。
設定したいテーブルを選び、追加することができます。
「T00小分類マスタ」と「T01部品マスタ」を追加した状態です。
「T00小分類マスタ」の小分類IDから「T01部品マスタ」の小分類IDに、マウスをドラッグします。
ダイアログが表示されますが、「参照整合性」にチェックを入れて「作成」をクリックします。
リレーションシップを設定するときは、必ず「参照整合性」を設定するものだと覚えておきましょう。
2つのテーブル間のリレーションシップが設定されました。
線の両端に「1」と「∞」が表示されていますよね?
「1」が主キー側、「∞」が外部キー側で、「一対多のリレーションシップ」とも呼ばれます。
リレーションシップを設定することで、外部キー側のテーブルに主キーに無いデータが入力されるのを防ぐ効果があります。
試しにマスタに存在しないデータを入力しようとすると、このように警告が表示されてデータ入力を完了できなくなります。
他のテーブルのリレーションシップ設定を行った結果、下のようになりました。
リレーションシップのオプションについて
設定したリレーションシップをクリックすると、設定用のダイアログが表示されます。
リレーションシップには3つの設定があります。
参照整合性
初めて聞く方もいると思いますが、リレーションシップの根幹となる機能です。
参照整合性は、Wikipediaでこのように説明してあります。
参照整合性 は、コンピュータの関係データベースの関係モデルにおいて2つの関連しあった関係変数 (表、テーブル) の間の一貫性 (データ完全性) をいう。
Wikipediaより
ちょっと難しく書かれていますが、データに矛盾で不具合が発生しないための性能になります。
Accessはもちろん、OracleやSQL SERVERなど、世の中で使われている他のデータベースシステムにとっても、参照整合性は欠かせない機能です。
データの連鎖更新
主キー側のデータを変更すると、外部キー側も連動して変わります。
連鎖更新を設定するかどうかは、主キーを作るルールがどのようになっているかで判断するとよいです。
ただの数値が主キーになっている場合は設定不要ですが、文字列で主キーを決めている場合は設定しておいた方が無難です。
データの連鎖削除
マスタ側のデータを削除すると、対象の入力データも削除されます。
連鎖削除を設定してしまうと、残しておきたいデータも削除されるリスクがありますので、慎重に考えたほうがいいですね。
あえてリレーションシップを設定しないパターン
次のパターンに当てはまる場合は、リレーションシップをあえて設定しないという選択肢を考えてもいいでしょう。
入力データの過去履歴を残す
当ブログのテーマにしている「部品発注データベース」にも当てはまりますが、発注履歴が部品マスタと連動して勝手に変更されたら困りますよね?
そんな不具合を避けるために、商品マスタ関連と伝票関連のデータは切り離しています。
更に、発注データ側にも商品名や規格などのデータも収納できるようにしています。
昔はディスクの容量が少なかったので、できるだけデータを少なくするためにもっとシビアな設計になっていたようです。
恐らく、伝票に品名などを残すのも、ディスクを圧迫するという理由で禁じられていたのでしょう。
今は、テキストデータが1フィールド増えた程度でディスクを圧迫したり、動作に支障がきたすことはありませんので、必要なデータは重複しても残す方がメリットは大きいです。
基幹システムのサブシステムとして使う場合
既に運用している基幹システムから参照してデータを加工するだけの場合も、リレーションシップを設定するのは不要です。
なぜなら、既存のシステム自体にリレーションシップが設定されていて、データに整合性がとられているからです。
整合性をもう一度取り直す必要がありませんので、テーブルをそのままインポートするだけで問題ありません。
まとめ
今回は、Aceessのリレーションシップについて解説しました。
リレーションシップはAccessの核になる大事な機能です。
リレーションシップを設定するための操作は簡単ですが、データベース設計を事前に想定しておくと、不要なリレーションシップを組まなくても済みます。
使いやすいAccessデータベースを作りあげるためにも、不要なリレーションシップを組まないことも大切ですので、頭の片隅にでも置いておくと役に立つでしょう。
最後に、ブログでは他のAccessの機能についても解説しています。
よかったらトップページから希望の機能を探してみてください。
また、Accessのデータベース設計のまとめ記事もありますので、そちらもごらんください。
≫ これだけで大丈夫! | Accessアプリを学びたい人のための学習手引き