読者です 読者をやめる 読者になる 読者になる

asaworks

自分の技術備忘録と雑談

【accessVBA】accessシステム構築入門 ~第二回 テーブルの役割分担~

 

f:id:asa-works:20161013113815p:plain

 

【accessVBA】accessシステム構築入門 ~第二回 テーブルの役割分担~

 

accessシステム構築入門第二回です。
今回はテーブルの役割分担について考えていきたいと思います。

前回、「トランザクションテーブル」「ワークテーブル」「マスタテーブル」
という3つのテーブルを例に出しました。
それぞれの役割について解説していきます。

 

asa-works.hatenablog.com

 

 

それぞれのテーブルの役割

マスタテーブル

一意なもの、繰り返し使用するものはマスタテーブルとして扱います。

下図の例では「社員マスタ」「部署マスタ」「資格マスタ」を挙げています。

マスタテーブルはあまり変更しないものとして、メンテナンスできる人は一部の人にしておくと良いでしょう。

トランザクションテーブル

蓄積されていく明細データを保管するテーブルです。

マスタにデータがある場合は、マスタのIDや番号など、一意で不変なものを入力します。

なぜこういった作りにするかというと、繰り返されるデータというのは更新があった場合に更新作業がとても大変になってしまうからです。

例えば、部署名を「総務部」、とトランザクションテーブルににそのまま入れていたとします。部署名変更があって「総務人事部」となってしまった場合はどうでしょうか。

「総務部」というデータを全て「総務人事部」に更新するのはとても手間ですよね。

マスタを参照するようにしておけば、こういった更新の際も、マスタ上でのみ変更すれば完了となります。

 

ただし、履歴管理したい場合などは現在のマスタデータと紐付けたデータを退避するなどの事前処理が必要になりますので注意が必要です。

 

トランザクションテーブルだけを見ると内容がサッパリ・・・と思いますが、利用する際はマスタと紐付けることで、見てわかるようなデータになりますので、このテーブルは極力シンプルにしておいて大丈夫です。

 

f:id:asa-works:20170225112143p:plain

 

ワークテーブル

新規データやデータに変更が発生した場合に利用します。

私の場合ですが、ワークテーブルをフォームのソースデータとして利用しています。

新規データの場合→ワークテーブルに投入したデータをイベントでトランザクションテーブルにINSERTする。

更新データの場合トランザクションテーブルから更新するデータを取得し、ワークテーブルにINSERTする。ユーザーはそれを更新し、更新後のデータをイベントでトランザクションテーブルにUPDATEする。

 

ユーザーの意思でアップデート処理を行う為、access特有の「誤って保存してしまった」「うっかりデータ更新してしまった」を防止することができます。

 

accessは便利で作りやすい反面、データを正しく保つことが意外とむずかしいソフトです。このようにテーブルに役割をつけてあげることで、ある程度の正確性は確保できますので、ぜひ参考にしてみてください。