segunda-feira, 10 de junho de 2013

Bad Smells (Mal cheiros) em Bancos de Dados

Uma estrutura de um banco de dados, diferentemente da estrutura de um software, tende a deteriorar naturalmente com o passar do tempo. Dentre várias causas de deterioração podemos citar o crescimento progressivo do volume de dados devido ao aumento natural de usuários que o utilizam e também ao seu próprio tempo de uso, tornando um modelo de dados que no início era eficiente para solução proposta em um modelo ineficiente e defasado.

Essa deterioração natural aliada a mudanças em requisitos de negócio exigem modificações e refatorações tanto no software que os implementa quanto em seus bancos de dados. Entretanto a refatoração de um banco de dados é mais complexa que a de um software devido aos seguintes motivos: (i) além de manter comportamento também é necessário manter as informações (dados) e (ii) acoplamento com diversas origens (outras aplicações, frameworks, integrações, etc).

Devido a essas dificuldades a evolução de uma estrutura de banco de dados torna-se um desafio, ocorrendo assim um fenômeno conhecido como Bad Smells (mal cheiros), da mesma forma que ocorre com o código de um software. Em software um code smell (bad smell) é uma categoria comum de problema no código fonte que indica a necessidade de refatoração, e o mesmo ocorre com bancos de dados, onde são chamados database smells.

Abaixo segue uma lista de alguns database smells:
  • Multi-purpose column (coluna com mais de uma função)
  • Multi-purpose table (tabela com mais de uma função)
  • Redundant data (dados redundantes/repetidos)
  • Tables with many columns (tabelas com muitas colunas)
  • "Smart" columns (colunas "espertas")
  • Lack of constraints (falta de restrições)
  • Fear of change (medo da mudança)
Dentre os database smells citados acima, devemos ter atenção especial ao "Fear of change", pois pode ser considerado o pior de todos, pois:
  • inibe a inovação, 
  • reduz a efetividade, 
  • produz ainda mais bagunça e 
  • ao longo do tempo a situação fica cada vez pior. 
Lembra do valor "Coragem" do XP (eXtreme Programming)? Mudança é algo que deve ser considerado natural e irá acontecer em projetos de software, isso é um fato, não podemos fugir disso, então precisamos das práticas e ferramentas adequadas para que a mudança não seja um entrave na evolução do seu projeto, e sim algo natural e, de certa forma, trivial para sua equipe, e o mesmo deve ocorrer com seu banco de dados.

Esse post é apenas uma introdução a este assunto pouco explorado e que tenho como proposta para conclusão de Pós-Graduação em Tecnologias Aplicadas a Sistemas de Informações com Métodos Ágeis que estou realizando na http://www.uniritter.edu.br.

A idéia é montar uma taxonomia de Database Smells através de um catálogo, inclusive sugerindo os Database Refactoring que podem ser utilizados em sua solução, e futuramente, quem sabe em um futuro trabalho de Mestrado fazer um paralelo dos Database Smells com Code Smells, principalmente se os mal cheiros em códigos podem refletir mal cheiros no seu banco de dados. ;-)

4 comentários:

  1. Muito bom Fabrízio. Ainda não tive a oportunidade de ler o Database Refactoring, mas na época que foi lançado eu estava escrevendo meu tcc.. Ótimo artigo. Abraços

    ResponderExcluir
  2. Bom trabalho, meu caro.

    Quando o tcc estiver pronto, compartilha aí. Gostaria muito de ler.

    Abs,

    ResponderExcluir
  3. O formato do trabalho será de um artigo científico e não de um TCC, porque é para conclusão de uma Pós-Graduação e não Graduação.

    Mas com certeza vou compartilhar quando estiver pronto.

    Obrigado.

    ResponderExcluir
  4. Excelente o post Fabrízio, pela introdução ao assunto, aguardo novos posts.

    ResponderExcluir