首先,我不确定是否假设电子邮件可以是“资源”的唯一自然 ID,因为这意味着对于每个新资源,您需要创建一个新电子邮件并且资源无法阅读电子邮件,但我知道案例,所以这可能是正确的。
所以对于这个问题:
影响
- 在任何情况下,数字 ID 的查找速度都更快。但是由于字符串也非常快(当使用适当的索引时),这对于大多数应用程序来说可能已经足够了。
- 数字 ID 使用更少的空间(这通常是最少的问题)
- 在涉及异构系统的情况下,通常首选字符串 ID(您可以在示例中看到:服务提供带有字符串 ID 的“资源”)。这样做的一个原因是它更容易调试,例如,用户可能一眼就能看出引用的是什么对象,另一个原因是字符串是几乎所有系统中最常见的分母(尽管存在编码问题^^)。
- 如果您必须在数据库中进行大量手动工作,您可以更快地键入数字,因为字符串往往更长
- 如果您使用自然 ID,则很常见的情况是 id 包含多个列。这使得 SQL 语句更长且更容易出错,就像它使对象关系映射器配置更长且更容易出错一样。
- 您通常有一些唯一标识符(例如电子邮件),但可能会随着时间而改变(人们结婚^^)。在这些情况下,添加一些人工 id 也是很常见的(两者都有)
在您的情况下,除了使用该字符串 id 与该服务进行通信之外,您别无选择(?),因此您至少也必须拥有它。
所以现在我自己的意见是:我认为作为一名开发人员,你的工作量更少,数字 ID 的问题也更少,尽管调试有点困难。作为数据库管理员,如果您只有一列,那么它是 String 还是 Long 都没有关系,因为它不会使连接复杂化。只要字符串是不可变的,例如永远不会改变,你就可以了。如果它可以改变它肯定会让你作为管理员很头疼(愚蠢的开发人员不会在意一点^^)。如果它可能随时间变化,请使用数字 ID。