Database Refactoring com PostgreSQL PGDay RS 2009

628 views
589 views

Published on

Palestra sobre Refatoração de Banco de Dados com PostgreSQL no PGDay RS 2009

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • Be the first to like this

No Downloads
Views
Total views
628
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
11
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Database Refactoring com PostgreSQL PGDay RS 2009

  1. 1. Database Refactoring com PostgreSQL Fabrízio de Royes Mello [email_address]
  2. 2. Changelog <ul><li>25/04/2009 – Porto Alegre AgileWeekend 2009 </li></ul><ul><ul><li>http://agileweekend.guma-rs.org/ </li></ul></ul><ul><li>08/05/2009 – PGDay RS </li></ul><ul><ul><li>http://www.postgresql.org.br/eventos/pgday/rs </li></ul></ul><ul><li>{24-27}/06/2009 – FISL10 ( aguardando aprovação ) </li></ul><ul><ul><li>http://fisl.softwarelivre.org/10/www/ </li></ul></ul>
  3. 3. Agenda <ul><li>Objetivo </li></ul><ul><li>Problema e Solução (Abordagem Tradicional e Ágil) </li></ul><ul><li>Refactoring e Database Refactoring </li></ul><ul><li>Dificuldades na Aplicação! </li></ul><ul><li>Processo de Database Refactoring </li></ul><ul><li>Catálogo de Refactorings (60 + 5) </li></ul><ul><li>Colocando a Mão na Massa! </li></ul><ul><li>Considerações Finais </li></ul>
  4. 4. Objetivo <ul><li>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. </li></ul>
  5. 5. Agenda <ul><li>Objetivo </li></ul><ul><li>Problema e Solução (Abordagem Tradicional e Ágil) </li></ul><ul><li>Refactoring e Database Refactoring </li></ul><ul><li>Dificuldades na Aplicação! </li></ul><ul><li>Processo de Database Refactoring </li></ul><ul><li>Catálogo de Refactorings (60 + 5) </li></ul><ul><li>Colocando a Mão na Massa! </li></ul><ul><li>Considerações Finais </li></ul>
  6. 6. Problema <ul><li>Abordagem Tradicional </li></ul><ul><ul><li>Análise... Análise... Análise... (tem fim?) </li></ul></ul><ul><ul><li>Schema da Base está disponível mais cedo e é isso que as pessoas irão utilizar </li></ul></ul><ul><ul><li>Com isso temos o DBA mais feliz!!! </li></ul></ul>
  7. 7. Modelo Cascata (Waterfall) Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com Abordagem Tradicional Desenvolvimento (Vários Meses ou Anos) Testes (Dias) Entrega Planejamento, Análise, Modelagem (Vários Meses) Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Precisa Alterar o Modelo e agora?
  8. 8. Solução? <ul><li>Abordagem Ágil </li></ul><ul><ul><li>Processo Iterativo e Incremental </li></ul></ul><ul><ul><li>Feedback Rápido </li></ul></ul><ul><ul><li>Constante Inspeção e Adaptação </li></ul></ul><ul><ul><li>DBA deve rever seus conceitos!!! (Agile DBA) </li></ul></ul>
  9. 9. Abordagem Ágil Solução Iterativa e Incremental Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com Idéia Abrangente Iteração 01 (2 a 4 semanas) (Planejamento, Modelagem, Desenvolvimento, Testes) Tabela Tabela Tabela Tabela Software Iteração 02 (2 a 4 semanas) (Planejamento, Modelagem, Desenvolvimento, Testes) Software Tabela Tabela Tabela Tabela Iteração 03 (2 a 4 semanas) (Planejamento, Modelagem, Desenvolvimento, Testes) Tabela Tabela Tabela Tabela Software Iteração 04 (2 a 4 semanas) (Planejamento, Modelagem, Desenvolvimento, Testes) Software Tabela Tabela Tabela Tabela
  10. 10. Agenda <ul><li>Objetivo </li></ul><ul><li>Problema e Solução (Abordagem Tradicional e Ágil) </li></ul><ul><li>Refactoring e Database Refactoring </li></ul><ul><li>Dificuldades na Aplicação </li></ul><ul><li>Processo de Database Refactoring </li></ul><ul><li>Catálogo de Refactorings (60 + 5) </li></ul><ul><li>Colocando a Mão na Massa! </li></ul><ul><li>Considerações Finais </li></ul>
  11. 11. Refactoring <ul><li>”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.” </li></ul><ul><li>”É uma forma disciplinada de aperfeiçoar código que minimiza a introdução de falhas.” </li></ul><ul><li>(Martin Fowler 2004) </li></ul>
  12. 12. Database Refactoring <ul><li>”É 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.” </li></ul><ul><li>(Scott W. Ambler 2006) </li></ul>
  13. 13. Database Refactoring <ul><li>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. </li></ul><ul><li>(Fabrízio de Royes Mello 2009) </li></ul>
  14. 14. Agenda <ul><li>Objetivo </li></ul><ul><li>Problema e Solução (Abordagem Tradicional e Ágil) </li></ul><ul><li>Refactoring e Database Refactoring </li></ul><ul><li>Dificuldades na Aplicação </li></ul><ul><li>Processo de Database Refactoring </li></ul><ul><li>Catálogo de Refactorings (60 + 5) </li></ul><ul><li>Colocando a Mão na Massa! </li></ul><ul><li>Considerações Finais </li></ul>
  15. 15. Dificuldades na aplicação <ul><li>Database Refactoring é mais difícil que Code Refactorings porque além de manter o comportamento também deve manter as informações </li></ul><ul><li>Acoplamento [1] pode ser um complicador dependendo da sua arquitetura de banco de dados </li></ul><ul><li>[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. </li></ul>
  16. 16. <ul><li>Melhor Caso </li></ul><ul><li>Baixo Acoplamento </li></ul>Single-Database Application Sua Aplicação Seu Banco de Dados
  17. 17. <ul><li>Pior Caso </li></ul><ul><li>Alto Acoplamento </li></ul>Multi-Application Database Sua Aplicação Seu Banco de Dados Outros Banco de Dados Frameworks de Persistência Outras Aplicações que Você Conhece Outras Aplicações que Você NÃO Conhece Arquivos de Dados Códigos de Testes
  18. 18. Agenda <ul><li>Objetivo </li></ul><ul><li>Problema e Solução (Abordagem Tradicional e Ágil) </li></ul><ul><li>Refactoring e Database Refactoring </li></ul><ul><li>Dificuldades na Aplicação </li></ul><ul><li>Processo de Database Refactoring </li></ul><ul><li>Catálogo de Refactorings (60 + 5) </li></ul><ul><li>Colocando a Mão na Massa! </li></ul><ul><li>Considerações Finais </li></ul>
  19. 19. Processo de Refatoração <ul><li>Existe necessidade de refatorar? </li></ul><ul><li>Escolher o refactoring mais apropriado </li></ul><ul><li>Depreciar o esquema original </li></ul><ul><li>Testar antes, durante e após </li></ul><ul><li>Modificar o esquema </li></ul><ul><li>Migrar os dados </li></ul><ul><li>Modificar código externo </li></ul><ul><li>Executar testes de regressão </li></ul><ul><li>Versionar seu trabalho </li></ul><ul><li>Anunciar o refactoring </li></ul>
  20. 20. Processo de Refatoração Regra Geral Aplicação do Refactoring Apropriado Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com Esquema Original Período de Transição (Backups, Criação de Campos, Cópias de Dados, Remoção campos antigos, etc) Esquema Resultante
  21. 21. Agenda <ul><li>Objetivo </li></ul><ul><li>Problema e Solução (Abordagem Tradicional e Ágil) </li></ul><ul><li>Refactoring e Database Refactoring </li></ul><ul><li>Dificuldades na Aplicação </li></ul><ul><li>Processo de Database Refactoring </li></ul><ul><li>Catálogo de Refactorings (60 + 5) </li></ul><ul><li>Colocando a Mão na Massa! </li></ul><ul><li>Considerações Finais </li></ul>
  22. 22. Structural (17) <ul><li>Drop Column </li></ul><ul><li>Drop Table </li></ul><ul><li>Drop View </li></ul><ul><li>Introduce Calculated Column </li></ul><ul><li>Introduce Surrogate Key </li></ul><ul><li>Merge Columns </li></ul><ul><li>Merge Tables </li></ul><ul><li>Move Column </li></ul><ul><li>Rename Column </li></ul><ul><li>Rename Table </li></ul><ul><li>Rename View </li></ul><ul><li>Replace LOB With Table </li></ul><ul><li>Replace Column </li></ul><ul><li>Replace One-To-Many With Associative Table </li></ul><ul><li>Replace Surrogate Key With Natural Key </li></ul><ul><li>Split Column </li></ul><ul><li>Split Table </li></ul>São mudanças na estrutura do banco de dados (tabelas, colunas, visões)
  23. 23. Data Quality (13) <ul><li>Add Lookup Table </li></ul><ul><li>Apply Standard Codes </li></ul><ul><li>Apply Standard Type </li></ul><ul><li>Consolidate Key Strategy </li></ul><ul><li>Drop Column Constraint </li></ul><ul><li>Drop Default Value </li></ul><ul><li>Drop Non-Nullable </li></ul><ul><li>Introduce Column Constraint </li></ul><ul><li>Introduce Common Format </li></ul><ul><li>Introduce Default Value </li></ul><ul><li>Make Column Non-Nullable </li></ul><ul><li>Move Data </li></ul><ul><li>Replace Type Code With Property Flags </li></ul>São mudanças que melhoram a qualidade das informações contidas em um banco de dados
  24. 24. Referential Integrity (7) <ul><li>Add Foreign Key Constraint </li></ul><ul><li>Add Trigger For Calculated Column </li></ul><ul><li>Drop Foreign Key Constraint </li></ul><ul><li>Introduce Cascading Delete </li></ul><ul><li>Introduce Hard Delete </li></ul><ul><li>Introduce Soft Delete </li></ul><ul><li>Introduce Trigger For History </li></ul>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
  25. 25. Architectural (12) <ul><li>Add CRUD Methods </li></ul><ul><li>Add Mirror Table </li></ul><ul><li>Add Read Method </li></ul><ul><li>Encapsulate Table With View </li></ul><ul><li>Introduce Calculation Method </li></ul><ul><li>Introduce Index </li></ul><ul><li>Introduce Read-Only Table </li></ul><ul><li>Migrate Method From Database </li></ul><ul><li>Migrate Method To Database </li></ul><ul><li>Replace Method(s) With View </li></ul><ul><li>Replace View With Method(s) </li></ul><ul><li>Use Official Data Source </li></ul>São mudanças que melhoram a maneira que programas externos interagem com a base de dados
  26. 26. Method (11) <ul><li>Interface Changing Refactorings </li></ul><ul><ul><li>Add Parameter </li></ul></ul><ul><ul><li>Parameterize Method </li></ul></ul><ul><ul><li>Remove Parameter </li></ul></ul><ul><ul><li>Rename Method </li></ul></ul><ul><ul><li>Reorder Parameters </li></ul></ul><ul><ul><li>Replace Parameter with Explicit Methods </li></ul></ul><ul><li>Internal Refactorings </li></ul><ul><ul><li>Consolidate Conditional Expression </li></ul></ul><ul><ul><li>Decompose Conditional </li></ul></ul><ul><ul><li>Extract Method </li></ul></ul><ul><ul><li>Introduce Variable </li></ul></ul><ul><ul><li>Remove Control Flag </li></ul></ul>São mudanças que melhoram a qualidade de uma Procedure ou Função
  27. 27. Transformations (5) <ul><li>Insert Data </li></ul><ul><li>Introduce New Column </li></ul><ul><li>Introduce New Table </li></ul><ul><li>Introduce New View </li></ul><ul><li>Update Data </li></ul>Mudanças que alteram a semântica do esquema do banco pela adição de novas funcionalidades
  28. 28. Agenda <ul><li>Objetivo </li></ul><ul><li>Problema e Solução (Abordagem Tradicional e Ágil) </li></ul><ul><li>Refactoring e Database Refactoring </li></ul><ul><li>Dificuldades na Aplicação </li></ul><ul><li>Processo de Database Refactoring </li></ul><ul><li>Catálogo de Refactorings (60 + 5) </li></ul><ul><li>Colocando a Mão na Massa! </li></ul><ul><li>Considerações Finais </li></ul>
  29. 29. Demonstrar Exemplos práticos!
  30. 30. Agenda <ul><li>Objetivo </li></ul><ul><li>Problema e Solução (Abordagem Tradicional e Ágil) </li></ul><ul><li>Refactoring e Database Refactoring </li></ul><ul><li>Dificuldades na Aplicação </li></ul><ul><li>Processo de Database Refactoring </li></ul><ul><li>Catálogo de Refactorings (60 + 5) </li></ul><ul><li>Colocando a Mão na Massa! </li></ul><ul><li>Considerações Finais </li></ul>
  31. 31. Por quê Refatorar? <ul><li>Aceitar mudança de escopo </li></ul><ul><li>Fornecer feedback rápido </li></ul><ul><li>Melhoria contínua </li></ul><ul><li>Aumentar a simplicidade para facilitar entendimento </li></ul><ul><li>Tornar modelos mais próximos do mundo real </li></ul><ul><li>Ter modelos simples para facilitar </li></ul><ul><ul><li>Manutenção e </li></ul></ul><ul><ul><li>Evolução da aplicação </li></ul></ul>Fonte: Manoel Pimental Medeiros - visaoagil.wordpress.com
  32. 32. Para refatorar algo <ul><li>Conhecimento </li></ul><ul><li>Disciplina </li></ul><ul><li>Simplicidade </li></ul><ul><li>Bom senso </li></ul><ul><li>Persistência </li></ul>
  33. 33. Algumas Referências! <ul><li>Livros: </li></ul><ul><ul><li>Refactoring Databases (Scott W. Ambler e Pramod J. Sadalage) </li></ul></ul><ul><ul><li>Refactoring (Martin Fowler) </li></ul></ul><ul><ul><li>Agile Modeling (Scott W. Ambler) </li></ul></ul><ul><li>Sites: </li></ul><ul><ul><li>http://www.agiledata.org </li></ul></ul><ul><ul><li>http://www.databaserefactoring.org </li></ul></ul><ul><ul><li>http://visaoagil.wordpress.com </li></ul></ul><ul><ul><li>http://www.refactoring.com </li></ul></ul><ul><ul><li>http://www.postgresql.org </li></ul></ul>
  34. 34. Dúvidas/Críticas/Sugestões!!! Fabrízio de Royes Mello [email_address]

×