日期:2014-01-06  浏览次数:20560 次

使用GUID作为数据表主键的好处
 

数据表主健通常采用以下三种方式:

 

1.         自动递增值。

2.         独一名称。这个是使用本人定义的算法来生成一个独一序列号。

3.         GUID(全局独一标识符)。

 
GUID与自动递增值及独一名称比较GUID
在客户端生成,由GUID的特性决定,通过GUID生成的值可能出现反复的机会几乎等于零,因此保证在插入表的时候主键值独一。

可以方便处理分布式数据的提交,比如:分店数据向总店提交――直接将该部分数据插入即可。

支持离线数据处理。对本地数据包进行新增记录时即可将该数据表的关键字段值赋值,其处理方法是与在线新增时是分歧的。
自动递增值
       在数据库服务器端生成,由于该值是由数据库系统内部处理的,亦保证其独一性,但由于其是在数据库服务器端生成,因此必须将该值前往客户端,客户端通过该值过行其它操作。比如一张单据(主从表)是使用自动递增值,当插入单据抬头后,必须将单据抬头的关键字段值前往,再插入单据明细(单据明细是通过单据抬头关键字段进行关联的)。

不能很好处理分布式数据的提交,比如:分店数据向总店提交――提交数据时必须重重生成该数据表的关键字段值,以保证该字段值独一。

要支持离线数据处理需求进行额外的处理,对本地数据包进行保存记录(保存到本地)时需求插入一个假设独一值,在提交离线数据回数据服务器时再重重生成真正的独一值,并重新进行相关的处理。
独一名称
       在客户端生成或在服务端生成,绝对于自动递增值不同的地方就是本人维护生成独一值的算法及所保存的临时值,容易形成出错或其它问题。如果是在客户端生成独一值的话,还必须保证所生成的值是独一的。

不能很好处理分布式数据的提交,比如:分店数据向总店提交――提交数据时必须重重生成(或事后处理)该数据表的关键字段值,以保证该字段值独一

要支持离线数据处理需求进行额外的处理,对本地数据包进行保存记录(保存到本地)时需求插入一个假设独一值,在提交离线数据回数据服务器时再重重生成真正的独一值,并重新进行相关的处理。

 
实例说明
下面以一个新增单据保存比较GUID与自动递增值/独一名称的差别

动作

GUID

自动递增值/独一名称

单据抬头

 

 

新增

单据抬头关键字段值:获取并填写

单据抬头关键字段值:无

保存

直接保存

首先获取并填写关键字段值,然后再进行保存

前往

直接前往

前往时必须将关键字段值前往

单据明细

 

 

新增

关联单据抬头字段值:直接填写

单据明细关键字段值:获取并填写

关联单据抬头字段值:无

单据明细关键字段值:无

 

保存

直接保存

获取单据抬头关键字段值并填写到单据明细的关联单据抬头字段中;

然后获取并填写单据明细关键字段值;

再进行保存

 

 

综合以上所述,用GUID作为数据表的关键字段值是可以减轻关键字段相关的操作的,并且是最直接实用的方法。