Database Refactoring com PostgreSQL Fabrízio de Royes Mello [email_address]
Changelog 25/04/2009 – Porto Alegre AgileWeekend 2009 http://agileweekend.guma-rs.org/ 08/05/2009 – PGDay RS http://www.postgresql.org.br/eventos/pgday/rs {24-27}/06/2009 – FISL10 ( aguardando aprovação ) http://fisl.softwarelivre.org/10/www/
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
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.
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
Problema Abordagem Tradicional Análise... Análise... Análise... (tem fim?) Schema da Base está disponível mais cedo e é isso que as pessoas irão utilizar Com isso temos o DBA mais feliz!!!
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?
Solução? Abordagem Ágil Processo Iterativo e Incremental Feedback Rápido Constante Inspeção e Adaptação DBA deve rever seus conceitos!!! (Agile DBA)
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
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
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)
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)
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)
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
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.
Melhor Caso Baixo Acoplamento Single-Database Application Sua Aplicação Seu  Banco de Dados
Pior Caso Alto Acoplamento 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
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
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
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
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
Structural (17) Drop Column Drop Table Drop View Introduce Calculated Column 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 São mudanças na estrutura  do banco de dados (tabelas, colunas, visões)
Data Quality (13) Add Lookup Table Apply Standard Codes Apply Standard Type Consolidate Key Strategy 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 São mudanças que melhoram  a qualidade das informações  contidas em um banco de dados
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
Architectural (12) Add CRUD Methods Add Mirror Table Add Read Method Encapsulate Table With View 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 São mudanças que melhoram  a maneira que programas  externos interagem com  a base de dados
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
Transformations (5) Insert Data  Introduce New Column Introduce New Table Introduce New View Update Data Mudanças que alteram a semântica  do esquema do banco pela adição  de novas funcionalidades
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
Demonstrar Exemplos práticos!
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
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
Para refatorar algo Conhecimento Disciplina Simplicidade Bom senso Persistência
Algumas Referências! Livros: Refactoring Databases (Scott W. Ambler e Pramod J. Sadalage) Refactoring (Martin Fowler) Agile Modeling (Scott W. Ambler)  Sites: http://www.agiledata.org http://www.databaserefactoring.org http://visaoagil.wordpress.com http://www.refactoring.com http://www.postgresql.org
Dúvidas/Críticas/Sugestões!!! Fabrízio de Royes Mello [email_address]

Database Refactoring com PostgreSQL PGDay RS 2009

  • 1.
    Database Refactoring comPostgreSQL Fabrízio de Royes Mello [email_address]
  • 2.
    Changelog 25/04/2009 –Porto Alegre AgileWeekend 2009 http://agileweekend.guma-rs.org/ 08/05/2009 – PGDay RS http://www.postgresql.org.br/eventos/pgday/rs {24-27}/06/2009 – FISL10 ( aguardando aprovação ) http://fisl.softwarelivre.org/10/www/
  • 3.
    Agenda Objetivo Problemae 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
  • 4.
    Objetivo Apresentar osconceitos 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.
  • 5.
    Agenda Objetivo Problemae 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
  • 6.
    Problema Abordagem TradicionalAnálise... Análise... Análise... (tem fim?) Schema da Base está disponível mais cedo e é isso que as pessoas irão utilizar Com isso temos o DBA mais feliz!!!
  • 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.
    Solução? Abordagem ÁgilProcesso Iterativo e Incremental Feedback Rápido Constante Inspeção e Adaptação DBA deve rever seus conceitos!!! (Agile DBA)
  • 9.
    Abordagem Ágil SoluçãoIterativa 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.
    Agenda Objetivo Problemae 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
  • 11.
    Refactoring ”Processo dealteraçã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)
  • 12.
    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)
  • 13.
    Database Refactoring Mudançadisciplinada 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)
  • 14.
    Agenda Objetivo Problemae 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
  • 15.
    Dificuldades na aplicaçãoDatabase 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.
  • 16.
    Melhor Caso BaixoAcoplamento Single-Database Application Sua Aplicação Seu Banco de Dados
  • 17.
    Pior Caso AltoAcoplamento 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.
    Agenda Objetivo Problemae 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
  • 19.
    Processo de RefatoraçãoExiste 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
  • 20.
    Processo de RefatoraçãoRegra 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.
    Agenda Objetivo Problemae 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
  • 22.
    Structural (17) DropColumn Drop Table Drop View Introduce Calculated Column 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 São mudanças na estrutura do banco de dados (tabelas, colunas, visões)
  • 23.
    Data Quality (13)Add Lookup Table Apply Standard Codes Apply Standard Type Consolidate Key Strategy 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 São mudanças que melhoram a qualidade das informações contidas em um banco de dados
  • 24.
    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
  • 25.
    Architectural (12) AddCRUD Methods Add Mirror Table Add Read Method Encapsulate Table With View 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 São mudanças que melhoram a maneira que programas externos interagem com a base de dados
  • 26.
    Method (11) InterfaceChanging 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
  • 27.
    Transformations (5) InsertData Introduce New Column Introduce New Table Introduce New View Update Data Mudanças que alteram a semântica do esquema do banco pela adição de novas funcionalidades
  • 28.
    Agenda Objetivo Problemae 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
  • 29.
  • 30.
    Agenda Objetivo Problemae 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
  • 31.
    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
  • 32.
    Para refatorar algoConhecimento Disciplina Simplicidade Bom senso Persistência
  • 33.
    Algumas Referências! Livros:Refactoring Databases (Scott W. Ambler e Pramod J. Sadalage) Refactoring (Martin Fowler) Agile Modeling (Scott W. Ambler) Sites: http://www.agiledata.org http://www.databaserefactoring.org http://visaoagil.wordpress.com http://www.refactoring.com http://www.postgresql.org
  • 34.