[英]Create additional Id for unique names in DB?
我想创建一个数据库表,该表应包含许多唯一的名称,其他表可以使用该名称进行引用。
例:
table Country:
Germany
USA
France
我应该将这些名称的字符串标记为@Id
还是引入另一个Long id
?
@Entity
class Country {
//@Id private Long id;
@Id private String name; //eg 'Germany'
}
@Entity
class Address {
@ManyToOne
private Country country;
}
我认为最好用一个Id
来引用名称,以免在Country表的外键中重复这些名称? 还是没关系?
如果新地址没有String country
字段,而只是引用String country
地区,是否有任何优势(因为同一国家/地区名称将在多个地址中重复使用,因此地址表中没有重复的名称条目)。
但是我可以想象一个缺点可能是在保留地址之前我没有国家/地区代码。 因此,我首先必须检查SELECT * FROM Country WHERE name := name
,检查==null
并创建一个新的Country条目,然后创建Address
。
您认为在这里使用String或Long as Id更好吗?
我会使用长号。
我会避免使用该字符串,因为国家/地区名称不是恒定的:已知它们会更改,而且不得不更改所有外键值实在是太糟了。
我会避免使用枚举路线,因为它要求您更改/重建/重新编译以处理新的国家或国家/地区名称更改。
另一种选择是使用所有国家/地区的名称定义一个enum
,并在您的实体中使用它。 保证值是唯一的,并且更简单,并且每个查询都不需要额外的表和多余的联接:
public enum Country {
Germany, USA, France
}
在您的实体中:
@Enumerated(EnumType.STRING)
private Country country;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.