2011-07-08 218 views
0

我實施如下所示的數據庫表:枚舉VS TYPEID休眠

Do_Something 
------------ 
Id 
Name 
Frequency 

頻率只能是1 3的值此刻;立即,每日或每週。所以,我可以實現變頻領域爲String,在這種情況下,Hibernate映射是一個簡單容易的enum。然而,由於代碼實現是容易的,它似乎醜陋和低效與成千上萬的String S上的數據庫端。所以也許我有一個頻率表:

Frequency 
--------- 
Id 
Value 

現在我有Do_Something.Frequency字段作爲該表的外鍵。現在我必須在我的代碼中對預設的frequencyIds進行硬編碼,以查詢Do_Something表更容易處理。我不確定頻率表在Do_Something表內除了多少用途之外。也許將來在其他表中會使用它......

所以現在的問題是,我做頻率的簡單enum在代碼和數據庫爲String,或使頻率enum在代碼中被轉換往返db中的frequency_id或者使代碼中的頻率常量與db中的各種可能的頻率id匹配?

回答

0

所以它歸結爲你是否要保留Frequency標準化與否。有很多關於它的文章,但我的觀點是,除非你期望頻率值經常變化,否則對額外表格的複雜性沒有太大需求。

我會考慮用枚舉一些額外的顯示名稱和完善的字符串名稱。這將使您有機會在不更改數據庫的情況下重新命名錶示名稱。 例如:

IMMEDIATE("Immediate"), 
DAILY("Daily"), 
WEEKLY("Weekly") 

缺點是,如果你決定改變那些枚舉值,你將不得不遷移數據庫。但是從實際的角度來看,你爲什麼要重命名它們?