Duplicação em FR FONTEDADOS

De Wiki.Softwell

Se por algum motivo as FK entre FR_FORMULARIO e FR_FONTEDADOS não existir pode causar duplicação de fonte de dados durante a importação de formulários, este artigo mostra como corrigir e eliminar definitivamente tal problema.

Detectando

Execute o SELECT abaixo, veja se algum registro é retornado, caso isso aconteça há fonte de dados duplicadas em seu sistema.

select 
  FR_FORMULARIO.FRM_CODIGO, 
  FR_FORMULARIO.FRM_DESCRICAO, 
  COUNT(FR_FONTEDADOS.FRM_CODIGO) AS QTD
from FR_FORMULARIO
inner join FR_FONTEDADOS on (FR_FORMULARIO.FRM_CODIGO = FR_FONTEDADOS.FRM_CODIGO)
group by FR_FORMULARIO.FRM_CODIGO, FR_FORMULARIO.FRM_DESCRICAO
having count(FR_FONTEDADOS.FRM_CODIGO) > 1
order by 3 desc

Corrigindo

Para cada formulário retornado no SELECT anterior execute o SELECT abaixo e remova os regsitros duplicados deixando apenas 1.

select * from FR_FONTEDADOS 
where (FRM_CODIGO = :FRM_CODIGO)

Eliminando o problema

  1. Criação da Foreingn Key - Crie uma FK entre FR_FONTEDADOS.FRM_CODIGO e FR_FORMULARIO.FRM_CODIGO com CASCADE;
    1. DDL PostgreSQL
alter table FR_FONTEDADOS
  add constraint FR_FONTEDADOS_FORMULARIO_FK foreign key (FRM_CODIGO)
      references FR_FORMULARIO (FRM_CODIGO) match simple
      on update no action on delete cascade;
  1. Unique contraint - Crie uma UNIQUE no campo FRM_CODIGO na tabela FR_FONTEDADOS;
    1. DDL PostgreSQL
alter table FR_FONTEDADOS
  add constraint UNQ_FR_FONTEDADOS_FRM_CODIGO unique(FRM_CODIGO);
Ferramentas pessoais