Database 在记录组内分配唯一ID-从0或1开始

Database 在记录组内分配唯一ID-从0或1开始,database,Database,这可能是一个主观的问题,但我想知道你的看法。它在某种程度上与此相关,但我现在想知道,如果您从0或1的数据库开始。sqlserver中的自动增量ID从1开始,所以我的主观意见是从1开始。另一方面,在大多数编程语言中,索引以0开头 从我的角度来看,代码中的索引与数据库中使用的索引不同,所以为什么还要比较这两种索引呢。只要从你喜欢的开始。无论如何,使用这两种方法都不会有任何问题 代理主键不应依赖于应用程序中的任何业务流程/逻辑。在这种情况下,任何有效的PK值和序列都是好的 从-1开始,只有赔率,只有7

这可能是一个主观的问题,但我想知道你的看法。它在某种程度上与此相关,但我现在想知道,如果您从0或1的数据库开始。sqlserver中的自动增量ID从1开始,所以我的主观意见是从1开始。另一方面,在大多数编程语言中,索引以0开头

从我的角度来看,代码中的索引与数据库中使用的索引不同,所以为什么还要比较这两种索引呢。只要从你喜欢的开始。无论如何,使用这两种方法都不会有任何问题

代理主键不应依赖于应用程序中的任何业务流程/逻辑。在这种情况下,任何有效的PK值和序列都是好的

从-1开始,只有赔率,只有7结束,等等


这并不重要,因为它是人工关键点,因为数字对任何使用都是不透明的,所以选择什么都不重要。您不太可能希望按ID为所有条目编制索引,您应该使用查询来循环遍历所有条目。

我个人认为,数据库中的任何ID都应该从1开始,而不是从0开始。然后,我会将0视为标识的无效值


原因是,在代码中处理数据库中的对象时,通常会将标识值存储在整数类型字段中。在某些编程语言中(我是用C#和Java的经验说话的),未初始化的整数字段的默认值是0,这意味着如果代码中没有设置标识字段,那么您将获得与数据库中标识为0的行相同的值。这会导致歧义,并且可能很难追踪bug。

我们为不适用的项保留索引0,然后让自动增量继续进行,这样我们就可以始终在没有左联接或空值的情况下联接表。 例如,在品牌表中,我们可以有:

  • 0:没有品牌/没有汽车
  • 1:福特
  • 2:丰田
  • 等等
在库存事实表中,我们可以有无品牌的商品,但仍然可以与品牌表完美结合


Thomas

这对于业务逻辑来说并不重要,但当我调试时,SQL Server上的PK看起来像是0,我有一个很大的提示。