【问题标题】:Should I store Type in database or should I store it in enum?我应该将类型存储在数据库中还是应该将其存储在枚举中?
【发布时间】:2015-12-03 06:35:36
【问题描述】:

例如,我有一个表名Fruit,每个水​​果都属于一个FruitType。所以我应该将FruitType 存储在数据库中,然后在Fruit 中创建一个外键,或者只是将引用ID 存储到Enum 名称FruitType

更新:
该数据库仅用于一个应用程序。我需要向用户显示fruit 的表格,包括他们的fruit type。我还在水果表格视图中使用类型作为过滤器。

我目前的解决方案:
对于Type,我将永远拥有Enum。但 如果Type 有更多信息,而不仅仅是idnamedescription ...我还将它存储在数据库中,这样我就可以有一个参考视图来显示所有Type 信息。其他明智的只是Enum

【问题讨论】:

  • 如果数据在 DB 中是必需的,并且应该可以在其他应用程序的任何地方使用,那么 DB 就是要走的路。如果没有,请提供更多信息。
  • 你能说得更具体一点吗?根据您的说法,“FruitType”和“枚举名称 FruitType 的引用 id”有什么区别?在我看来,你好像在说同一件事两次
  • @ErwinBolwidt 我的意思是 id 引用到数据库中的 FruitType 记录,或者 id 引用到 java 枚举中的 FruitType
  • @Patrick 我刚刚更新了更多细节。

标签: java database spring hibernate uml


【解决方案1】:

你必须使用数据库来保存FruitType。我将解释为“FruitType”实现枚举的两种方法。我假设你使用的是javax.persistance

enum FruitType {
 YELLOW,GREEN,RED;
}

class Fruit{
 private String name;
 @Enumerated(EnumType.ORDINAL) or @Enumerated(EnumType.STRING)
 private FruitType fruitType;
}

如果您使用 EnumType.STRING,则保存枚举的字符串名称,例如 (YELLOW, RED)。对于 EnumType.ORDINAL 保存像 1,2 这样的顺序。

如果您打算处理(添加、更新和删除)大量 FruitTypes,请使用另一个表来保存数据。

【讨论】:

  • 如果你的水果类型很少,那么不需要 FruitType 表。
  • 所以我应该只选择其中一个EnumDatabase根据处理需要(添加、更新和删除)?
  • 是的,如果您经常更改 FruitType,请使用 table。如果没有,您可以使用枚举。
【解决方案2】:

如果您的类型是静态的,并且您不想在应用工作期间添加它们,那么最好使用枚举。如果确实有很多类型或者可以即时添加/更改类型,最好将它们存储在单独的数据库表中并设置关系。

【讨论】:

  • 谢谢,我会采纳这个有用的答案。
猜你喜欢
  • 2021-06-27
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 2011-01-16
  • 2013-04-06
相关资源
最近更新 更多