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

