2014-09-25 28 views
1

我正在使用SQL Server在Omnis中開發企業資源計劃。Db併發性:字段與UPDLOCK

多個用戶將讀取更新刪除ecords,所以我必須處理併發性。

我看到兩種可能的解決方案。而且我已經知道如何處理這兩個問題。 我只是問你哪個更好。

自動解決方案 設置事務模式=自動,所以BEGIN-COMMIT-ROLLBACK事務由軟件自動完成,但根本沒有併發控制。 我可以在每個包含用戶名稱的表格上使用一個字段,以阻止記錄,如果爲空,用戶可以更新記錄,並且我將用戶名稱存儲在字段中,如果字段不爲空,我將顯示用戶阻止該字段。

手動解決方案 設置交易模式=手動,所以我必須處理BEGIN-COMMIT-ROLLBACK,但是我可以使用像UPDLOCK和ROWLOCK之類的東西。

您是否看到使用字段而不是UPDLOCK和ROWLOCK作爲糟糕的做法? 還有其他的親和壞嗎?

謝謝

回答

0

這不是領域vs UPDLOCK。問題應該是商業邏輯是什麼以及你將以何種方式來實現它。

你準確地知道哪些併發問題?應該如何解決?

你的代碼應該做的,如果有兩個或多個併發:

  • 相同數據的插入在同一行
  • 刪除和更新同一行的
  • 更新
  • mb更多這裏

那麼你的回答是在以下問題: 做AUTOMATIC SOLUTION會做什麼你需要在這裏或沒有?或者你必須實現手動控制?

+0

如果USER_A正在更新一行,另一個用戶只能讀取該行。 – simona 2014-09-25 13:02:02

+0

如果他們嘗試更新或刪除同一行,屏幕上的消息應通知USER_A正在更新該記錄。我需要那個。 – simona 2014-09-25 13:03:21

+0

您不應該在屏幕上混淆消息的交易。您不希望交易由用戶輸入控制。最好在應用程序中編寫所有「屏幕鎖定」邏輯。例如:用戶編輯行 - 寫入日誌,第二個用戶無法編輯該行,然後日誌將更新有關行釋放。 – Rodion 2014-09-25 14:54:31