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

时间:2017-07-10 22:05:31

标签: java sql-server database database-design

我们有一个Java应用程序,用于安排和执行彼此独立的多个工作流。随着每个工作流程的执行,可能会有' n'与其关联的变量数,其值取决于用于该工作流程执行的源数据。

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

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

方法2 :稍后,我们决定使用一个包含通用列名的数据库表,如var1,var2,var 3 ... up到var 25以及workflowId,workflowName等列。对于每个工作流,我们维护需要使用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是否正常或有更好的方法来保留此信息?在这种情况下是否有任何建议可以遵循?

1 个答案:

答案 0 :(得分:1)

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

WorkflowID    VariableNumber    VariableValue

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

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

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

因此,如果工作流有10个变量,那么表{10}中将有10行。

相关问题