Uma estrutura de um banco de dados, diferentemente da estrutura de um software, tende a deteriorar naturalmente com o passar do tempo. Dentre varias causas de deterioracao podemos citar o crescimento progressivo do volume de dados devido ao aumento natural de usuarios que o utilizam e tambem ao seu proprio tempo de uso, tornando um modelo de dados que no inicio era eficiente para solucao proposta em um modelo ineficiente e defasado.Essa deterioracao natural aliada a mudancas em requisitos de negocio exigem modificacoes e refatoracoes tanto no software que os implementa quanto em seus bancos de dados. Entretanto a refatoracao de um banco de dados e mais complexa que a de um software devido aos seguintes motivos: (i) alem de manter comportamento tambem e necessario manter as informacoes (dados) e (ii) acoplamento com diversas origens (outras aplicacoes, frameworks, integracoes, etc).Devido a essas dificuldades a evolucao de uma estrutura de banco de dados torna-se um desafio, ocorrendo assim um fenomeno conhecido como Bad Smells (mal cheiros), da mesma forma que ocorre com o codigo de um software. Em software um code smell (bad smell) e uma categoria comum de problema no codigo fonte que indica a necessidade de refatoracao, e o mesmo ocorre com bancos de dados, onde sao chamados database smells.Abaixo segue uma lista de alguns database smells:Multi-purpose column (coluna com mais de uma funcao)Multi-purpose table (tabela com mais de uma funcao)Redundant data (dados redundantes/repetidos)Tables with many columns (tabelas com muitas colunas)"Smart" columns (colunas "espertas")Lack of constraints (falta de restricoes)Fear of change (medo da mudanca)Dentre os database smells citados acima, devemos ter atencao especial ao "Fear of change", pois pode ser considerado o pior de todos, pois:inibe a inovacao, reduz a efetividade, produz ainda mais bagunca e ao longo do tempo a situacao fica cada vez pior. Lembra do valor "Coragem" do XP (eXtreme Programming)? Mudanca e algo que deve ser considerado natural e ira acontecer em projetos de software, isso e um fato, nao podemos fugir disso, entao precisamos das praticas e ferramentas adequadas para que a mudanca nao seja um entrave na evolucao 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 e apenas uma introducao a este assunto pouco explorado e que tenho como proposta para conclusao de Pos-Graduacao em Tecnologias Aplicadas a Sistemas de Informacoes com Metodos Ageis que estou realizando na http://www.uniritter.edu.br.A ideia e montar uma taxonomia de Database Smells atraves de um catalogo, inclusive sugerindo os Database Refactoring que podem ser utilizados em sua solucao, 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 codigos podem refletir mal cheiros no seu banco de dados. ;-) O passo-a-passo abaixo foi realizado no Ubuntu 10.04LTS com o PostgreSQL 9.1 instalado via ppa do Martin Pitti, mas creio que pode ser executado tranquilamente utilizando a ultima versao LTS do Ubuntu, a 12.04LTS.1) Download dos fontes do PostgreSQL$ wget -c http://ftp.postgresql.org/pub/source/v9.1.3/postgresql-9.1.3.tar.bz22) Precisamos instalar ferramentas necessarias para compilacao