2012-02-13 45 views
0

我有一個管理應用程序的銷售,庫存和支付從一個Web界面的倉庫整個saler。特別是,當訂單受到影響時,它必須創建一條與每個訂購的產品相對應的產品線。股票可用性的驗證在訂單的時刻完成。驗證訂單

考慮驗證的以下兩種方式訂購:

1)上表訂單行,是做了選擇上的產品veridying是否存在足夠的庫存使用觸發「BEFORE ... ON INSERT」。

2)做一個SELECT ... FROM訂單行JOIN產品,其中定量

我的問題是關於哪種情況,這兩種選擇的每一個更有可能?爲什麼?

感謝

+2

您正在使用哪種RDBMS? – 2012-02-13 01:24:31

+0

@Shark PostgreSQL – unnamed 2012-02-13 01:26:12

+0

只需我兩分錢 - 處理應用程序業務邏輯層中的驗證。 – 2012-02-13 02:31:35

回答

2

你可能想的(書面)第三個選項。

  1. 使用存儲的過程(in PostgreSQL, a function)來下訂單。根據需要,在功能內部使用(可能)儘可能多的serializable transactions

即使您在應用程序層中完成了這項工作,您仍然需要在單個事務中執行所有檢查和提交,可能是在單個可序列化事務中。

根據您的應用程序,序列化事務可能不適合您。一些在線供應商接受訂單時不保證他們有足夠的庫存來填充它。稍後,您可能會收到一封電子郵件,說有些東西已經延期交貨。 (請注意)

General information about PostgreSQL transactions

+0

althoug我認爲你的答案是正確的onde。如果你只能選擇這兩種選擇,我給你選擇的是什麼? – unnamed 2012-02-13 18:19:02

+0

@fegol:他們都沒有完成您似乎想要的工作 - 確保現有庫存用於完成*此訂單而不是其他訂單。 – 2012-02-14 03:00:07