当前位置:  开发笔记 > 数据库 > 正文

SQL Server中数据库范围内唯一且简单的标识符

如何解决《SQLServer中数据库范围内唯一且简单的标识符》经验,为你挑选了3个好方法。

首先,我知道这个问题,并且建议(使用GUID)不适用于我的情况.

我想要简单的UID,以便我的用户可以通过电话轻松地传达这些信息:

您好,我的订单1584有问题

而不是

你好,我订单有问题4daz33-d4gerz384867-8234878-14

我希望那些是独特的(数据库范围),因为我有一些不同类型的'对象'...有订单ID,交付ID和账单ID,因为这些之间没有一对一的关系,我无法猜出ID指的是什么类型的对象.

使用数据库范围的唯一ID,我可以立即告诉客户所指的对象.我的用户只需在搜索工具中输入一个ID,我就会向他保存额外的点击以进一步细化所需的内容.

我目前的想法是使用具有不同种子1,2,3等的标识列,并且增量值为100.

这提出了一些问题:

如果我最终获得超过100种对象类型怎么办?我可以使用1000或10000,但不能很好地扩展"气味"

是否有可能种子"丢失"(在复制期间,数据库问题等?)

更一般地说,还有其他我应该注意的问题吗?

是否可以使用非整数(我目前使用bigints)作为标识列,以便我可以在ID前面加上代表对象类型的东西?(例如varchar列)

使用仅包含标识列的"主表"以及对象类型是不是一个好主意,这样我只要需要一个新想法就可以在其中插入一行.我觉得它可能有点矫枉过正,我担心这会使我的所有插入请求变得复杂.此外,我无法在不查看数据库的情况下确定对象类型

还有其他聪明的方法来解决我的问题吗?

Matt Rogish.. 56

为什么不在所有表上使用标识,但是只要你将它呈现给用户,只需添加一个类型的char?例如O1234是订单,D123213是交货等?那样你就不必设计一些疯狂的计划......



1> Matt Rogish..:

为什么不在所有表上使用标识,但是只要你将它呈现给用户,只需添加一个类型的char?例如O1234是订单,D123213是交货等?那样你就不必设计一些疯狂的计划......


正如我们以前所说的"Jinx".我的版本几乎完全相同,除了我建议使用小写字母以避免"O"和"D"被读为"0","B"被读为"8"等等.在这种情况下,我的小写运气好得多(除了为"l"s).
我会建议相同的解决方案,但使用每个实体的代码,如Josh somethinkg所述,如001-1584,其中订单为001

2> MarkusQ..:

在用户界面处理它 - 在向用户报告时在ID号上添加前缀字母(或字母).因此o472将是一个订单,b531将是一个账单,依此类推.当通过电话给出"数字"时,人们可以很方便地混合字母和数字,并且比使用直线数字更准确.



3> tvanfosson..:

您可以使用自动增量列来生成唯一ID.然后有一个计算列,该列获取该列的值,并在其前面加上反映实体类型的固定标识符,例如OR1542和DL1542,分别代表订单#1542和交付#1542.您的前缀可以根据需要进行扩展,并且可以安排格式以帮助在具有相同自动增量值的项目之间进行区分,例如OR011542和DL021542,前缀为OR01和DL02.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有