一尘不染

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

sql

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

您好,我在1584号订单上遇到了问题

相对于

你好,我在订购4daz33-d4gerz384867-8234878-14时遇到问题

我希望它们是唯一的(数据库范围内的),因为我有几种不同的“对象”……有订单ID,交货ID和帐单ID,并且由于它们之间没有一对一的关系,我无法猜测ID指的是哪种对象。

使用数据库范围内的唯一ID,我可以立即说出客户所指的对象。我的用户只需在搜索工具中输入一个ID,我便为他保存了额外的单击以进一步完善所需的内容。

我当前的想法是使用具有不同种子1、2、3等且增量值为100的标识列。

但这引起了一些问题:

  • 如果我最终得到100种以上的对象类型,该怎么办?当然可以使用1000或10000,但是缩放效果不好的“气味”

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

  • 更一般而言,还有其他我应该注意的问题吗?

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

  • 使用仅包含标识列和对象类型的“主表”是一个好主意,以便在需要新主意时可以在其中插入一行。我觉得这可能有点矫kill过正,而且恐怕会使我的所有插入请求变得复杂。加上我不查看数据库便无法确定对象类型的事实

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


阅读 140

收藏
2021-05-05

共1个答案

一尘不染

为什么不在所有表上使用身份,但是在您向用户展示身份时,只需在类型上加上一个字符就可以了?例如O1234是订单,D123213是交货等等?这样一来,您不必设计一些疯狂的方案…

2021-05-05