繁体   English   中英

为数据库中的唯一名称创建其他ID?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM