Database design MD5哈希作为人工密钥

Database design MD5哈希作为人工密钥,database-design,md5,relational-database,surrogate-key,Database Design,Md5,Relational Database,Surrogate Key,我看到很多应用程序使用哈希作为代理键,而不是普通整数。我看不出这种设计有什么好的理由 鉴于大多数UUID实现都只是哈希时间戳,为什么那么多数据库设计者选择它们作为应用程序范围的代理密钥?跨服务器的唯一性?在这种情况下,使用纯整数将无法正常工作。如果应用程序的数据后端由多个分布式数据库组成,则使用递增整数ID可能会导致重复值。UUID不仅在应用程序内部而且在应用程序外部都是唯一的(这在与外部数据连接时可能会有所帮助) 的确,为系统中的不同数据库使用不同的id种子将解决整数的唯一性问题,但管理这种方

我看到很多应用程序使用哈希作为代理键,而不是普通整数。我看不出这种设计有什么好的理由


鉴于大多数UUID实现都只是哈希时间戳,为什么那么多数据库设计者选择它们作为应用程序范围的代理密钥?

跨服务器的唯一性?在这种情况下,使用纯整数将无法正常工作。

如果应用程序的数据后端由多个分布式数据库组成,则使用递增整数ID可能会导致重复值。UUID不仅在应用程序内部而且在应用程序外部都是唯一的(这在与外部数据连接时可能会有所帮助)


的确,为系统中的不同数据库使用不同的id种子将解决整数的唯一性问题,但管理这种方法将更加困难。

哈希允许在潜在的大数据值之间进行更有效的比较,例如在连接中。i、 e.哈希(LargeObjectA)=哈希(LargeObjectB)的比较。例如,如果哈希值是文档管理系统表中的文档,那么比较哈希值可能比比较文档更有效

大多数DBMS对密钥的存储大小有限制,因此哈希可能是实现更大密钥的一种替代方法


散列还可以通过将数据分割成均匀分布在数据集中的逻辑分区来优化存储。

这里回答得很好:0xA3提供的链接谈到了真正的人工代理(GUI)。我的解释是,这个线程实际上是关于数据库中使用MD5而不是系统生成的代理项的有意义值的散列。这是我在写我的答案时的假设。@dportas:你的答案中的情况确实是一个很好的例子,说明使用散列是有意义的;现在我正在从SugarCRM fork查看数据库架构,每个表都有UUID样式的键,这种设计的原因让我好奇。@0xA3:+1,谢谢你的指示。@Paulo:是的。你的问题看起来像是在问一般的MD5哈希。哈希恰好用于生成UUID这一事实与这个问题无关。在数据库中使用哈希是一种非常有用的技术,但显然这不是您想要知道的。