Suponiendo que: la replicación se hace desde los nodos locales hacia el nodo central pero no entre nodos locales, que los nodos locales y el nodo central tienen el mismo modelo de tablas, y que el nodo central es read-only, tienes dos opciones para identificar los registros que se deben modificar en cada replicación:
1. Utilizar un identificador de nodo local agregando un campo en todas las tablas, por ejemplo:
Código:
--nodo 1
create table Clientes (
idNodo varchar(4) default 'NOD1',
idCliente int identity primary key,
...)
go
--nodo 2
create table Clientes (
idNodo varchar(4) default 'NOD2',
idCliente int identity primary key,
...)
go
--nodo central con pk compuesta
create table Clientes (
idNodo varchar(4),
idCliente int,
...)
go
alter table Clientes add constraint pk_clientes
primary key (idNodo, IdCliente)
go
2. Utilizar un rango de valores, por ejemplo:
Código:
--nodo 1
create table Clientes (
idCliente int identity(1,1) primary key,
check (idCliente between 1 and 1000)
)
go
--nodo 2
create table Clientes (
idCliente int identity(2000,1) primary key,
check (idCliente between 2000 and 3000)
)
go
--nodo central con pk simple
create table Clientes (
idCliente int primary key,
...)
go
Con la opción 1 tienes la ventaja de no preocuparte por los rangos (límite de registros) y la desventaja de que ocupa más espacio, lo opuesto con la opción 2, que ocupa menos espacio y tiene un límite de registros por tabla en cada nodo, pero en ambos casos, agregar un nodo nuevo no afecta la estructura de los programas y permiten implementar la replicación con Transactional Replication, DTS, SSIS o consultas SQL con linked server.
Saludos