【发布时间】:2017-07-10 22:05:31
【问题描述】:
我们有一个 Java 应用程序,用于调度和执行多个彼此独立的工作流。对于每个工作流执行,可以有“n”个与之关联的变量,其值取决于用于该工作流执行的源数据。
所以,让我们说,对于工作流 W1,我们有 10 个与之关联的变量。同样,对于工作流 W2,我们有 8 个变量,对于工作流 W3,我们有 6 个变量。要求是将这些变量信息(对于每个工作流执行)保存在某处,以便在执行后,业务用户可以在应用程序仪表板中跟踪这些变量并搜索该信息。
方法 1:最初,我们考虑创建一个数据库表来跟踪这些变量 - 每个工作流一个。但是这个想法被放弃了,因为它会导致应用程序中出现大量的数据库表(与应用程序中的许多工作流相同)。此外,在与工作流相关的 10 个变量中,用户可以决定跟踪 5 个变量或 8 个变量或全部 10 个(取决于它想要什么)。因此,很难根据用户选择跟踪的变量不断更改数据库表的列(用于变量跟踪)。
方法 2:后来,我们决定创建一个数据库表,其中包含通用列名,如 var1、var2、var 3...最多 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 是否可行,或者有更好的方法来保存此信息?在这种情况下有什么建议可以遵循吗?
【问题讨论】:
标签: java sql-server database database-design