簡體   English   中英

參考表或 Java 枚舉哪個更好

[英]Reference Table OR Java Enum which is better

我有一個數據庫實體:worker,基本上有兩種類型的worker,

  1. 全職
  2. 兼職

我確信這個類型列表不會頻繁增長。

ID 姓名 worker_type_id
1 亞當 1
2 米爾恩 2
public class Worker{
 private int id;
 private int name;
 private WorkerType type;
}

對於 Worker_Type 我有兩個選擇:

  1. 創建一個 WorkerType 的 Java ENUM

     public enum WorkerType{ WorkerType(int id, String name){ this.id = id; this.name = name; } int id; String name; }
  2. 創建一個存儲 WorkerType 的引用表。

worker_type_id worker_type_label
1 全職
2 兼職

我傾向於使用“1”,但我看到很多人都贊成“2”。 除了明顯的比較之外,我將如何在代碼中查詢工作表中的所有全職工作人員?

select * from worker join worker_type on worker.worker_type_id = worker_type.id where worker_type = 'Full Time';

我關於上述查詢的問題是我的代碼如何知道字符串“Full Time”? 如果有人錯誤地更改了標簽,則會完全破壞代碼。 我該如何處理?

您的示例代碼:

public enum WorkerType{

 WorkerType(int id, String name){
  this.id = id;
  this.name = name;
 }

 int id;
 String name;
}

......混淆了你的問題。 您正在將您的工人類型與您的實際工人混合在一起。

可能適合您情況的代碼是一個代表每個工人的類。

public record Worker( int id , String name , Classifation classifation ) {}

worker 的類型是一個單獨的枚舉,只有兩個命名對象(一個是全職的,一個是兼職的),並且不需要自定義構造函數。

public enum Classifation { FULL_TIME, PART_TIME }

我會在 worker 類中嵌套 type-of-worker 枚舉。 該嵌套清楚地表明,工作類型枚舉對象主要僅在該類中使用。

public record Worker( int id , String name , Classifation classifation )
{
    public enum Classifation { FULL_TIME, PART_TIME }
}

用法:

Worker adam = new Worker( 1 , "Adam" , Worker.Classifation.FULL_TIME );
Worker milne = new Worker( 2 , "Milne" , Worker.Classifation.PART_TIME );

System.out.println( List.of( adam , milne ) );

跑的時候。

[工人[id=1, name=Adam, classifation=FULL_TIME], Worker[id=2, name=Milne, classifation=PART_TIME]]


你的標題要求:

參考表或 Java 枚舉哪個更好

至少有兩個因素需要考慮:

  • 只有在您編寫 Java 應用程序時才會發生不頻繁的更改嗎?
  • 其他應用程序或 DBA 是否需要對這些數據進行查找?

Java 中的枚舉用於在編譯時自動實例化一組有限的命名對象。 您不能在運行時更改枚舉。

如果在部署您的應用程序時此信息有任何更改的可能性,則枚舉是不合適的。 相反,您需要在運行時動態創建對象集合。

如果其他應用程序或DBA可能需要查找此信息,那么您應該將該信息記錄在數據庫中,而不是在您的 Java 應用程序中。

鑒於你的示例場景,我懷疑你可能要在數據庫中的Java枚舉查找參考表。


另一種方法是使用人類可讀的文本而不是普通整數作為WORKER_TYPE列。 在您的情況下,存儲文本值,例如Full-time & Part-timeFull & Part 在這種情況下,不需要循環參考表。 這種方法假設 (A) 沒有業務需要類型代碼( 12 ),並且 (B) 在描述工人類型時沒有更多的列需要跟蹤。

此外,在更復雜的數據庫中,您可以讓數據庫強制存儲在該列中的一組有限的可能值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM