2011-07-08 219 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") 

缺点是,如果你决定改变那些枚举值,你将不得不迁移数据库。但是从实际的角度来看,你为什么要重命名它们?