Sql server 使用单栏表格(标识)?

Sql server 使用单栏表格(标识)?,sql-server,identity-column,Sql Server,Identity Column,拥有单列表(标识列)的目的是什么?有好的用例可用吗 这真的是一种好的做法吗?可能适用于SQL Server

拥有单列表(标识列)的目的是什么?有好的用例可用吗

这真的是一种好的做法吗?

可能适用于SQL Server<2005中的实用程序编号表。 查一查


无论如何,只有标识列的表通常用于克服SQL Server的一些障碍,这些障碍要么难以克服,要么使用其他(即内置)方法会降低速度。

Hmm只有标识列的表,仅此而已,没有其他用途


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

从Oracle数据库迁移时,您需要一种方法来模拟Oracle序列……使用单标识列的表是一种方法。

另一种用法也可能是布尔性质的,因为单列pkey表中的键表示对某些业务逻辑的真正谓词求值

这意味着这个特殊表中的pkey值可以是另一个表的外键。虽然我不确定这是否能在另一张桌子上买到超过一点的东西


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

我认为人们用它来复制Oracle的序列。基本上,他们希望在系统中创建的任何实体都有一个唯一的标识符,所以他们有如下内容:

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等。

该表可能用作企业范围的唯一id生成器,其中所有应用程序(包括遗留应用程序)将依赖于记录系统。

如果要规范化超过第三个正常值,则可能需要消除单个表的多对多关系。这是很难解释没有模式的例子,但我会给它一个镜头

要消除与单个表的多对多关系,需要使用多个表共用的代理PK。(这将为您提供一个多对多联接,而不是每个表一个联接。)在极端情况下,您最终得到的是一个单列表,它只向其他表提供一个FK,其他表可以用作纯FK或PK。可以将其视为多个表从单列父级继承多对多关系,而不是其他任何关系。这样做的好处是,单列表从任何实际查询中删除,因为您可以使用(继承的)FK连接到它所连接的多对多表