正如我们所知,在Sql Server中,IDENTITY (n,m)
意味着值将从n
开始,增量值是m
,但我注意到,所有数据库设计器都将标识列设置为IDENTITY(1,1)
,而没有利用来自(-2,147,483,648) to (2,147,483,647)
的int数据类型的所有值,
我计划将所有标识列设为IDENTITY (-2,147,483,648, 1)
(应用程序用户无法看到标识列).
这是个好主意吗?
正如我们所知,在Sql Server中,IDENTITY (n,m)
意味着值将从n
开始,增量值是m
,但我注意到,所有数据库设计器都将标识列设置为IDENTITY(1,1)
,而没有利用来自(-2,147,483,648) to (2,147,483,647)
的int数据类型的所有值,
我计划将所有标识列设为IDENTITY (-2,147,483,648, 1)
(应用程序用户无法看到标识列).
这是个好主意吗?
如果您发现20亿个值还不够,您会发现40亿也不够(在项目的整个生命周期中需要anything个值的两倍于最初设计的值的情况并不少见*),因此您需要采取完全不同的方法(可能是长值,也可能是完全不同的值).
否则,你只会变得陌生和不可读,一无所获.
另外,谁没有数据库,在那里他们知道,例如,312项是具有一些用于测试特定事物的良好特性的项?我知道我脑子里有一些随意的身份证.他们可能会说它"太好了,他们给它起了两次名字",但我总是知道纽约是"657城市,涵盖了我们的大多数测试 case ".这只是个速记,但是-2147482991就不那么方便了.
*在此基础上再加一点.对于某些事情,你可能会说"啊,大约100",然后发现实际上是110,好吧.对于其他人,你会发现实际上是10万,你是按数量级计算出来的.数字越高,这类错误就越常见,因为最终估计数十亿的问题与最终得到几十个答案的问题不同.如果你估计在特定的情况下200是最高限额,你可能应该留出空间,也许再留出几百个.如果你在给定的情况下估计为20亿,你可能应该为更多的几千万亿留出空间.这就是说,我唯一一次看到有人真正从-20亿开始一个id,他们最终有大约3000行.