代理键(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或许是你的最佳选择。
SqlServer2008实例25 代理键
最新推荐文章于 2021-07-27 11:10:02 发布