我正在扩展一个 API,以包括在用户创建记录后检索和更新特定记录的能力。
目前,这些记录是使用自动生成的整数键创建的,例如49300
.
用户需要一种访问特定记录的方法,但我不喜欢将此 ID 公开给最终用户的想法,因为它会泄露有关我的架构的信息,例如我可以假设还有一条 ID 记录493299
。
我正在考虑与自动生成的整数一起使用 GUID,但我担心性能,因为表大小约为 500 万条记录,每年增长 100 万条。
是否有理由担心在检索/更新记录时添加这个大小的表,或 GUID 上的后续 SELECT 查询?
我正在使用 AWS RDS MySQL。
谢谢!
行是使用代理数字键创建的,可以使数据库保持整洁,但是对于每条记录,是否存在对用户有意义的自然键?
例如,用户可能使用电子邮件地址登录您的应用程序。
每条用户记录都会有一个用户从未见过的代理、数字、用户 ID以及他们的电子邮件地址(和其他东西)。连接数据库中的表时,您使用内部代理键。对于来自外部世界的任何事物,您都可以使用对 Them Out There 有意义的 Natural 键:
可能是一个字段不足以做到这一点。记录的自然主键可能是少数字段 - 如果用户访问该记录所需的内容,那么这就是他们必须输入的内容。
正如您非常正确地怀疑的那样,您永远不应该将这些内部标识符泄漏到数据库之外。 始终获取真实世界的价值并将它们映射回其内部等价物。如果不出意外,它会在途中为您提供一定程度的输入数据清理。