分類: 數據庫開發技術
使用GUID作為數據表主鍵的好處
[@more@]使用GUID作為數據表主鍵的好處
數據表主健通常采用以下三種方式:
1. 自動遞增值。
2. 唯一名稱。這個是使用自己定義的算法來生成一個唯一序列號。
3. GUID(全局唯一標識符)。
GUID與自動遞增值及唯一名稱比較
GUID
在客戶端生成,由GUID的特性決定,通過GUID生成的值可能出現重復的機會幾乎等於零,因此保證在插入表的時候主鍵值唯一。
可以方便處理分布式數據的提交,比如:分店數據向總店提交――直接將該部分數據插入即可。
支持離線數據處理。對本地數據包進行新增記錄時即可將該數據表的關鍵字段值賦值,其處理方法是與在線新增時是一致的。
自動遞增值
在數據庫服務器端生成,由於該值是由數據庫系統內部處理的,亦保證其唯一性,但由於其是在數據庫服務器端生成,因此必須將該值返回客戶端,客戶端通過該值過行其它操作。比如一張單據(主從表)是使用自動遞增值,當插入單據抬頭后,必須將單據抬頭的關鍵字段值返回,再插入單據明細(單據明細是通過單據抬頭關鍵字段進行關聯的)。
不能很好處理分布式數據的提交,比如:分店數據向總店提交――提交數據時必須重新生成該數據表的關鍵字段值,以保證該字段值唯一。
要支持離線數據處理需要進行額外的處理,對本地數據包進行保存記錄(保存到本地)時需要插入一個假設唯一值,在提交離線數據回數據服務器時再重新生成真正的唯一值,並重新進行相關的處理。
唯一名稱
在客戶端生成或在服務端生成,相對於自動遞增值不同的地方就是自己維護生成唯一值的算法及所保存的臨時值,容易造成出錯或其它問題。如果是在客戶端生成唯一值的話,還必須保證所生成的值是唯一的。
不能很好處理分布式數據的提交,比如:分店數據向總店提交――提交數據時必須重新生成(或預先處理)該數據表的關鍵字段值,以保證該字段值唯一
要支持離線數據處理需要進行額外的處理,對本地數據包進行保存記錄(保存到本地)時需要插入一個假設唯一值,在提交離線數據回數據服務器時再重新生成真正的唯一值,並重新進行相關的處理。
實例說明
下面以一個新增單據保存比較GUID與自動遞增值/唯一名稱的差別
動作
|
GUID
|
自動遞增值/唯一名稱
|
單據抬頭
|
|
|
新增 |
單據抬頭關鍵字段值:獲取並填寫 |
單據抬頭關鍵字段值:無 |
保存 |
直接保存 |
首先獲取並填寫關鍵字段值,然后再進行保存 |
返回 |
直接返回 |
返回時必須將關鍵字段值返回 |
單據明細
|
|
|
新增 |
關聯單據抬頭字段值:直接填寫 單據明細關鍵字段值:獲取並填寫 |
關聯單據抬頭字段值:無 單據明細關鍵字段值:無
|
保存 |
直接保存 |
獲取單據抬頭關鍵字段值並填寫到單據明細的關聯單據抬頭字段中; 然后獲取並填寫單據明細關鍵字段值; 再進行保存
|
綜合以上所述,用GUID作為數據表的關鍵字段值是可以減輕關鍵字段相關的操作的,並且是最直接實用的方法。