SQLRemoto:Sincronização implícita de objetos conectados
-
11-12-2019 - |
Pergunta
Estou procurando a melhor maneira de sincronizar relações de chave estrangeira com SQLRemote.Então, tendo, e.essas duas tabelas
CREATE TABLE table1(
id integer not null default autoincrement,
name varchar(40) NOT NULL,
primary key (id)
);
CREATE TABLE table_items(
id integer NOT NULL default autoincrement,
name CHAR(40) NOT NULL,
table_1_id integer NOT NULL,
cl1 bit default 0,
cl2 bit default 0,
FOREIGN KEY ( table_1_id )
REFERENCES table_1( id ),
PRIMARY KEY (id));
Implementando talvez uma fatura com itens de fatura.cl1 e cl2 devem acionar com qual cliente este conjunto de dados será sincronizado.Mas agora estou me perguntando qual é a melhor maneira de sincronizar também os dados correspondentes da tabela_1.
Uma primeira abordagem seria colocar também os campos cl1 e cl2 na tabela_1 e adicioná-los à publicação para que a publicação se pareça um pouco com:
CREATE PUBLICATION sync_cl1 (
TABLE table_1,
TABLE table_items
WHERE cl1 = 1
);
CREATE PUBLICATION sync_cl2 (
TABLE table_1,
TABLE table_items
WHERE cl1 = 2
);
Existe alguma maneira melhor de fazer isso, talvez com verificação de integridade integrada?
Solução
Parece que isso pode ser feito com subconsultas dentro de publicações.
Da documentação:
CREATE PUBLICATION SalesRepData (
TABLE SalesReps
TABLE Customers
SUBSCRIBE BY rep_key
TABLE Contacts
SUBSCRIBE BY (SELECT rep_key
FROM Customers
WHERE Contacts.cust_key = Customers.cust_key )
);
Isso capturaria todos os contatos do cliente do representante de vendas.
Parece ser muito importante que isso precise ser atualizado assim que a conexão for atualizada - por exemplo.um representante de vendas está conquistando novos clientes.Isso precisa ser feito com um gatilho BEFORE para UPDATE/INSERT/DELETE.