Accessのバックエンドを複数に分割するメリットはありますか

Microsoft AccessでDBを作成する際に、フロントエンド(Form, Query)とバックエンド(Table)を分割する、という事をよく行っています。

ここでふと疑問に感じた事ですが、「バックエンドを更に複数に(例えばTable毎に)分割し、フロントエンド側のリンクテーブルでそれぞれ参照する形にする」という設計をする事はあるのでしょうか。
こういった設計を指南する記載を見かけないため邪道なのかもしれませんが、

明確に非推奨とする解説も見つからないため(当たり前過ぎるから?)、理解のため質問させていただきました。

想像できるメリットとしては

  1. ファイルが壊れた時の影響範囲が限定的。リスク低減。
  2. 利用頻度が少なくサイズの大きなテーブルを別ファイルにする事でファイル読み込み時のオーバーヘッドが減少?(パフォーマンス向上)
  3. ファイル毎のサイズ上限を回避

想像できるデメリットとしては

  1. 複数のファイルを参照する事での余計なオーバーヘッド、トラフィック発生?(パフォーマンス低下)
  2. 1ファイル当たりの障害発生率が同じと仮定するなら統計上はDB全体の障害発生率が増加(安定性低下)
  3. DB接続のプログラミングが複雑になる?
  4. ファイルの数だけ管理や設定の手間が増える
  5. パフォーマンスにも安定性にも[全く/左程]影響せず、仕様上の要請(メリット3)を除けば単純に意味が無い。手間なだけ。

といったところでしょうか。

お付き合いいただければ幸いです。

  • Accessに限った話ではありませんが現在Accessで設計しているため、フロントエンドもバックエンドもaccdbファイルを利用する、という形を特にテーマとしています。
  • バックエンドはLAN内のサーバー、またはWAN上の外部サーバーに置く事を想定しています。
  • 環境:Windows10 pro 32bit / Access2016 32bit
回答
回答

私のところはmdbをいまだに使っていて恥ずかしいくらいの古い環境なので、

直接の回答にならずに大変申し訳ないのですが、次のような感じで分けてます。

・顧客管理:60MBで5万件くらい(以降すべてテーブルのみの容量です)

・売上管理(売上、請求、支払い、仕入れ等):200MB

  数万件のテーブルがいくつかと10万件のもの

・日報管理(接客や外回り結果など):200MBで20万件くらい

・客先修理記録管理:60MB で5万件くらい

クライアントPCが30台くらいで、ファイルサーバが1つ、LANは100Mbpsで使っています。

ActiveDirectoryを使っておらず、簡易LANにてのクライアントサーバもどきです。

(junnny 様がおっしゃるようなテーブルとプログラムに分けたのみです。)

また、すべての機能がリンクテーブルでリンクしあってます。

2004年ごろからこのままで、セキュリティ問題をひきずりながらでいけないのですが、

サーバ側でレジストリのoplock設定をしているからか、一応、ファイルが壊れたことは

一度もありません。

メリットとしては、junnny 様がおっしゃるとおりだと思います。

これを1つのmdbファイルにまとめていたらと思うとゾっとします。

また、速度的にもメンテ的にも、mdbに限っては、分割したほうがよいと思っています。

そのほうがメンテで業務停止しないと思います。

あまり細かく区切りすぎてもいけないかとは思いますが、利用目的別に分ける感じなら

分けたほうがよいと思っています。

速度的には、一時テーブルをできるだけ使う(連結フォーム少な目にする)とか、

ダミーのリンクテーブルをソースにしたフォームを非表示で開いておくことなどで、

業務にはまったく支障の無い速度を保っています。

SQL Serverのようなユーザー別のセキュリティ(ロールを用いたセキュリティ?)が

必要な場合はこのようなことは困難だと思いますので、デメリットとして

「セキュリティが、強固にしてくてもできない」ということが挙げられるかもしれません。

また、mdbの場合はテーブルを分けると、分けたmdb同士のあいだでは

参照整合性が設定できないので、自前で参照整合性のような機能をつくる必要がありました。

分けたテーブル専用のmdbをプログラム専用のmdb側ではいっしょにリンクテーブルとして

使う場合に、参照設定ができなくなってくる、という意味です。

(分けてないmdb内では参照整合性は設定できます。)

ただ、これは勝手に削除できないようにするとか、チェックプログラムを作ればいいだけなので、

さほどネックにはなりませんでしたが・・・。

レプリケーションとかもちゃんとやれないかもしれません。

ACCDB ファイル形式のことは分からないのですみませんが、mdbの場合ですと

そんな感じです。

何かご参考になりますれば・・・。

1 人がこの回答を役に立ったと思いました。

·

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

回答
回答
> 今回は全てAccessデータベースの場合を想定していますが、
> この場合は如何でしょうか。

その場合も、突き詰めれば「仕方なく」やるケースが
ほとんどなのではないでしょうか。

Access データベースには 2GB というファイルサイズ制限があり、
大規模なシステムの構築には不向きであることは今更言うまでもありません。

なので「マスタテーブル群を複数のバックエンドファイルに分散させる」
という発想が出てくるのも、まあ無理からぬことであると思います。

しかし、komugi3333 さんが指摘されている通り、
Access データベースにおけるリレーションシップは
同じデータベース内のローカルテーブル同士で設定するものであり、
リンクテーブルでは出来ません。
それによって、リレーショナルデータベースにおける
重要な機能が使えなくなることも確かです。

「複数のバックエンドを用意する」別のケースとしては、
データ処理の単位を一定の期間(例えば「年度」)ごとに区切って、
その単位ごとにバックエンドファイルを作成する、といったものが
挙げられるでしょうか。

2 ユーザーがこの回答を役に立ったと思いました。

·

この回答が役に立ちましたか?

お役に立てず、申し訳ございません。

素晴らしい! フィードバックをありがとうございました。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。おかげで、サイトの改善に役立ちます。

この回答にどの程度満足ですか?

フィードバックをありがとうございました。

 
 

質問情報


最終更新日: 2024年5月14日 表示数 5,889 適用先: