在数据库表中保留枚举

我有一个具有状态的订单(在代码中是一个枚举)。 问题是如何坚持这一点。 我可以:

  1. 将字符串保留在字段中,然后映射回枚举数据检索。
  2. 将此作为整数保留,然后映射回枚举数据检索。
  3. 为枚举值创建单独的表,并在数据检索上进行连接。

思考?

如果这是一个固定的列表(它似乎是,或者你不应该将它存储为枚举),我不会使用#1。

使用#3而非#2的主要原因是易于使用自助查询实用程序。 但是,我实际上使用了#2的变体:将值存储为整数并映射到数据检索的枚举。 但是,还要创建一个表示枚举类型的表,其值为PK,名称为另一列。 这样,它可以简单,快速,高效地与您的代码一起使用,但也可以通过自助服务查询和其他不使用您的数据访问代码的用途轻松获得逻辑价值。

从数据库/规范化的角度来看,#3是最“合适的”。 实际上,您的状态是链接到订单实体的域实体。

hibernate默认使用整数。 如果你的枚举不会经常发生变化,我认为这不是一个坏主意。

我将使用一个整数映射到另一个表中的值与值。 然后你也可以将枚举映射到相同的值,但是你必须在两个点都更新。

我想这取决于数据的检索位置。 使用#3,您可以在不依赖.NET前端的情况下检索数据。 但是,您的数据库表也可能与枚举代码不同步。

选项#2当然是存储的最有效方式……但存储很便宜。