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

