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

标签 sql sql-server database database-design identity

首先,我知道 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/

相关文章:

c# - 使用c#从sql服务器下载文件

c# - 以编程方式在任意位置从头开始创建数据库

java - 使用 java 准备好的语句向数据库添加新记录

SQL查询无条件选择两个表的记录

sql-server - 插入到具有只读主键列的表

java - 内存数据库与线程安全数据结构的建议

java - 房间持久性 : Entities and Pojos must have a usable public constructor

php - 我如何获取我用 PHP 提取的 MySQL 数据并在另一个页面中使用它而不创建数百万个页面

php - 使用 PHP 从 SQL 表构建 html 列表树

sql - 将 SQL 查询转换为 Doctrine2 DQL