私は今管理会計システム運用の仕事をしています。私の担当システムはjavaで構築されているのですが、システム構築する際、毎回議題に上るのが「処理をjava側に寄せるか、SQL(DBMS)側に寄せるか」ということです。もちろんケースバーケースなので絶対的な答えは無いでしょうが、管理会計システムに限って言えば、私はSQLに寄せるべきと考えることが多いです。その理由を書きましょう。

SQLに寄せると処理時間を読みやすい


SQL / mwin

以前の記事で書きましたが、一般に、管理会計システムは処理時間が多くかかります。そのため、管理会計システム開発では処理時間がどのくらいになるのか常におびえながらプロジェクトを進めることが多いです。逆に言えば、処理時間は最初に見積もっておくべきなのです。

なるべく早く。既に付き合いのあるお客さんなら、何とか情報を仕入れてプロジェクト契約前に処理時間の見積もりをしておきたいですね。新規のお客さんの場合でも、プロジェクト開始直後には、最終的に作成する帳票の大まかなイメージを確定して、そこからテーブル設計を行い、レコード数を見積もりましょう。

基本的に、最大のレコード数は

勘定科目数
* 収支管理単位数
* 組織数
* 事業種別数
* 時間的メッシュ(日次データを扱うなら365日/年、月次データで良いなら12ヶ月/年)

みたいな計算で求まります。上記にも出した以前の記事でサイゼリアの管理会計システムにおけるレコード数を妄想してみましたが、その例だと1年間で最大384億レコード・54テラバイトのデータが発生します。これに対して処理時間を見積もるわけですが、この処理時間の見積もりについてはSQLを駆使するやり方の方が簡単でしょう。SQLでの処理の見積もりなら、SQL文そのものも1週間くらいあれば書けるでしょうし、処理時間の短縮も、テーブルに対するindexの張り方はそれほど悩まないでしょう。そして、一般にDBMSにはレスポンス向上のためのさまざまな仕掛けが組まれています。java等の言語でコーディングしてあれこれ考えるよりも、「遅くともこのぐらいの処理時間でできるはず」という見積もりはSQL文主体の処理の方が簡単だと思います。

そんなわけで、私としては、管理会計システム開発のプロジェクトが始まったら、速攻でSQL文主体のプロトタイプを作成し、処理時間の見積もりを行うことをお勧めします。


売掛金を即現金化する(ファクタリング)