我想在我的数据库中为我的员工创建唯一标识符,这是为了避免数据库中的重复,即如果员工Barbra存储在DB1中,我不希望她再次在DB2中创建。
我最初的想法是使用员工电话号码创建哈希(例如SHA-1)。 这样,碰撞的可能性极低,价值也是独一无二的。
但是我知道,由于每个UID的大小,缺少排序结构和数据类型(VARCHAR),如此长的UID将花费额外的资源来执行UID上的查询(如SELECT)。
有没有人对如何解决这个问题有任何想法?
答案 0 :(得分:1)
sha1
是一个坏主意,人们生日相同,无论哈希算法本身是否存在潜在的冲突,都可以发生冲突。输入范围有限(生日)。
有几种选择:
每个数据库都可以实现auto_increment_offset
每个数据库都可以实现由(id, db_id)
组成的复合主键,其中db_id
是数据库位置的数字唯一标识符。
你可以使用UUID
,它看起来很昂贵,但是如果没有数据集大小和运行的硬件,现在就假设它还为时过早。 UUID
迅速解决了您的问题。您可以轻松地将UUID
存储到binary(16)
列中,从而为您提供固定的宽度和较小的空间占用空间(例如:select unhex(replace(uuid(), '-', ''))
。