Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在系统中创建用户ID的最佳实践是什么?_Sql_Sql Server 2008_Coldfusion_Uniqueidentifier_Coldfusion 2016 - Fatal编程技术网

Sql 在系统中创建用户ID的最佳实践是什么?

Sql 在系统中创建用户ID的最佳实践是什么?,sql,sql-server-2008,coldfusion,uniqueidentifier,coldfusion-2016,Sql,Sql Server 2008,Coldfusion,Uniqueidentifier,Coldfusion 2016,我已经创建了一个新的应用程序。对于这个项目,我构建了一个登录页面。在存储用户信息的表中,我正在寻找一列来保存用户ID。该ID对于系统中的每个用户都应该是唯一的。当我在互联网上四处寻找时,我发现了一些建议,但每个建议都有不同的问题 在我的项目中,我使用ColdFusion 2016和Microsoft SQL 2008。最初,我打算在SQL中使用NEWID()为每个用户生成密钥,但是这个解决方案有一些地方我不喜欢 首先,ID太长了,我不希望我的用户在搜索时输入这么长的值 其次,我了解到这可能会

我已经创建了一个新的应用程序。对于这个项目,我构建了一个登录页面。在存储用户信息的表中,我正在寻找一列来保存用户ID。该ID对于系统中的每个用户都应该是唯一的。当我在互联网上四处寻找时,我发现了一些建议,但每个建议都有不同的问题

在我的项目中,我使用ColdFusion 2016和Microsoft SQL 2008。最初,我打算在SQL中使用
NEWID()
为每个用户生成密钥,但是这个解决方案有一些地方我不喜欢

  • 首先,ID太长了,我不希望我的用户在搜索时输入这么长的值

  • 其次,我了解到这可能会影响查询的性能并降低数据库的速度

然后我考虑使用
自动增量id
。在我看来,这个解决方案对于系统ID来说太简单了,将来可能会引起一些冲突

例如,如果必须重新创建表,我不确定ID是否保持不变。所以我想知道为系统创建唯一ID的最佳实践是什么?我应该使用ColdFusion
CreateUUID()
?在我看来,这又太长了


如果有人知道最佳实践或有任何如何实现的例子,请告诉我。

与大多数其他事情一样,这取决于

一些看似简单的问题很快就会变得相当复杂。而且
INT
甚至
BIGINT
都比
GUID
小得多,但是只有300k左右的记录,这不会对大小产生太大的影响,但是作为主键的
GUID
将导致显著的碎片。这肯定会影响您的索引,如果您需要最大性能,可能会导致查找问题

如果高安全性是一个优先事项,那么使用顺序id的一个缺点是,当(而不是如果)一个坏角色发现您的id方案时,通过您的用户进行计算非常容易
GUID
s解决了这个问题,两个人拥有相同的
GUID
,即使跨多个系统,这种可能性也很小

SQL 2008确实有
newsequentialid()
,这有助于解决
newid()
的一些问题。它将显著减少碎片,但仍需要比
INT
中多得多的存储空间

同样,这是一个需要您考虑的问题,尤其是它将如何影响您的系统。这最终是你必须在你的预期系统中权衡的事情

你应该时刻注意特里普女士的建议

尽管杰夫·阿特伍德有不同的观点。乔·塞尔科也是


谷歌上有大量的链接,可以让你从多个方面了解这场讨论。这真的开始了一场宗教辩论。最后,我认为这里没有人能告诉你什么是“最佳实践”。你必须在你的系统中尝试不同的方法,看看什么最适合你所拥有的

您可以将自动递增id与种子(如34567)或任何适合您需要的种子一起使用,这意味着初始id不会从1开始,而是从种子编号34567开始,即在操作表时保持您的id,SQL提供了诸如ALLOW_IDENTITY_INSERT之类的工具来保存数据integrity@TSion.D.P您能否提供一个如何为id设定种子的示例?Allow_identity_insert我想应该只在操作表时使用?您可以在提供种子编号和增量编号时使用种子id,例如:
创建表Tablea(id int identity 2000,1)
。如果要在插入时关闭标识插入,请尝试此
设置标识\u insert table a off
您不需要使用NEWID()生成的ID进行搜索。您可以使用另一个键进行搜索。这个密钥可以是身份密钥。我使用CreateUUID(ColdFusion)或UUID(MySQL)。然后我知道我的身份证是独一无二的。不可能意外地从错误的表中删除记录,更容易在mysql备份文件中查找,等等。唯一性非常重要。这说明如果使用GUID,良好维护计划的重要性: