首先,我知道这个问题,但使用 GUID 的建议并不适用于我的情况。
我需要简单的唯一标识符,以便我的用户可以轻松地通过电话交流这些信息:
你好,我的订单号是1584
而不是
你好,我的订单号是4daz33-d4gerz384867-8234878-14
我希望这些标识符在整个数据库中是唯一的,因为我有几种不同类型的“对象”...有订单ID、送货ID和账单ID等等。由于它们之间没有一对一的关系,我无法猜测一个ID是指哪种对象。
有了数据库范围内的唯一标识符,我可以立即知道客户所指的对象是什么。我的用户只需在搜索工具中输入一个ID,我就可以为他保存额外的点击以进一步细化搜索内容。
我的当前想法是使用带有不同种子 (seed) 1、2、3 等和增量值为100的身份列 (identity column)。
然而,这引出了一些问题:
如果我最终获得超过100个对象类型怎么办?我可以使用1000或10000,但这种不良扩展性的做法有点可疑。
种子可能会“丢失”吗(在复制、数据库问题等情况下)?
更一般地说,还有其他问题需要注意吗?
是否可以将非整数(我目前使用 bigint)用作身份列,以便我可以在ID前缀中添加表示对象类型的内容(例如 varchar 列)?
是否使用一个只包含标识列和对象类型的“主表”是一个好主意呢?这样我每当需要新的想法时,就可以在其中插入一行。但我觉得这可能有点过度设计,而且我担心它会复杂化所有的插入请求。另外,我无法在不查看数据库的情况下确定对象类型。
还有其他聪明的方法来解决我的问题吗?