3

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

这真的是一个好习惯吗?

4

7 回答 7

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

于 2009-10-22T14:13:44.300 回答
4

如果您要对过去的第三个正常进行规范化,您可能希望消除与单个表的多个多对多关系。如果没有模式示例,这很难解释,但我会试一试......

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

于 2009-12-02T17:08:49.750 回答
2

嗯,一个只有一列的表,它是一个标识,仅此而已 - 不能有很多用途。

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

于 2009-10-22T14:11:25.813 回答
2

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

于 2009-10-22T14:11:51.293 回答
2

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

于 2009-10-22T14:20:16.957 回答
1

可能适用于 SQL Server < 2005 中的实用程序Numbers表。请查看此博客文章

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

于 2009-10-22T14:09:30.590 回答
1

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

这意味着这个特殊表中的 pkey 值可能是另一个表的外键。虽然我不确定这是否能比另一张桌子上的小旗子买东西。

但这绝对是一个很好的实践作为一个计数或数字表。

于 2009-10-22T14:13:04.140 回答