1

今天再次使用 Hibernate Enum Mapping 后,我想知道是否将其扩展一点是否是个好主意。
解释一下我的想法来自哪里:当然,我们的目标是为我们的应用程序建立一个规范化的数据模型,这通常会导致这样一个事实,即我们会得到很多包含类别、状态或类似数据之类的表。通常这些表只有很少的列(通常只有 PK 和 1 或 2 个内容列)和行。此外,这些表格的内容很少改变,有时甚至从不改变。
如果我们为此使用枚举并通过 Ordinal 或 Integer 将其映射到表(两者都使用 Hibernate,但我会说任何 ORM 都可以做到这一点),那么这两种性能不会更好(更少的连接) 和处理(Java 中的枚举可以非常优雅地使用)?

澄清一下:

表人员
ID:数字
名称:Varchar
RELATIONSHIP_STATUS_ID:数字

表 RELATIONSHIP_STATUS
ID:数字
状态:Varchar

内容人员:
1 | 约翰·多伊 | 1
2 | 玛丽·波平斯 | 2

内容关系状态
1 | 单人
2 | 已婚

现在我将转储状态表,将这两个状态放在一个枚举中,然后按序号将其映射到列。
这会是一件有意义的事情吗?如果这种设计在性能方面会更好,我会特别感兴趣。

4

1 回答 1

1

我在表格和枚举之间进行选择的因素如下:

  • 可能值的列表将来可能会发生变化,我们不想在发生这种情况时重新编译、重新测试和重新部署应用程序:我们使用表格
  • 可能值的列表将来可能会更改,但是表的每个值都在代码本身中用于实现一些业务逻辑(例如 if status == mapped then do something else do something):我们需要更改如果可能的值列表发生变化,无论如何都是逻辑,所以我们使用枚举
  • 列表永远不会改变:我们使用枚举

不过,您仍然可以保留表格,并在代码中使用枚举。当您不知道枚举是如何实现的时,这使得仅查看数据库中的数据时更清楚。0 表示已婚,1 表示单身,一点也不明显。如果您保留该表仅供参考,您至少可以弄清楚这些值的含义,并确保无法在数据中插入 2 或任何其他数字。

另一种方法是使用枚举的名称而不是其序数。它占用了更多空间并且效率更低,但它使数据更加清晰和易于分析。但是,除非您添加检查约束,否则您将失去安全性。

于 2013-02-06T20:57:21.297 回答