六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 6817|回复: 0

SQL SERVER 数据库表主键类型

[复制链接]
 楼主| 发表于 2013-4-28 17:06:25 | 显示全部楼层 |阅读模式
本文赞同:
①主键是必需的
②主键应和业务无关
③主键是单列的
④自记录插入后,主键不会被更新
===========================================================
1.自动增长的数值类型
  即新建一个ID字段,自动增长。
  优点:数字型,占用空间小,易排序。数据库自动编号,速度快。增量增长,聚集型主键按顺序存放,有利于检索非常。
  缺点:手动要插入指定ID的记录时会显得麻烦,尤其是当系统与其他系统集成时,需要数据导入时,很难保证原系统的ID不发生主键冲突。
2.控制增长的字符串类型
  是第一种方案的改进版。为方便以后的数据导入,可以用字符串类型存储纯数字的主键(纯数字好处不啰嗦)。用一张表维护最后插入记录的主键,解决max()带来的性能问题,并用存储过程为新插入的记录生成主键。
3.GUID
  优势:具有唯一性,在任何情况下,可以产生全球唯一的值,方便数据导入。
  不足:结构过长且无序,不易记忆,索引的空间大,所以检索时间长。GUID的产生不是以一定的次序产生,对于按主键物理索引的数据库来说,当新的GUID进来时,它会把所有GUID重新排序,这将影响数据插入效率。

  1. insert into t_table (id) values (newid())

  2. newid() 可以得到 guid
  3. id这个字段类型必须是 uniqueidentifier  类型的。
复制代码
在SQL Server 2005中有一个数据类型uniqueidentifier,这个数据类型就是用于支持GUID(Global Unique Identifier)。这个类型的值是一个长度为32的定长字符串,比如”00000002-3378-a87f-92pj-2t68i97o34ms”。GUID可以保证该ID的全局唯一性,方便数据库整合,以免因为数据互相Copy以及转化过程中因为ID相同引起不必要的冲突。在C#中有Guid类,方便我们生成和操作GUID。比如Guid.NewGuid.ToString()就可以得到一个新的GUID字符串。其实,GUID本质上可以认为是时间戳的MD5 Hash。在Lotus中,每个Document都有一个全局的唯一标识称作UNID(unique identifier)。这个UNID和上述GUID有着相同的机制。笔者在最近的项目中就完成了Lotus文档数据库向SQL Server 关系数据库转化的工作。涉及了比较多的GUID和UNID的操作。在SQL Server 2005中,uniquidentifier类型值总是可以用casting转化为定长(32)的varchar类型。

本文参考:http://www.cnblogs.com/xianbing/archive/2012/02/19/2358105.html
http://blog.chinaunix.net/u/6776/showart_502529.html
http://zhidao.baidu.com/question/397533067.html



该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表