1. Database Refactoring com PostgreSQL
Fabrízio de Royes Mello
fabrizio@dbseller.com.br
www.dbseller.com.br
2. Apresentação
Fabrízio de Royes Mello (fabrizio@dbseller.com.br)
Gerente de Tecnologia
Bacharel em Informática pela URCAMP
Experiência Profissional
5 anos como Gerente de CPD Prefeitura
DBSeller desde 2005
Desenvolvimento de Software desde 1993
Experiência em PostgreSQL desde 1999
Experiência em PHP desde 2002
www.dbseller.com.br
4. Agenda
Objetivo
Problema e Solução (Abordagem Tradicional e Ágil)
Refactoring e Database Refactoring
Dificuldades na Aplicação!
Processo de Database Refactoring
Catálogo de Refactorings (60 + 5)
Colocando a Mão na Massa!
Considerações Finais
www.dbseller.com.br
5. Objetivo
Apresentar os conceitos de Refactoring bem
como sua aplicação em Banco de Dados, o
chamado Database Refactoring, abordando o
Catálogo de Refactorings com suas definições,
categorias e exemplos práticos.
www.dbseller.com.br
6. Agenda
Objetivo
Problema e Solução (Abordagem Tradicional e Ágil)
Refactoring e Database Refactoring
Dificuldades na Aplicação!
Processo de Database Refactoring
Catálogo de Refactorings (60 + 5)
Colocando a Mão na Massa!
Considerações Finais
www.dbseller.com.br
11. Agenda
Objetivo
Problema e Solução (Abordagem Tradicional e Ágil)
Refactoring e Database Refactoring
Dificuldades na Aplicação
Processo de Database Refactoring
Catálogo de Refactorings (60 + 5)
Colocando a Mão na Massa!
Considerações Finais
www.dbseller.com.br
12. Refactoring
”Processo de alteração de um sistema de
software de modo que o comportamento
externo do código não mude, mas que sua
estrutura interna seja melhorada.”
”É uma forma disciplinada de aperfeiçoar código
que minimiza a introdução de falhas.”
(Martin Fowler 2004)
www.dbseller.com.br
13. Database Refactoring
”É quando uma simples mudança no esquema
de uma base de dados melhora a sua
concepção (projeto), embora mantendo
simultaneamente a sua semântica.”
(Scott W. Ambler 2006)
www.dbseller.com.br
14. Database Refactoring
Mudança disciplinada na estrutura de uma base
de dados que não modifica sua semântica,
porém melhora seu projeto e minimiza a
introdução de dados inconsistentes.
(Fabrízio de Royes Mello 2009)
www.dbseller.com.br
15. Agenda
Objetivo
Problema e Solução (Abordagem Tradicional e Ágil)
Refactoring e Database Refactoring
Dificuldades na Aplicação
Processo de Database Refactoring
Catálogo de Refactorings (60 + 5)
Colocando a Mão na Massa!
Considerações Finais
www.dbseller.com.br
16. Dificuldades na aplicação
Database Refactoring é mais difícil que Code
Refactorings porque além de manter o
comportamento também deve manter as
informações
Acoplamento [1] pode ser um complicador
dependendo da sua arquitetura de banco de
dados
[1] Acoplamento é a medida de dependência entre dois
elementos. Quanto mais acoplados dois elementos
estiverem, maior a chance que a mudança em um implique
na mudança do outro.
www.dbseller.com.br
17. Single-Database Application
Sua
Melhor Caso
Aplicação Baixo Acoplamento
Seu
Banco de Dados
www.dbseller.com.br
18. Multi-Application Database
Outras Aplicações
Sua Outras Aplicações
que Você Conhece Aplicação que Você NÃO
Conhece
Frameworks de Seu Outros
Persistência Banco de Banco de
Dados Dados
Arquivos Códigos
de Dados de Testes
Pior Caso
Alto Acoplamento
www.dbseller.com.br
19. Agenda
Objetivo
Problema e Solução (Abordagem Tradicional e Ágil)
Refactoring e Database Refactoring
Dificuldades na Aplicação
Processo de Database Refactoring
Catálogo de Refactorings (60 + 5)
Colocando a Mão na Massa!
Considerações Finais
www.dbseller.com.br
20. Processo de Refatoração
Existe necessidade de
refatorar?
Escolher o refactoring mais
apropriado
Depreciar o esquema original
Testar antes, durante e após
Modificar o esquema
Migrar os dados
Modificar código externo
Executar testes de regressão
Versionar seu trabalho
Anunciar o refactoring
www.dbseller.com.br
21. Processo de Refatoração
Regra Geral
Período de Transição
Esquema (Backups, Criação de Campos, Esquema
Original Cópias de Dados, Resultante
Remoção campos antigos, etc)
Aplicação do Refactoring Apropriado
Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com www.dbseller.com.br
22. Agenda
Objetivo
Problema e Solução (Abordagem Tradicional e Ágil)
Refactoring e Database Refactoring
Dificuldades na Aplicação
Processo de Database Refactoring
Catálogo de Refactorings (60 + 5)
Colocando a Mão na Massa!
Considerações Finais
www.dbseller.com.br
23. Structural (17)
Drop Column
Drop Table São mudanças na estrutura
Drop View do banco de dados
Introduce Calculated Column (tabelas, colunas, visões)
Introduce Surrogate Key
Merge Columns
Merge Tables
Move Column
Rename Column
Rename Table
Rename View
Replace LOB With Table
Replace Column
Replace One-To-Many With Associative Table
Replace Surrogate Key With Natural Key
Split Column
Split Table
www.dbseller.com.br
24. Data Quality (13)
Add Lookup Table
Apply Standard Codes São mudanças que melhoram
Apply Standard Type a qualidade das informações
Consolidate Key Strategy contidas em um banco de dados
Drop Column Constraint
Drop Default Value
Drop Non-Nullable
Introduce Column Constraint
Introduce Common Format
Introduce Default Value
Make Column Non-Nullable
Move Data
Replace Type Code With Property Flags
www.dbseller.com.br
25. Referential Integrity (7)
Add Foreign Key Constraint
Add Trigger For Calculated Column
Drop Foreign Key Constraint
Introduce Cascading Delete
Introduce Hard Delete
Introduce Soft Delete
Introduce Trigger For History
São mudanças que asseguram que
uma linha referenciada exista em
outra e/ou assegura que uma linha
que não é mais necessária seja
removida apropriadamente
www.dbseller.com.br
26. Architectural (12)
Add CRUD Methods São mudanças que melhoram
Add Mirror Table a maneira que programas
Add Read Method externos interagem com
Encapsulate Table With View a base de dados
Introduce Calculation Method
Introduce Index
Introduce Read-Only Table
Migrate Method From Database
Migrate Method To Database
Replace Method(s) With View
Replace View With Method(s)
Use Official Data Source
www.dbseller.com.br
27. Method (11)
Interface Changing Refactorings
Add Parameter
Parameterize Method
Remove Parameter
Rename Method
Reorder Parameters
Replace Parameter with Explicit Methods
Internal Refactorings
Consolidate Conditional Expression
Decompose Conditional
Extract Method
Introduce Variable
Remove Control Flag São mudanças que melhoram
a qualidade de uma
Procedure ou Função
www.dbseller.com.br
28. Transformations (5)
Insert Data Mudanças que alteram a semântica
Introduce New Column do esquema do banco pela adição
Introduce New Table de novas funcionalidades
Introduce New View
Update Data
www.dbseller.com.br
29. Agenda
Objetivo
Problema e Solução (Abordagem Tradicional e Ágil)
Refactoring e Database Refactoring
Dificuldades na Aplicação
Processo de Database Refactoring
Catálogo de Refactorings (60 + 5)
Colocando a Mão na Massa!
Considerações Finais
www.dbseller.com.br
31. Agenda
Objetivo
Problema e Solução (Abordagem Tradicional e Ágil)
Refactoring e Database Refactoring
Dificuldades na Aplicação
Processo de Database Refactoring
Catálogo de Refactorings (60 + 5)
Colocando a Mão na Massa!
Considerações Finais
www.dbseller.com.br
32. Por quê Refatorar?
Aceitar mudança de escopo
Fornecer feedback rápido
Melhoria contínua
Aumentar a simplicidade para facilitar
entendimento
Tornar modelos mais próximos do mundo real
Ter modelos simples para facilitar
Manutenção e
Evolução da aplicação
Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com www.dbseller.com.br