close

第7個決定   決定資料編輯修改後的回寫更新(UPDATE)方法

        ERP程式在執行運作中資料難免會打錯,打錯了就要編輯修改,改好後再回寫入資料庫。但ERP是多人多工的軟體,有可能同時當下有2(,)正在開啟同樣的程式並編輯同樣的一筆資料,當甲將A欄的資料由1改成5,乙因不知道甲已將A欄位資料修改了,仍然將A欄位的資料改成10

        為避免上述情形發生,ERP軟體裡就設定編輯回寫之前做一下資料比對動作,先比對一下舊有的資料有沒有被別人改變,如有就要顯示錯誤訊息,禁止變更,如沒有才更新這筆資料。

 

        這邊先說明一下所謂的比對方法,比對也就是SQL UPDATE 更新時的查詢條件,如下列方式:

Update TableName

       Set ColumnName = 

 Where  Column1 = 比對值1

      And  Column2 = 比對值2

     And   Column2 = 比對值3

.

.

.

比對的欄位愈多,資料愈不會出錯

 

        目前ERP廠商在回寫資料庫前採用了以下3種事先的比對方法。

        1.Table全欄位比對

        2.Table Key欄位+異動欄位比對(此法衍生另外2種比對方法)

        3.Table LOCK 方法

 

1.Table全欄位比對 (Full Column) 全欄位比對編輯法,

        方法是大部份ERP軟體採用的方式,此方法的優點是簡單方便實用,不會出錯,因此,市售ERP軟體大部份採用此方法。此法的比對方式是將更新的目的TABLE 欄位全部抓來當Update 的查詢比對條件,也就是說這Table 如有100個欄位,100個欄位全拿來當比對條件,只要有一個欄位的資料不一致,資料庫就會回傳更新失敗的錯誤訊息。

 

        此方法的優點是資料百分之百回寫正確,但她的缺點是隨著ERP使用年數增加,資料筆數也愈來愈多,資料一多查詢比對就慢,再加上是使用全欄位去比對的,所以速度更慢。這也是大家常反應的一個問題,ERP 程式用久了,反應速度會變慢的原因之一。

 

2.Table Key欄位+異動欄位比對

        由於全欄位的比對方法速度較慢,因此,為加快比對速度,不得不放棄一些不重要欄位,只抓Table Key 欄位加上資料有被異動欄位這二項來比對,這樣ERP更新儲存的速度加快很多,而那些沒有比對的欄位是Talbe 裡比較不重要的欄位,這些欄位就算被修改過了對資料也不會影響(可有可無)

       

此法衍生了以下2種比對方法

a.Table Key欄位+異動欄位+重要欄位比對

        像訂單裡的訂單數量就非常重要,不能亂修改,因此,在訂單修改儲存時,一定要將訂單數量納入比對欄位中,避免被別人修改而不自知。

 

b.Table Key欄位+異動欄位+建立者欄位

        比對方法就是要排除被別人修改資料而不知的可能性,如在更新資料時再加上建立者欄位的比對,就可確保此資料是自己建立,自己建的資料只有自己才能修改,這樣就可避免電腦資料被別人修改的可能性,確保資料正確性。

 

 

3.Table LOCK 方法

        這是某大ERP軟體公司採用的方法,當使用者在前台程式按下編輯按鈕時,後台這支程式對應的TABLE 即進入編輯鎖定狀態,其他人只能讀取,不能編輯,這樣可確保資料在編輯修改前,不會又被其他人變更了。

        如果使用者在短時間內修改完畢,按下儲存按鈕後,這支Table LOCK 狀態就解除了,但就怕使用者按下編輯按鈕後,還在那邊想要怎樣修改資料,或跑去別的地方忙其他事,這程式Table 就被Lock ,其他人想改也沒辦法改了。

 

        遇到此問題的解法是請DBA去後台下指令看那些TABLE被鎖住了,Kill 這些造成Table Lock 人員的session,一刪除Lock就解除了。

 

以上介紹的三種方法讀者要採用那個方法?

arrow
arrow
    創作者介紹
    創作者 Wilson643089 的頭像
    Wilson643089

    如何自己設計一套ERP

    Wilson643089 發表在 痞客邦 留言(0) 人氣()