Database 使用自然标识符(如电子邮件地址)

Database 使用自然标识符(如电子邮件地址),database,Database,您不使用电子邮件地址这样的自然标识符有什么特殊原因吗 目前,我使用Java的UUID类来创建唯一标识符,但对于某些对象,它们有一个自然密钥,比如用户和电子邮件地址。如果我使用他们的电子邮件地址会更有意义(并使我的代码更简洁),但我想知道是否有什么特别的原因你不应该这样做 谢谢 更新 在这种特殊情况下,我使用MongoDB。我能想到的一个原因是自然标识符并不总是常量。例如,用户可能在某个时候想要更改其电子邮件地址。使用它作为密钥并不一定会排除这种情况,但它会使更改变得更加困难和复杂。我能想到的一个

您不使用电子邮件地址这样的自然标识符有什么特殊原因吗

目前,我使用Java的UUID类来创建唯一标识符,但对于某些对象,它们有一个自然密钥,比如用户和电子邮件地址。如果我使用他们的电子邮件地址会更有意义(并使我的代码更简洁),但我想知道是否有什么特别的原因你不应该这样做

谢谢

更新


在这种特殊情况下,我使用MongoDB。

我能想到的一个原因是自然标识符并不总是常量。例如,用户可能在某个时候想要更改其电子邮件地址。使用它作为密钥并不一定会排除这种情况,但它会使更改变得更加困难和复杂。

我能想到的一个原因是,自然标识符并不总是常量。例如,用户可能在某个时候想要更改其电子邮件地址。使用它作为密钥并不一定会排除这种情况,但它会使更改变得更加困难和复杂。

自然标识符通常不是恒定的。例如,在过去20年左右的时间里,我更新了几次我的电子邮件地址,但我仍然是那个人。不过,在“电子邮件地址”列上设置索引是合理的;毕竟,人们不会经常更改它们…

自然标识符通常不是恒定的。例如,在过去20年左右的时间里,我更新了几次我的电子邮件地址,但我仍然是那个人。不过,在“电子邮件地址”列上设置索引是合理的;毕竟,人们不会经常更改它们…

不仅电子邮件是由用户更改的(这意味着您必须更改所有相关的子记录,这些子记录可能成千上万,导致严重的性能问题),而且随着人们的来来去去,这些子记录还会被公司重新使用。它们甚至偶尔被多人共享。对于自然钥匙来说,它们是一个非常糟糕的选择


自然关键点必须是唯一的和不变的,越短越好。在大多数情况下,在自然密钥上具有唯一索引的整数密钥将执行得更好,并且在密钥更改时更易于维护。如果您正在进行复制或需要与数据库无关,GUID键也可以接受,但它的性能通常不如整数键。

不仅电子邮件是由用户更改的(这意味着您必须更改所有相关的子记录,这些子记录可能有数千或数百万条,从而导致严重的性能问题),公司会在人员来来往往时重新使用它们。它们甚至偶尔会被多人共享。对于自然密钥来说,它们是一个非常糟糕的选择

自然键必须是唯一且不变的,越短越适合加入。在大多数情况下,在自然键上具有唯一索引的整数键将执行得更好,并且在面临键更改时更易于维护。如果您正在进行复制,或者需要与数据库无关,则GUID键也是可以接受的,但它是通用的一般来说,它的性能不如整数键