Java 数据库设计-使用Short代替Varchar-用于状态字段
以下方法可用于在DB表中设计与状态相关的字段 方法01:Java 数据库设计-使用Short代替Varchar-用于状态字段,java,database,database-design,database-performance,Java,Database,Database Design,Database Performance,以下方法可用于在DB表中设计与状态相关的字段 方法01: 使用“VARCHAR”作为数据类型 直接状态将存储为“新建”、“正在进行”和“已关闭” 限制: 在表中搜索字符串总是需要更多的时间和资源 更改现有状态文本(例如:“已关闭”为“已完成”)需要完整的表更新 方法02: 创建状态查找表 将状态表用作从属表中的外键 限制: 维护外键关系 需要对应用程序中的所有相关查询使用JOIN 方法03: 对状态字段使用短(或)int 在应用程序接口(EJB)中使用ENUM维护状态文本 这
- 使用“VARCHAR”作为数据类型李>
- 直接状态将存储为“新建”、“正在进行”和“已关闭”
- 在表中搜索字符串总是需要更多的时间和资源
- 更改现有状态文本(例如:“已关闭”为“已完成”)需要完整的表更新
- 创建状态查找表
- 将状态表用作从属表中的外键
- 维护外键关系
- 需要对应用程序中的所有相关查询使用JOIN
- 对状态字段使用短(或)int
- 在应用程序接口(EJB)中使用ENUM维护状态文本
- 需要将整数映射到相关状态(但仍然使用枚举而不是文本是更好的方法)
提前感谢在我们的应用程序中,我们使用了
[enum,VARCHAR(30)]
用于流程类型
及
[String,VARCHAR(1)]
用于过程状态
enum
看起来是一个更好的选择,因为它在Java代码中保存了String
比较。
因此,我相信如果您选择的实现是一个[enum,NUMERIC]
字段,那么它应该一直运行下去 在我们的应用程序中,我们使用了
[enum,VARCHAR(30)]
用于流程类型
及
[String,VARCHAR(1)]
用于过程状态
enum
看起来是一个更好的选择,因为它在Java代码中保存了String
比较。
因此,我相信如果您选择的实现是一个[enum,NUMERIC]
字段,那么它应该一直运行下去 在我们的项目中,我们使用了与您的#3非常相似的方法。在Java端,我们使用了enum
s。在持久化到数据库时,我们使用JPA(EnumType.)将枚举映射到数字。我们将状态文本嵌入到枚举中(参见下面的示例),但它也可以完全分开
优点:
- 与只处理数字或字符串相比,Java代码更不容易出错
- 数据库部分,它的空间和CPU使用效率都很高
- 您可以随意重命名
enum
项(但不能重命名或移动,请参见Cons部分)
缺点:
- 数据库中的数字是枚举的数字。因此,您不能删除或重新排序Java代码中的
enum
项。您只能在列表的末尾添加新的。这取决于你的情况,但对我们来说这不是什么大不了的事。没有理由移动枚举项的顺序。如果我们想删除一个项目,我们只需将其重命名为REMOVED\u STATUS\u XY
,以确保代码中不再使用它
在我们的项目中,我们使用了与您的#3非常相似的方法。在Java端,我们使用了enum
s。在持久化到数据库时,我们使用JPA(EnumType.)将枚举映射到数字。我们将状态文本嵌入到枚举中(参见下面的示例),但它也可以完全分开
优点:
- 与只处理数字或字符串相比,Java代码更不容易出错
- 数据库部分,它的空间和CPU使用效率都很高
- 您可以随意重命名
enum
项(但不能重命名或移动,请参见Cons部分)
缺点:
- 数据库中的数字是枚举的数字。因此,您不能删除或重新排序Java代码中的
enum
项。您只能在列表的末尾添加新的。这取决于你的情况,但对我们来说这不是什么大不了的事。没有理由移动枚举项的顺序。如果我们想删除一个项目,我们只需将其重命名为REMOVED\u STATUS\u XY
,以确保代码中不再使用它
方法02:
创建状态查找表
将状态表用作从属表中的外键
限制:
维护外键关系
需要对应用程序中的所有相关查询使用JOIN
只有当存储为查找表外键的值不可读,或者只有全文才合适时,才需要使用联接。如果使用整数,则始终需要联接。但对于某些表,可以使用人类可读的代码。查询char(1)可能比查询整数快。(如果您只有三个不同的值和1亿行,那么所有这些都不会非常快。)
状态\代码状态
--
N新
P进行中
C关闭
将“关闭”改为“完成”只需要更新一行,但我认为这是一个巧合。
Approach 03 :
Use short (or) int for the status field
Maintain the status text using ENUM in the application interfaces(EJB)
方法03:
对状态字段使用短(或)int
在应用程序接口(EJB)中使用ENUM维护状态文本
我不想维护一个只有整数的数据库
如果要在此处存储一个整数,则该整数必须是存储业务实际感兴趣的值的表的外键。应用程序枚举应该由quer生成
Approach 02 :
Create a status look-up table
Use the status table as a foreign key in the dependent tables
Limitations :
Maintaining the foreign key relationships
Need to use JOIN for all the related queries in application
status_code status
--
N New
P In progress
C Closed
Approach 03 :
Use short (or) int for the status field
Maintain the status text using ENUM in the application interfaces(EJB)