2017計(jì)算機(jī)等考三級(jí)數(shù)據(jù)庫(kù)輔導(dǎo):使用GUID作為數(shù)據(jù)表主鍵的好處

字號(hào):

  使用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)的差別。

    動(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)行保存