No momento, estou projetando um mecanismo de execução de trabalho e encontrei um problema sobre o qual estou procurando alguns conselhos.
Estou convertendo alguns processos para um novo sistema e preciso definir a estrutura da tabela. O processo consiste em 3 etapas com dados diferentes para cada etapa (3 chamadas de webservice diferentes). Atualmente, um arquivo simples é gerado com um RowID e os dados para todas as 3 etapas na mesma linha. O novo design é para cada processo extrair diretamente das tabelas e cada etapa terá sua própria tabela com apenas os campos de dados necessários para cada etapa.
O problema é que as linhas entre as tabelas precisam ser vinculadas para que, após a conclusão bem-sucedida da etapa 1, possamos agir na etapa 2 com os dados adequados. como nenhum dos dados da etapa será garantido como exclusivo (por meio de regras de negócios), preciso ter um ID para vincular as tabelas. A estrutura básica da tabela será a seguinte:
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
)
Estou procurando uma solução para criar uma coluna IDENTIY falsa de várias tabelas. para que o Process2 que usa uma etapa 4 tenha lacunas onde os BatchRowIDs são usados para o Process1. A primeira coisa que vem à mente é usar um GUID, mas como o PK agrupado nas tabelas será BatchID, BatchRowID, quero tentar evitar um GUID, se puder. Isso ocorre por vários motivos, 1) GUIDs clusterizados são ruins para inserções (no entanto, isso é superado ligeiramente pela inclusão de BatchID) e 2) O espaço adicional usado sobre um INT na tabela base e em todos os índices adicionados à tabela.
Se alguém implementou algo semelhante, adoraria ouvir suas soluções.
Atualmente, o servidor host não foi determinado, portanto a versão do SQL pode ser 2008 ou 2012.
Se a versão for pelo menos 2012 use uma SEQUENCE