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

