第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就解除了。
以上介紹的三種方法讀者要採用那個方法?