2012-02-13 11 views
0

私は、Webインターフェイスからの倉庫全体のサラに販売、在庫、支払いの管理アプリケーションを持っています。特に、注文が完了したときには、それぞれの数量で注文された各製品に対応する線を作成しなければならない。在庫状況の確認は注文の瞬間に行われます。十分な在庫が存在する場合veridying製品にSELECTを行うテーブルオーダーライン、上の「INSERT ... ON、BEFORE」トリガーを使用して注文の確認

1):オーダーへの検証の、次の2つの方法を考える

。定量

私の質問は、この二つの選択肢の一つ一つが、より可能性が高い状況にあるWHEREオーダーライン... FROM SELECTを行う

2)製品を登録しようか!なぜ?

ありがとうございました

+2

? –

+0

@Shark PostgreSQL – unnamed

+0

ちょうど私の2セント - あなたのアプリケーションのビジネスロジック層での検証を処理します。 –

答えて

2

おそらく(未書き込みの)3番目のオプションが必要です。

  1. ストアドプロシージャ(in PostgreSQL, a function)を使用して注文します。関数内では、必要に応じて(おそらく)多くの場合serializable transactionsを使用します。

アプリケーション層でその作業を行っても、おそらく単一のシリアライズ可能なトランザクションで、すべてのチェックとサブミットを1回のトランザクションで行う必要があります。

アプリケーションによっては、シリアル化可能なトランザクションが機能しない場合があります。いくつかのオンラインベンダーは、注文を受け入れるのに十分な在庫があることを保証することなく注文を受け入れます。後で、何かがバックオーダーされたというメールを受け取るかもしれません。 (ただ、心に留めておくべきもの。)

あなたはRDBMSを使用している

General information about PostgreSQL transactions

+0

althougあなたの答えは正しいと思います。 2つのオプションのうちのどちらかを選択することができた場合、私はあなたが選んだものは何ですか? – unnamed

+0

@fegol:あなたの望むような仕事は、どちらも完了しません。既存の在庫がこの注文を完了するために使用され、他の注文は完了していないことを確認してください。 –