none
Duvida redundância dados RRS feed

  • Pergunta

  • Boa tarde!!

    Estou desenvolvendo um modulo que ira calcular comissoes de vendas. Para gerar esses dados o sistema tera que consultar varios modulos:

    Credito

    - Vendas

    - Assistencia Tecnica

    - Recebimento Conta

    Débito

    - Devolucao

    Todos esses modulos tem um campo ID_Modulo para determinar o modulo que gerou a informacao. Exemplo uma entrada no contas a receber deve ter o modulo que gerou esse conta e o ID do documento.

    Para gerar a comissao eu preciso de algumas informacoes como Data, Cliente por exemplo.

    Perguntas:

    1) Deve na tabela que vai gerar as comissoes adicionar esses campos que ficariam redundantes?

    2) Criaria uma view com o campo ID_Modulo e ID do documento e outras informacoes comuns com UNION totalizando todos os documentos do sistema, e faria INNER JOIN na tabela de comissao e entao puxaria os dados que preciso dos modulos sem gravar fisiciamente na tabela. Na teoria essa solucao é legal, mas pode haver problema de performance no futuro?

    Obrigado!!

    sexta-feira, 10 de fevereiro de 2012 16:50

Respostas

  • Davi,

    Evitar redundancia de dados faz parte da NF3, e é teoricamente uma boa pratica, porem estamos falando de um ambiente OLTP.

    O evitar ou não a redundancia de dados depende, se essa sua analise for em um ambiente OLTP, eu não colocaria o dados, criaria os indices corretos e chamaria uma procedure para calcular por exemplo, caso fosse necessario guardar um historico disso, eu criaria uma tabela de historico com referencia para os modulos (Linhas) em si.

    Porem, se estivermos falando de um ambiente OLAP, a melhor sugestão, de forma geral claro, talvez seja realmente duplicar os dados, com isso voce ganhara performance, que é um dos pilares principais de um servidor de analise de dados.

    Quanto a view, sim, view´s podem se tornar um problema, voce até consegue criar um indice cluster em uma view, porem depende de muitas coisas e infelizmente não é garantido que havera efetivamente uma melhora alta.

    Eu criaria uma procedure trabalhando com ou variaveis de tabela (Se forem poucos dados) ou tabelas temporarias, que alem de serem bem faceis de mexer, poder criar indices normalmente, ficam na TEMPDB, aonde em muitos casos estão em algum disco mais rapido, ou mais rpeparado em relação a algum RAID.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta DaviSaba sexta-feira, 10 de fevereiro de 2012 17:38
    sexta-feira, 10 de fevereiro de 2012 17:12
    Moderador

Todas as Respostas

  • Davi,

    Evitar redundancia de dados faz parte da NF3, e é teoricamente uma boa pratica, porem estamos falando de um ambiente OLTP.

    O evitar ou não a redundancia de dados depende, se essa sua analise for em um ambiente OLTP, eu não colocaria o dados, criaria os indices corretos e chamaria uma procedure para calcular por exemplo, caso fosse necessario guardar um historico disso, eu criaria uma tabela de historico com referencia para os modulos (Linhas) em si.

    Porem, se estivermos falando de um ambiente OLAP, a melhor sugestão, de forma geral claro, talvez seja realmente duplicar os dados, com isso voce ganhara performance, que é um dos pilares principais de um servidor de analise de dados.

    Quanto a view, sim, view´s podem se tornar um problema, voce até consegue criar um indice cluster em uma view, porem depende de muitas coisas e infelizmente não é garantido que havera efetivamente uma melhora alta.

    Eu criaria uma procedure trabalhando com ou variaveis de tabela (Se forem poucos dados) ou tabelas temporarias, que alem de serem bem faceis de mexer, poder criar indices normalmente, ficam na TEMPDB, aonde em muitos casos estão em algum disco mais rapido, ou mais rpeparado em relação a algum RAID.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta DaviSaba sexta-feira, 10 de fevereiro de 2012 17:38
    sexta-feira, 10 de fevereiro de 2012 17:12
    Moderador
  • Fabrizzio, no caso o ambiente é OLTP. Vou seguir sua orientacao de nao fazer redundancia.

    Obrigado!

    sexta-feira, 10 de fevereiro de 2012 17:38