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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a dba.stackexchange
scroll top