首先,我知道 this question ,并且建议(使用 GUID)不适用于我的情况。
我想要简单的 UID,以便我的用户可以轻松地通过电话传达此信息:
Hello, I've got a problem with order 1584
相对于
hello, I've got a problem with order 4daz33-d4gerz384867-8234878-14
我希望它们是唯一的(在数据库范围内),因为我有几种不同类型的“对象”……有订单 ID、交货 ID 和账单 ID,因为没有一对一的关系在这些之间,我无法猜测 ID 指的是哪种对象。
有了数据库范围内的唯一 ID,我可以立即知道我的客户指的是什么对象。我的用户只需在搜索工具中输入一个 ID,我就为他节省了额外的点击以进一步细化正在寻找的内容。
我目前的想法是使用具有不同种子 1、2、3 等且增量值为 100 的标识列。
虽然这提出了一些问题:
如果我最终得到超过 100 种对象类型怎么办?当然,我可以使用 1000 或 10000,但不能很好地缩放的东西“有味道”
种子是否有可能“丢失”(在复制过程中、数据库问题等?)
更一般地说,还有其他我应该注意的问题吗?
是否可以使用非整数(我目前使用 bigints)作为标识列,以便我可以在 ID 前加上代表对象类型的内容? (例如 varchar 列)
使用一个仅包含标识列(可能还有对象类型)的“主表”是否是个好主意,这样我就可以在需要新想法时在其中插入一行。我觉得这可能有点矫枉过正,而且我担心它会使我所有的插入请求变得复杂。再加上我无法在不查看数据库的情况下确定对象类型这一事实
还有其他聪明的方法可以解决我的问题吗?
最佳答案
为什么不在所有表上使用标识,而是在任何时候将其呈现给用户,只需为该类型添加一个字符?例如O1234 是订单,D123213 是交货等等?这样你就不必设计一些疯狂的方案......
关于sql - SQL Server 中数据库范围的唯一但简单的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/721497/