【发布时间】:2013-12-27 21:52:40
【问题描述】:
我经常发现自己为数据库表创建“状态”字段。我将这些设置为 TINYINT(1),因为我通常只需要少数状态值。我在代码中将这些值交叉引用到数组查找中,示例如下:
0 - Pending
1 - Active
2 - Denied
3 - On Hold
这一切都很好,除了我现在正在尝试创建更好的数据库结构并意识到从数据库的角度来看,这些整数值实际上没有任何意义。
现在解决此问题的方法可能是为状态创建单独的表 - 但数据库中可能有多个状态列,并且为每个状态列设置单独的表似乎有点矫枉过正? (我希望每个状态都从零开始 - 所以为所有状态创建一个状态表对我来说并不理想)。
另一种选择是使用 ENUM 数据类型 - 但对此有不同的看法。我看到很多人不建议使用 ENUM 字段。
那该怎么走呢?我绝对需要将这些数据放入自己的表中吗?
【问题讨论】:
-
不,你没有。不要将数据(存储在数据库中)与信息(具有应用意义的数据)混淆。
-
在我看来,1 个由 4-5 列组成的表是唯一性的标识,从 0 开始的顺序为每个“字段”递增 1,然后是活动日期和非活动日期来控制何时显示字段集中的值。当您需要值时,您可以从 fieldname ='NameofYouField' 的状态中选择,以便将其全部保存在一个地方。一个额外的字段来指示它是否可维护(这意味着它有特殊的逻辑驱动值,因此更改 ID、字段或值会破坏系统。
-
Java: Enum vs. Int 的可能重复项
-
int常量有缺陷;请参阅this answer 了解原因。 -
您可以从 1000000 开始表格,而不仅仅是 0,它默认为 0,但您可以随意使用它!
标签: mysql sql database-design