2009年3月31日火曜日

Access でデータベースを分割する

1. データベースの分割

Access では、入力フォームとテーブルを、別々のデータベースに分割することができる。

Microsoft Access – Wikipedia によると、

1つの設計技術はAccessのアプリケーションをデータとプログラムに分割することである。1つのデータベースはテーブルとリレーションシップのみを含むべきであり、一方他のデータベースはすべてのプログラム、フォーム、レポート、及びクエリを含み、最初のデータベースのテーブルにリンクする。

自動的に分割する

データベースの分割を行うには、メニューより

  • ツール > データベース ユーティリティ > データベース分割ツール

これにより、データを含むバックエンドのデータベースを自動で作成してくれる。

 

手動で分割

これに対して、

には、手作業でデータベースを分割する方法が説明されている。

簡単に方法をまとめると、

  1. 分割前のデータベースから、テーブルだけを別のデータベースにインポートする。(バックエンド)
  2. 分割前のデータベースから、フォームとクエリを別のデータベースにインポートする。(フロントエンド)
  3. リンクテーブルの機能により、フロントエンドから、バックエンドのデータベースにあるテーブルを指定する。

3399710217_747a9bbee1

データベースを分割するメリットは、次のように述べられている。

データベースを分割する最も一般的な理由は、ネットワーク上で複数のユーザーがデータベースを共有していることです。ネットワーク共有に単純にデータベースを保存している場合は、ユーザーがフォーム、クエリ、マクロ、モジュール、またはレポートを開くと、これらのオブジェクトがネットワークを経由して、データベースを使用する各ユーザーに送信されます。データベースを分割すると、各ユーザーに、フォーム、クエリ、マクロ、モジュール、およびレポートの自分用のコピーを与えられます。このため、ネットワークを経由して送信する必要があるデータは、テーブルのデータのみとなります。

(Access 2002 または Access 2003 で Microsoft Access データベースを手作業で分割する方法 より)

 

2. リンクしたテーブルの更新

バックエンドデータベースに一度リンクした後、フォームを別のデータベースに接続したい場合は、メニューより

  • ツール > データベース ユーティリティ > リンク テーブルマネージャ

において、「リンク先を更新するためのプロンプトを毎回表示する」にチェックを入れ、更新が必要なリンクを選択して OK ボタンを押す。

090331-009

4コメント:

memo77 さんのコメント...

加えて、データベース肥大化・破損への対策として、一時作業用のmdbをローカルドライブに生成し、3つのmdbで運用するのがオススメです。
私は可能であればアプリケーションデータベースもユーザーのローカルドライブに配布していました。

子馬 さんのコメント...

「一時作業用のmdb」とはログのようなものでしょうか?それともバックエンドの DB に保存する前に一時的にローカルに書き込んでおき、ユーザの保存操作によってバックエンドにデータを追加するようにしておくという感じなんでしょうか?

memo77 さんのコメント...

単純に「テーブルを表示して結果を書き込む」だけのアプリケーションなら必要ないと思います。
一定以上の規模になると、最終的な結果を生成する過程で集計したり一時テーブル使ったり、いろいろ必要になるので、そのためのTipsですね。
大規模なデータを扱うときは、複雑なサブクエリ組むよりも、どんどん新しいテーブル作ってINSERTしてやったほうがクライアントのメモリ消費が少ないので高速です。DBもTableも使い捨てていく、SQLServerの#一時テーブルみたいな感じでしょうか。
起動時にCreateDatabaseでTempフォルダにデータベースを作って、複雑な作業はそちらでやってから結果だけ共有データベースに書き込みます。共有データベースのロックを減らすのにも効きます。

子馬 さんのコメント...

なるほど~、ワークテーブルは手元に作るということですかぁ。
Access なら複雑な計算が必要なとき、VB のクラスモジュールを使ってメモリ上にデータを展開して行うよりも、テーブル使った方がお手軽といった感じでしょうか。

データベースのロックを減らすという意味では以下の記事も参考になりました。

- MS-Access2000超入門部屋--見積書を作る http://www.mahoutsukaino.com/ac/ac2000/ac2000/mitsumori/m01.htm

- Microsoft Access フォームでのデータチェック http://www.naboki.net/access/achell/achell_05.html