SqlServer2008实例25 代理键

    代理键(surrogate ['sʌrəɡət] key)也叫人造键(artificial key),可以用作主健,而且没有任何内在的业务/数据意义。代理键和数据独立,用于为表提供唯一的记录定位。代理主键的一个巨大优势在于它们不需要修改。如果使用业务数据来定义键(自然键),比如名和姓,随着时间的推移它们的值可能会不断修改。代理键不需要修改,因为它们只在表的上下文之内有意义。
    下面说明使用IDENTITY属性列和uniqueidentifier数据类型列生成和管理代理键的方法。
    使用IDENTITY列属性,可以为表中的一个列定义一个自动增长的数字值。IDENTITY列是代理主键列中最常用的,因为它们比非数字数据类型的自然键更紧凑。当一个新行插入到有IDENTITY列属性的表中的时候,该列会插入一个唯一的递增值。 IDENTITY列的数据类型可以是int、tinyint、smallint、bigint、decimal或者numeric。一个表只能定义。一个标识列,并且定义的IDENTITY列不能有DEFAULT值或与它相关的规则设置。
    IDENTITY属性列的基本语法如下:
    [IDENTITY[ (seed ,increment)][NOT FOR REPLICATION]]
    IDENTITY属性接受两个值:种子和增量。种子(seed)定义了IDENTITY列的起始数字,而增量(increment)定义了为了得到表中的下一行的值而加到前面的IDENTITY列的值。默认的种子和增量都是1。NOT FOR REPLICATION选项能在复制的时候保存IDENTITY列数据的原始值,保留被外键约束引用的任何值(防止使用IDENTITY列作为主键和外键引用的那些表之间的关系被打破)。
    和IDENTITY列不同,它确保定义的表中数据的唯一性,而uniqueidentifier属性确保一个很高级别的唯一(微软称全球每一个联网的数据库都会是唯一的)。这对于那些从多个数据源合并数据的应用程序来说非常重要,唯一值不能跨表复制。这个唯一ID存储在uniqueidentifier数据类型中,由NEWID系统函数生成。ROWGUIDCOL是列定义中指定的记号,允许我们不仅仅根据列的名,还能根据ROWGUIDCOL来查询。
    尽管使用uniqueidentifier数据类型和NEWID值作为主键更唯一,但是它比基于整数值的IDENTITY列占用的空间更多。如果你只关心值在表中的唯一性,或许应该使用整数的代理键,特别是对于非常大的表米说。然而,如果唯一性是必需的,你也可能在将来合并数据源,那么uniqueidentifier和NEWID或许是你的最佳选择。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值