我看到很多应用程序使用哈希作为代理键而不是普通整数。我看不出这种设计有什么好的理由。
鉴于大多数 UUID 实现只是散列时间戳,为什么这么多数据库设计人员选择它们作为应用程序范围的代理键?
我看到很多应用程序使用哈希作为代理键而不是普通整数。我看不出这种设计有什么好的理由。
鉴于大多数 UUID 实现只是散列时间戳,为什么这么多数据库设计人员选择它们作为应用程序范围的代理键?
哈希允许在潜在的大数据值之间进行更有效的比较 - 例如在连接中。即HASH(LargeObjectA)=HASH(LargeObjectB)的比较。例如,如果散列值是文档管理系统表中的文档,则比较散列值可能比文档更有效。
大多数 DBMS 对密钥的存储大小都有限制,因此散列可能是实现更大密钥的一种替代解决方法。
散列还可用于通过将数据拆分为均匀分布在数据集中的逻辑分区来优化存储。
如果应用程序的数据后端由多个分布式数据库组成,则使用递增的整数 id 可能会导致重复值。UUID 不仅在应用程序内部而且在应用程序外部都保证是唯一的(这在加入外部数据时可能会有所帮助)。
确实,为系统中的不同数据库使用不同的 id 种子可以解决整数的唯一性问题,但管理这种方法会更加困难。
跨服务器的唯一性?在这种情况下,使用普通整数不会很好。