ContextualizacaoRefatoracao de codigo (Code Refactoring) e uma disciplina/processo que consiste em melhorar a estrutura interna de um software sem modificar seu comportamento externo, e uma Refatoracao de Banco de Dados (Database Refactoring) parte do mesmo principio, porem alem de manter o comportamento externo tambem deve manter a semantica da informacao que ele mantem/armazena, e por esse motivo e considerada mais dificil.Um outro conceito que posso destacar a respeito de Database Refactoring e:"Mudanca disciplinada na estrutura de uma base de dados que nao altera sua semantica, porem melhora seu projeto e minimiza a introducao de dados inconsistentes"O ponto interessante deste ultimo e o texto "minimiza a introducao de dados inconsistentes", pois esse e o grande objetivo de realizarmos um refactoring na estrutura de um banco de dados, ou seja, melhorar o desing atual para melhorar a consistencia dos dados e tambem a qualidade dos novos dados que serao adicionados ao seu banco de dados.E esta tarefa nao e das mais simples, pois existe um fator preponderante no que diz respeito a dificuldade de execucao deste tipo de refactoring que e o acoplamento, que sera visto logo a seguir.AcoplamentoFigura 1. Baixo AcoplamentoE a medida de dependencia entre dois elementos. Quanto mais acoplados dois elementos estiverem, maior a chance que a mudanca em um implique na mudanca em outro.Figura 2. Alto AcoplamentoSimples assim, quanto mais o seu banco de dados estiver acoplado, ou seja, dependente de diversas aplicacoes externas, mais dificil sera a aplicacao de um refactoring.A Figura 1 demonstra um cenario "Single-Database Application" que e bem simplificado, onde a aplicacao de um refactoring sera mais tranquilo.Com certeza o cenario da Figura 2, o "Multi-Database Application" e o pior caso, pois exige muito cuidado e planejamento para execucao do refactoring, entao veremos a seguir uma sugestao de processo para execucao.Processo de RefatoracaoFigura 3. Processo de Database RefactoringUm processo e um conjunto organizado de atividades com um objetivo em comum. Executar um database refactoring em um cenario "Single-Database Application" ou "Multi-Application Database" requer um processo, por mais simples que seja. A grande diferenca na execucao em ambos cenarios e que no caso do "Multi-Application Database" o periodo de transicao (mais abaixo falaremos) geralmente sera mais longo.E bom sempre ter em mente que um database refactoring, como ja vimos, nao e uma atividade simples entao caso seja identificada a real necessidade de refatorar um banco de dados entao podemos usar o seguinte roteiro (processo) para se guiar:Escolher o refactoring mais apropriado;Depreciar o esquema original;Testar antes, durante e apos;Modificar esquema;Migrar os dados;Modificar codigo externo;Executar testes de regressao;Versionar seu trabalho;Anunciar o refactoring.Figura 4. Regra Geral Processo RefatoracaoNa Figura 4 e demonstrado um pequeno processo descrevendo um fluxo basico para aplicacao de um refactoring.Atente bem para o "Periodo de Transicao", que e a fase mais importante, principalmente para cenarios "Multi-Database Application" (Figura 2), onde voce precisa ter em mente que nao conseguira realizar o refactoring e fazer o deploy em producao de todas as aplicacoes ao mesmo tempo. Na verdade voce nem conseguira alterar todas as aplicacoes ao mesmo tempo, principalmente se voce tiver dependencia de terceiros, entao voce precisara