我正在实现如下的数据库表:
Do_Something
------------
Id
Name
Frequency
目前,频率只能是3个值中的1个;立即,每天或每周。所以我可以将频率字段实现为String
,在这种情况下,hibernate映射将是一个简单的enum
。然而,就像代码实现一样简单,在数据库方面看起来很丑陋和低效,有成千上万的{{1}} s。所以也许我有一个频率表:
String
现在我将Do_Something.Frequency字段作为此表的外键。现在我必须在我的代码中对预设的frequencyIds进行硬编码,以便更容易地查询Do_Something表。我不确定频率表在Do_Something表中有多少用处。也许将来其他表格会利用它......
所以问题是,我是否将频率设置为代码中的简单Frequency
---------
Id
Value
,将数据库设置为enum
,或者将频率设置为String
代码中的转换为db中的frequency_id或代码中的频率常量与db中各种可能的频率id匹配?
答案 0 :(得分:0)
因此,归结为您是否要保持Frequency
标准化。有很多关于它的文章,但我的看法是,除非你期望频率值的常规变化,否则不需要额外表格的复杂性。
我会考虑枚举一些额外的显示名称和完善的字符串名称。如果需要,这将使您有机会重命名演示文稿名称而无需更改数据库。 例如:
IMMEDIATE("Immediate"),
DAILY("Daily"),
WEEKLY("Weekly")
缺点是,如果您决定更改这些枚举值,则必须迁移数据库。但从实际角度来看,你为什么要重命名呢?