我目前正在设计一个作业执行引擎,遇到了一个问题,我正在寻求一些建议。
我正在将一些流程转换为新系统,需要定义表结构。该过程包括 3 个步骤,每个步骤都有不同的数据(3 个不同的 Web 服务调用)。目前生成一个平面文件,其中包含 RowID 和同一行上所有 3 个步骤的数据。新设计适用于每个流程将直接从表中提取,每个步骤都有自己的表,其中只有每个步骤所需的数据字段。
问题是表之间的行需要链接,以便在步骤 1 成功完成后,我们可以使用正确的数据对步骤 2 进行操作。因为没有任何步骤数据可以保证是唯一的(通过业务规则),所以我需要一个 ID 来将表链接在一起。基本表结构如下:
CREATE TABLE Step1
(
BatchID INT,
BatchRowID ???,
ProcessData
)
CREATE TABLE Step2
(
BatchID INT,
BatchRowID ???,
ProcessData
)
CREATE TABLE History
(
BatchID INT,
BatchRowID ???,
StepID INT,
Result BIT --True False flag
)
我正在寻找一种创建人造多表 IDENTIY 列的解决方案。因此,使用步骤 4 的 Process2 将在 BatchRowID 用于 Process1 的地方有间隙。首先想到的是使用 GUID,但由于表上的集群 PK 将是 BatchID、BatchRowID,我想尽可能避免使用 GUID。这是出于多种原因,1) 集群 GUID 不利于插入(但是通过包含 BatchID 可以稍微克服这一点)和 2) 在基表和添加到表中的每个索引中使用 INT 的额外空间。
如果有人实施了类似的事情,我很想听听您的解决方案。
目前尚未确定主机服务器,因此 SQL 版本可能是 2008 或 2012。
如果版本至少为 2012,请使用 SEQUENCE