- - PR -
削除処理をするときは?
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-30 14:29
ちょっと勉強してみました。
>作りたい仕様としては、画面にて選択したレコードの削除処理時に >既に誰か他の人が削除していたとしても、エラーとせず正常終了としたい。 >というところです。 これは楽観ロックということになるんですね。 それで、画面で表示したレコードをロックしちゃうのが悲観的ロックですね。 やりたいのは楽観ロックが近いです。 さらに、楽観的同時実行制御をやるかどうかという問題ですが ちょっと悩んでます。 削除しようとしたら既に削除されていた場合に 「既に削除されています」とエラーにするか、 問題ないとみなして、正常終了としてしまうかです。 これも仕様によりけりだと思うのですが、ちょっと再考してみます。 |
|
投稿日時: 2005-08-30 19:11
現在カスタムERPプロダクトの開発に携わっていますが、そのプロダクトでもがるがるさんが書かれたのと同じく、削除がかならずしも DELETE ではないというデザインです。
あまり明るくないので突っ込まれると勉強し直しますが(^.^; 、金融・財務系では特に削除されたデータを DB リカバリではない方法で素早く復元できるように、削除フラグによる論理削除で処理するケースが多いようです。 |
|
投稿日時: 2005-08-30 20:19
論理削除も検討することにしました。
ところで、最初の質問に戻るのですがバッチ等から delete文を発行するときは、事前にfor updateが必要でしょうか? |
|
投稿日時: 2005-08-31 08:23
バッチの仕組みからすると、
1.削除フラグが立ったレコードの結果セットを取得。 2.結果セットをファイルに書き出す。 3.結果セットのレコードを削除。 という流れが自然だと思いますので、where current of で削除するためにもfor updateが必要になるのではないかなと思います。 |
|
投稿日時: 2005-09-01 10:11
どもです。がるです。
んっと。「可能な限りの全てをSQLで片付ける」前提 であればfor updateは必須だと思われます。 逆に「プログラムメインで片付ける」場合、特にfor update は使わなくてもいけるです。 この辺は設計思想の方向性によると思うです。 |
|
投稿日時: 2005-09-01 16:34
結論としては、
観的同時実行制御で、論理削除して、 実際の削除は、バッチからFOR UPDATEをかけてから 削除するようにしました。 たくさんのご意見ありがとうございました。 |