A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xiaoxiang_04 中级黑马   /  2013-2-26 11:13  /  3167 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在客户端生成,由GUID的特性决定,通过GUID生成的值可能出现重复的机会几乎等于零,因此保证在插入表的时候主键值唯一。



数据表主健通常采用以下三种方式:
1.         自动递增值。
2.         唯一名称。这个是使用自己定义的算法来生成一个唯一序列号。
3.         GUID(全局唯一标识符)。
GUID与自动递增值及唯一名称比较GUID
在客户端生成,由GUID的特性决定,通过GUID生成的值可能出现重复的机会几乎等于零,因此保证在插入表的时候主键值唯一。
可以方便处理分布式数据的提交,比如:分店数据向总店提交――直接将该部分数据插入即可。
支持离线数据处理。对本地数据包进行新增记录时即可将该数据表的关键字段值赋值,其处理方法是与在线新增时是一致的。
自动递增值
       在数据库服务器端生成,由于该值是由数据库系统内部处理的,亦保证其唯一性,但由于其是在数据库服务器端生成,因此必须将该值返回客户端,客户端通过该值过行其它操作。比如一张单据(主从表)是使用自动递增值,当插入单据抬头后,必须将单据抬头的关键字段值返回,再插入单据明细(单据明细是通过单据抬头关键字段进行关联的)。
不能很好处理分布式数据的提交,比如:分店数据向总店提交――提交数据时必须重新生成该数据表的关键字段值,以保证该字段值唯一。
要支持离线数据处理需要进行额外的处理,对本地数据包进行保存记录(保存到本地)时需要插入一个假设唯一值,在提交离线数据回数据服务器时再重新生成真正的唯一值,并重新进行相关的处理。
唯一名称
       在客户端生成或在服务端生成,相对于自动递增值不同的地方就是自己维护生成唯一值的算法及所保存的临时值,容易造成出错或其它问题。如果是在客户端生成唯一值的话,还必须保证所生成的值是唯一的。
不能很好处理分布式数据的提交,比如:分店数据向总店提交――提交数据时必须重新生成(或预先处理)该数据表的关键字段值,以保证该字段值唯一
要支持离线数据处理需要进行额外的处理,对本地数据包进行保存记录(保存到本地)时需要插入一个假设唯一值,在提交离线数据回数据服务器时再重新生成真正的唯一值,并重新进行相关的处理。
实例说明
下面以一个新增单据保存比较GUID与自动递增值/唯一名称的差别
动作
GUID
自动递增值/唯一名称
单据抬头
新增
单据抬头关键字段值:获取并填写
单据抬头关键字段值:无
保存
直接保存
首先获取并填写关键字段值,然后再进行保存
返回
直接返回
返回时必须将关键字段值返回
单据明细
新增
关联单据抬头字段值:直接填写
单据明细关键字段值:获取并填写
关联单据抬头字段值:无
单据明细关键字段值:无
保存
直接保存
获取单据抬头关键字段值并填写到单据明细的关联单据抬头字段中;
然后获取并填写单据明细关键字段值;
再进行保存
综合以上所述,用GUID作为数据表的关键字段值是可以减轻关键字段相关的操作的,并且是最直接实用的方法。



评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

3 个回复

倒序浏览
★GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。
★世界上的任何两台计算机都不会生成重复的 GUID 值。
★需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
★GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。
回复 使用道具 举报
两种常用的主键数据类型:
int(或bigint)+标识列(又称自动增长字段);
uniqueidentifier(又称Guid(业界主流倾向于使用Guid)、UUID)
用标识列实现字段自增可以避免并发等问题,不要开发人员控制自增。用标识列的字段在Insert的时候不用指定主键的值。
Guid算法是一种可以产生唯一标识的高效算法,它使用网吗MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远不会重复,无论是同一个计算机上还是不同的计算机。
SQLServer中生成GUID的函数newid(),.NET中生成Guid的方法:Guid.NewGuid(),返回值是Guid类型。

GUID的优点:效率高、数据导入导出方便
          缺点:占用空间大、不易读

Int自增字段的优点:占用空间小、无需开发人员干预、预读
               缺点:效率低,数据导入导出的时候很痛苦。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
两种常用的主键数据类型:
int(或bigint)+标识列(又称自动增长字段);
uniqueidentifier(又称Guid(业界主流倾向于使用Guid)、UUID)
用标识列实现字段自增可以避免并发等问题,不要开发人员控制自增。用标识列的字段在Insert的时候不用指定主键的值。
Guid算法是一种可以产生唯一标识的高效算法,它使用网吗MAC、地址、纳秒级时间、芯片ID码等算出来的,这样保证每次生成的GUID永远不会重复,无论是同一个计算机上还是不同的计算机。
SQLServer中生成GUID的函数newid(),.NET中生成Guid的方法:Guid.NewGuid(),返回值是Guid类型。

GUID的优点:效率高、数据导入导出方便
          缺点:占用空间大、不易读

Int自增字段的优点:占用空间小、无需开发人员干预、预读
               缺点:效率低,数据导入导出的时候很痛苦。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马