- - PR -
運用性を考えたデータベース設計
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-11-03 00:02
業務の状態管理を行う論理設計について質問させてください。
ワークフローなど、業務の状態を管理するために状態コードをそのままテーブルで管理 しようとしていたのですが、これだと業務の状態が増えたりしたときなどにプログラム にハードコードされたものを全て書き直すなど手間が増えてしまいます。 将来的には業務の見直しなどが頻繁に発生すると思われるので、影響範囲が少ないように 論理設計を行いたいのですが、業務の状態をプログラムで対応させたハードコードを 行うことなしに、DBで管理する方法はありますでしょうか。 以上お願いいたします。 | ||||
|
投稿日時: 2008-11-03 07:39
たぶん、たとえば今、状態として、 ・未承認 ・承認済み(可決) ・承認済み(否決) の3通りがあったときにもうひとつ状態として、 ・審議中 のような状態を追加したい、というような感じでしょうか? 状態を管理するだけなら、状態列挙テーブルのようなものを作って、そこに3行あったものを4行にするだけで良いと思います。そしてそのテーブルの全レコードを SELECT してそれをドロップダウンリストボックスの項目として表示・選択させることもできるでしょう。 しかし、状態遷移の管理として、たとえばAという状態からBという状態には遷移できない、といった縛りを付けるためには、そのルールをどこかに持たなければなりません。では、状態遷移可能テーブルのようなものを作って管理する?遷移前状態列と遷移後状態列、という2つの列を持ったテーブルを持てばできるかもしれません。 こういうことをどんどんやっていけば、要求されるようなことはできるかな、と思うのですが、だんだんと複雑になってきます。結局、求めている業務アプリケーションを作ろうとしていたものが、ワークフローツールというミドルウェアを作ることになってしまいます。アプリケーションを作るのは簡単ですが、汎用的なミドルウェアを作るのは技術力が要求されます。 | ||||
|
投稿日時: 2008-11-03 09:42
>状態コードをそのままテーブルで管理
結局のところ、「状態」を永続化したいというのが目的になるわけで、それをコードなり別の形にしてしまった段階でソースに手が入るのは当然です。 ソースに手が加わらなければ、「状態」をDBに格納することもその逆も出来ませんよね? 勿論、汎用的に使えるような設計を行うこともできますし、そのような要件を満たすフレームワークもあるかと思います。 ただ、使い易いかといわれるとはっきり言って無理がありますし、状態が増えたならば結局のところ新しい処理も必要になるわけで、条件(状態)判断などにハードコーディングは含まれるのは避けられません。 その上でどのように付き合っていくかですが、個人的にはコードと状態に関してはEnumで一元管理してJavaの世界で閉じ、データベースには文字列やコードとして埋め込むようにする事が多いです。 これで無駄にコードテーブルなどを作成する手間も省けますので。 状態のパターンが増えるのではなく、状態そのものが増えていくような状況であるならば、「業務」と「状態1」は別テーブルとしておき、「状態2」が増えたならば「業務」のカラムを追加ではなく「状態2」テーブルを追加、という方式を取るかと思います。 どちらにせよ実際の業務次第や規模によるんで、どうすればいいという回答はできませんが。 >状態列挙テーブル 他シスからも使うならば賛成です。 Javaで閉じるならばなんでもDBで管理はコスパが伴わないと思います。 コード類が多くなると汎用コードテーブルとか作るようになって色々と面倒になりますし・・・。 いつもプロパティファイル+リソースファイルで良いじゃんと思う所です。 | ||||
|
投稿日時: 2008-11-03 14:05
unibonさんに一票かな。要件次第かと。
ただし「運用性を考えた」といっても、 「誰」が運用するのかで全然変わるんじゃないかなと思います。 何はともあれ、状態の日本語表記をハードコーディングするのは、 あんまりお勧めできませんね。 | ||||
|
投稿日時: 2008-11-03 15:53
たしかに 誰にとっての問題なのか、考えないと回答はむずかしいですね それにも関らず回答する人たちもすごいですが!! | ||||
|
投稿日時: 2008-11-03 22:18
jBPM なんていかがでしょう。
Eclipse のプラグインでグラフィカルにワークフローをデザインできます。 ワークフローの実行状態はDBに永続化させ、Webの管理コンソールやAPIから状態を確認することができます。 http://www.jboss.com/products/jbpm |
1