您是否有特殊原因不使用电子邮件地址等自然标识符?
目前我使用Java的UUID类来创建唯一标识符,但对于某些对象,它们具有自然键 - 如用户及其电子邮件地址。如果我使用他们的电子邮件地址会更有意义(并使我的代码更清晰),但我想知道你是否有任何特殊原因?
由于
更新
我在这种特殊情况下使用MongoDB。
答案 0 :(得分:3)
自然标识符通常不是常量。例如,在过去的20多年里,我已经多次更新了我的电子邮件地址,但我仍然是同一个人。但 在电子邮件地址列中有索引是合理的;毕竟,人们不会经常改变它们......
答案 1 :(得分:2)
用户不仅更改了电子邮件(这意味着您必须更改所有可能存在数千或数百万的相关子记录,从而导致严重的性能问题),随着人们来去,公司会重复使用这些电子邮件。他们甚至偶尔会被多人共享。对于自然钥匙来说,它们是一个非常差的选择。
自然键需要独特且不变,越短越好。在大多数情况下,在自然键上具有唯一索引的整数键将更好地执行,并且在键更改时更容易维护。如果您正在进行复制,或者如果您需要数据库中性但它通常不会像整数键那样运行,那么GUID键也是可以接受的。
答案 2 :(得分:1)
我能想到的一个原因是自然标识符并不总是不变的。例如,用户可能在某些时候想要更改他们的电子邮件地址。使用它作为关键不一定会排除这一点,但它会使变更更加困难和复杂。