Java 对于多个模型,可以使用相同的字符串作为密钥id吗?
如果我有三个模型类别-Java 对于多个模型,可以使用相同的字符串作为密钥id吗?,java,google-app-engine,Java,Google App Engine,如果我有三个模型类别-纳税人、罪犯和患者,我可以使用社会安全编号作为所有三个模型类别的关键ID,还是需要使其在模型类别中唯一 换句话说,如果是这样的话: String socialSecurityNumber = "123-45-6789"; Long now = new Long(System.currentTimeMillis()); // use time to create uniqueness String name = now.toString() + "-" + socialSec
纳税人
、罪犯
和患者
,我可以使用社会安全编号
作为所有三个模型类别的关键ID,还是需要使其在模型类别中唯一
换句话说,如果是这样的话:
String socialSecurityNumber = "123-45-6789";
Long now = new Long(System.currentTimeMillis()); // use time to create uniqueness
String name = now.toString() + "-" + socialSecurityNumber;
Key key = KeyFactory.createKey(getClass().getSimpleName(), name);
或者这个:
String socialSecurityNumber = "123-45-6789";
Key key = KeyFactory.createKey(getClass().getSimpleName(), socialSecurityNumber);
如果它是单独的表,并且您确信它确实是主键(已知罪犯使用别名),那么我看不出有什么真正的问题 请注意,我仍然会使用代理键作为Id,但这是因为我在这方面变得教条,因为我看到很多“有意义的主键”突然发生变化,或者情况发生变化,主键不再是主键
在这些情况下,如果键位于普通字段中(例如,具有唯一索引约束),则有更多的选项来处理发生的任何事情。如果它是单独的表,并且您确定它确实是主键(已知罪犯使用别名),我看不到真正的问题 请注意,我仍然会使用代理键作为Id,但这是因为我在这方面变得教条,因为我看到很多“有意义的主键”突然发生变化,或者情况发生变化,主键不再是主键
在正常字段中有键的情况下(例如,具有唯一索引约束),有更多选项来处理发生的任何事情。是。密钥名称仅构成密钥的一部分,以及应用程序ID、实体种类和任何祖先密钥,因此在不同的模型中使用相同的密钥名称是可以的 但是,请注意,由于以下几个原因,社会保险号码成为较差的主键:
- 首先,你可能不应该从你的用户那里收集信息,他们可能有权拒绝给你
- 并不是每个人都有SSN——特别是那些不是美国公民的人,甚至还有一些美国公民
- 它们不是唯一的:旧的SSN号码可以回收利用。在SSN系统的早期,也发布了一些副本
- 首先,你可能不应该从你的用户那里收集信息,他们可能有权拒绝给你
- 并不是每个人都有SSN——特别是那些不是美国公民的人,甚至还有一些美国公民
- 它们不是唯一的:旧的SSN号码可以回收利用。在SSN系统的早期,也发布了一些副本
是的。密钥名称仅构成密钥的一部分,以及应用程序ID、实体种类和任何祖先密钥,因此在不同的模型中使用相同的密钥名称是可以的 但是,请注意,由于以下几个原因,社会保险号码成为较差的主键: