簡體   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