我想创建一个数据库表,该表应包含许多唯一名称,可供其他表引用使用。
示例:
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
引用名称。以便国家/地区表的外键中的名称不会重复?或者这并不重要?
如果新地址没有 String country
有什么好处吗?字段,但只是对国家/地区的引用(因为相同的国家/地区名称将在多个地址中重复使用,因此地址表中不会有重复的名称条目)。
但我可以想象,一个缺点可能是我在保留地址之前没有国家/地区 ID。因此,我首先必须检查 SELECT * FROM Country WHERE name := name
,检查是否 ==null
并创建一个新的国家/地区条目,然后创建 Address
.
您认为这里使用 String 或 Long 作为 Id 更好吗?
最佳答案
我会使用长 ID。
我会避免使用该字符串,因为国家/地区名称不是恒定的:众所周知,它们会发生变化,并且必须更改所有外键值会很糟糕。
我会避免使用枚举路线,因为它需要您更改/重建/重新编译以处理新的国家/地区或国家/地区名称更改。
关于java - 为数据库中的唯一名称创建附加 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21019309/