使用单列表(Identity)?

时间:2009-10-22 14:06:10

标签: sql-server identity-column

具有单列表(标识列)的目的是什么?有没有好的用例?

这真的是一种好习惯吗?

7 个答案:

答案 0 :(得分:5)

我认为人们会用它来复制Oracle的SEQUENCE。基本上他们想要在他们的系统中创建的任何实体都有一个唯一的标识符,所以他们有这样的东西:

CREATE PROCEDURE dbo.GenerateIdentifier
    @Identifier INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT dbo.SingleColumnTable DEFAULT VALUES;

    SET @Identifier = SCOPE_IDENTITY();
END
GO

现在,只要他们想要添加新联系人,客户或订单等,他们首先会调用此过程并获取新标识符。然后,系统中只有一个实体具有标识符= 1或2等

答案 1 :(得分:4)

如果您正常化过去的第3个法线,您可能希望消除多个与多个关系到单个表的关系。如果没有架构示例,这很难解释,但我会试一试......

要消除与单个表的多个多对多关系,需要使用多个表共有的代理PK。 (这为您提供了多个连接而不是每个表的一个连接。)在极端情况下,您最终会得到一个单独的列表,只能为其他表提供FK,它们可以用作纯FK或PK。可以把它看作是从单个列父级继承多对多关系的多个表,但没有别的。关于这一点的好处是单列表从任何实际查询中删除,因为您可以使用(继承的)FK连接到它连接到的多对多表。

答案 2 :(得分:2)

一张带有单个列的表,这是一个标识,仅此而已 - 没有多少用途。

我能想到的一点:如果你需要多个表来拥有标识值,但是不希望这些值相互冲突,那么你可以使用一个只有一列(标识)的集中表,这个用过产生数字。

答案 3 :(得分:2)

从Oracle数据库迁移时,您需要一种模拟Oracle序列的方法......具有单一标识列的表是可行的方法。

答案 4 :(得分:2)

该表可能作为企业级唯一ID生成器,其中所有应用程序(包括旧版)都将依赖于记录系统。

答案 5 :(得分:1)

可以用于SQL Server中的实用程序 Numbers 表< 2005年。 检查一下this blog post

无论如何,只有一个带有标识列的表通常用于克服一些SQL Server障碍,这些障碍要么更难做,要么减慢使用其他(即内置)方法。

答案 6 :(得分:1)

另一种用法也可以是布尔性质,因为单列pkey表中键的存在表明对某些业务逻辑的真实谓词评估。

这意味着此特殊表中的pkey值可能是另一个表的外键。虽然我不确定那是否会在另一张桌子上买一点旗帜。

但这绝对是一个好的做法,作为理货或数字表。