java - 在数据库中保留动态数据以供工作流执行

标签 java sql-server database database-design

我们有一个 Java 应用程序,用于调度和执行多个彼此独立的工作流程。对于每个工作流执行,可以有“n”个与其关联的变量,其值取决于用于该工作流执行的源数据。

因此,假设对于工作流 W1,我们有 10 个与其关联的变量。同样,对于工作流 W2,我们有 8 个变量,对于工作流 W3,我们有 6 个变量。要求是将这些变量信息(针对每个工作流执行)保存在某处,以便在执行后,业务用户可以在应用程序仪表板中跟踪这些变量并搜索该信息。

方法 1:最初,我们考虑创建一个数据库表来跟踪这些变量 - 每个工作流程一个。但这个想法被放弃了,因为它可能导致应用程序中存在大量数据库表(与应用程序中的大量工作流程相同)。此外,在与工作流程关联的 10 个变量中,用户可以决定跟踪 5 个变量或 8 个变量或全部 10 个变量(取决于其需要)。因此,根据用户选择跟踪的变量来不断更改数据库表的列(用于变量跟踪)是很困难的。

方法 2:后来,我们决定使用一个数据库表,其中包含 var1、var2、var 3...直至 var 25 等通用列名称以及工作流 ID、工作流名称等列。对于每个工作流程,我们维护需要跟踪的实际变量名称与 XML 格式的列名称的映射。因此,对于需要跟踪 4 个变量的工作流程,我们将拥有如下 XML:

<variables>
    <variable name="var1">CustomerId</variable>
    <variable name="var2">PolicyNumber</variable>
    <variable name="var3">ReferenceCode</variable>
    <variable name="var4">Type</variable>
</variables>

在运行时,我们将在用于跟踪的数据库表中插入工作流执行变量数据。在仪表板中显示数据时,我们将解析上述 XML,映射数据库表中的数据并显示它。但这种方法看起来有点复杂,而且听起来并不是最好的方法。

我的问题是:方法 2 可以吗?或者有更好的方法来保存此信息吗?在这种情况下有什么应该遵循的建议吗?

最佳答案

我会使用垂直方法创建一个表来保存变量。您的表只需要三列即可处理任意数量的工作流程:

WorkflowID    VariableNumber    VariableValue

WorkflowID 是您为其保存变量的工作流程的唯一 ID。 VariableNumber 是该工作流程使用的变量的序号。

(上面的两列构成表的主键,顺便说一句)

VariableValue 是您在表中保存的该变量/工作流程的值。

因此,如果工作流有 10 个变量,则该 WorkflowID 表中将有 10 行。

关于java - 在数据库中保留动态数据以供工作流执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022375/

相关文章:

java - 绘画程序颜色不保留颜色

sql-server - 如果查询中包含内联接,为什么左联接会变成内联接?

mysql - 更新表时防止读取

sql - 如何在我的 SQL Server 代理作业中创建一个步骤来运行我的 SSIS 包?

sql - 如何在 Informix SE SQL 查询中执行 NVL(或 DECODE 或 CASE)语句?

java - 在 Switch 语句中使用文字而不是变量? java

java - 如何从 Android 中的 Activity 访问默认工具栏?

java - Hadoop JobClient getJob方法执行时间太长

c# - 通过 Entity Framework 将整数数组传递给 T-SQL 存储过程

SQL Server 数据透视查询 - 问题