- PR -

運用性を考えたデータベース設計

1
投稿者投稿内容
nilnil
会議室デビュー日: 2008/11/02
投稿数: 1
投稿日時: 2008-11-03 00:02
業務の状態管理を行う論理設計について質問させてください。

ワークフローなど、業務の状態を管理するために状態コードをそのままテーブルで管理
しようとしていたのですが、これだと業務の状態が増えたりしたときなどにプログラム
にハードコードされたものを全て書き直すなど手間が増えてしまいます。

将来的には業務の見直しなどが頻繁に発生すると思われるので、影響範囲が少ないように
論理設計を行いたいのですが、業務の状態をプログラムで対応させたハードコードを
行うことなしに、DBで管理する方法はありますでしょうか。

以上お願いいたします。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2008-11-03 07:39
引用:

nilnilさんの書き込み (2008-11-03 00:02) より:
将来的には業務の見直しなどが頻繁に発生すると思われるので、影響範囲が少ないように
論理設計を行いたいのですが、業務の状態をプログラムで対応させたハードコードを
行うことなしに、DBで管理する方法はありますでしょうか。


たぶん、たとえば今、状態として、
・未承認
・承認済み(可決)
・承認済み(否決)
の3通りがあったときにもうひとつ状態として、
・審議中
のような状態を追加したい、というような感じでしょうか?

状態を管理するだけなら、状態列挙テーブルのようなものを作って、そこに3行あったものを4行にするだけで良いと思います。そしてそのテーブルの全レコードを SELECT してそれをドロップダウンリストボックスの項目として表示・選択させることもできるでしょう。
しかし、状態遷移の管理として、たとえばAという状態からBという状態には遷移できない、といった縛りを付けるためには、そのルールをどこかに持たなければなりません。では、状態遷移可能テーブルのようなものを作って管理する?遷移前状態列と遷移後状態列、という2つの列を持ったテーブルを持てばできるかもしれません。

こういうことをどんどんやっていけば、要求されるようなことはできるかな、と思うのですが、だんだんと複雑になってきます。結局、求めている業務アプリケーションを作ろうとしていたものが、ワークフローツールというミドルウェアを作ることになってしまいます。アプリケーションを作るのは簡単ですが、汎用的なミドルウェアを作るのは技術力が要求されます。
わたなべ
大ベテラン
会議室デビュー日: 2007/12/09
投稿数: 123
お住まい・勤務地: 札幌
投稿日時: 2008-11-03 09:42
>状態コードをそのままテーブルで管理
結局のところ、「状態」を永続化したいというのが目的になるわけで、それをコードなり別の形にしてしまった段階でソースに手が入るのは当然です。
ソースに手が加わらなければ、「状態」をDBに格納することもその逆も出来ませんよね?

勿論、汎用的に使えるような設計を行うこともできますし、そのような要件を満たすフレームワークもあるかと思います。
ただ、使い易いかといわれるとはっきり言って無理がありますし、状態が増えたならば結局のところ新しい処理も必要になるわけで、条件(状態)判断などにハードコーディングは含まれるのは避けられません。

その上でどのように付き合っていくかですが、個人的にはコードと状態に関してはEnumで一元管理してJavaの世界で閉じ、データベースには文字列やコードとして埋め込むようにする事が多いです。
これで無駄にコードテーブルなどを作成する手間も省けますので。

状態のパターンが増えるのではなく、状態そのものが増えていくような状況であるならば、「業務」と「状態1」は別テーブルとしておき、「状態2」が増えたならば「業務」のカラムを追加ではなく「状態2」テーブルを追加、という方式を取るかと思います。

どちらにせよ実際の業務次第や規模によるんで、どうすればいいという回答はできませんが。

>状態列挙テーブル
他シスからも使うならば賛成です。
Javaで閉じるならばなんでもDBで管理はコスパが伴わないと思います。
コード類が多くなると汎用コードテーブルとか作るようになって色々と面倒になりますし・・・。
いつもプロパティファイル+リソースファイルで良いじゃんと思う所です。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-11-03 14:05
unibonさんに一票かな。要件次第かと。

ただし「運用性を考えた」といっても、
「誰」が運用するのかで全然変わるんじゃないかなと思います。

何はともあれ、状態の日本語表記をハードコーディングするのは、
あんまりお勧めできませんね。
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-11-03 15:53
引用:

かつのりさんの書き込み (2008-11-03 14:05) より:
ただし「運用性を考えた」といっても、
「誰」が運用するのかで全然変わるんじゃないかなと思います。



たしかに 誰にとっての問題なのか、考えないと回答はむずかしいですね
それにも関らず回答する人たちもすごいですが!!
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2008-11-03 22:18
jBPM なんていかがでしょう。
Eclipse のプラグインでグラフィカルにワークフローをデザインできます。
ワークフローの実行状態はDBに永続化させ、Webの管理コンソールやAPIから状態を確認することができます。
http://www.jboss.com/products/jbpm
1

スキルアップ/キャリアアップ(JOB@IT)