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