Database Refactoring-  Manoel Pimentel
Upcoming SlideShare
Loading in...5
×
 

Database Refactoring- Manoel Pimentel

on

  • 2,045 views

 

Statistics

Views

Total Views
2,045
Views on SlideShare
2,035
Embed Views
10

Actions

Likes
2
Downloads
35
Comments
0

4 Embeds 10

http://manoelpimentel.blogspot.com 7
http://www.manoelpimentel.blogspot.com 1
http://www.slideshare.net 1
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Database Refactoring-  Manoel Pimentel Database Refactoring- Manoel Pimentel Presentation Transcript

  • DataBase Refactoring em FireBird Autor: Manoel Pimentel Medeiros É Engenheiro de Software, com 15 anos na área de TI, atualmente trabalha como Agile Coach para importantes empresas da área de serviço, indústria e bancária. Também é Diretor Editorial da Revista Visão Ágil e da InfoQ Brasil, Possui as certificações CSM e CSP da Scrum Alliance e foi um dos pioneiros na utilização e divulgação de métodos ágeis no Brasil. E já escreveu para importantes portais e revistas (nacionais e internacionais) ligados ao desenvolvimento de software. Informações em: visaoagil.wordpress.com
  • Objetivo Apresentar os conceitos e práticas de refactoring ágil de bancos de dados, que consiste em um método interativo e incremental para aplicar melhorias em banco de dados legados, ou criação de novos bancos dados em um típico projeto de desenvolvimento de software. 2
  • Qual o problema? M odel em cascat o a (waterfall) Planejamento, Análise e Modelagem (Vários Meses) Tabela Tabela Desenvolvimento (Vários Meses ou Vários Anos) Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela Teste(Dias) Tabela Tabela Tabela Tabela Entrega Tabela Tabela Tabela Precisa alterar o Tabela Tabela Tabela Tabela modelo e agora? 3 Tabela Tabela
  • Solução Iterativa e Incremental Iteração 01 Iteração 02 (2 a 4 Semanas) Incremento (2 a 4 Semanas) Incremento (Planejamento, Modelagem, de Software (Planejamento, Modelagem, de Software Desenvolvimento, Testes) Desenvolvimento, Testes) Tabela Tabela Tabela Tabela Idéia Abrangente Tabela Tabela Tabela Tabela Iteração 03 Iteração 04 (2 a 4 Semanas) Incremento (2 a 4 Semanas) Incremento (Planejamento, Modelagem, de Software (Planejamento, Modelagem, de Software Desenvolvimento, Testes) Desenvolvimento, Testes) Tabela Tabela Tabela Tabela Tabela Tabela Tabela Tabela 4
  • Rápido FeedBack Constante inspeção e adaptação. 5
  • O que é isso? Refactorings “É uma forma disciplinada para reestruturar código. A idéia básica é que você faz pequenas alterações ao seu código para melhorar a sua concepção, tornando-a mais fácil de entender e de modificar. Refactoring lhe permite evoluir o seu código ao longo do tempo, para ter uma abordagem iterativa e incremental de programação...” Martin Fowler - www.refactoring.com DataBase Refactorings “É quando uma simples mudança no esquema de uma base de dados melhora a sua concepção, embora mantendo simultaneamente a sua semântica”. 6 Scott W. Ambler - http://www.agiledata.org
  • O que é semâtica ? “É o estudo do significado lingüístico. Interessa-se pelo que é expresso por sentenças e outros objetos lingüísticos, não pelo arranjo de suas partes sintáticas ou pela sua pronúncia”. Resumo: o Conteúdo é mais importante que a forma! 7
  • Por quê aplicar Refactorings? ● Aceitar mudanças de escopo ● Fornecer feedback rápido ● Melhoria contínua ● Aumentar a simplicidade para facilitar o entendimento ● Tornar os modelos mais próximos do mundo real ● Ter modelos simples para facilitar a manutenção e a evolução de uma aplicação. 8
  • Cenários Típicos (Inconsistências entre camadas) Notas Vendas ID_NOTA (INTEGER) - idVenda (Integer) DATA (DATE) Mecanismo de - dataEmissao (Date) LOC_ENT (VARCHAR(80) Persistência - localEntrega (String) ID_CLIENTE (INTEGER) - cliente (Cliente) *Tabela *Classe 9
  • Cenários Típicos (Inconsistências entre domínios) CLIENTES ID NOME CPF 1 MANOEL PIMENTEL 679.679-679-67 2 EMANUEL PIMENTEL 123.123.123-12 3 VITÓRIA PIMENTEL 456.456.456-45 FUNCIONARIOS ID NOME CPF 1 MANOEL PIMENTEL 67967967967 2 EMANUEL PIMENTEL 12312312312 3 VITÓRIA PIMENTEL 45645645645 10
  • Cenários Típicos (Inconsistências entre termos) FORNECEDORES ID_FORNECEDOR NOME_FORNECEDOR RUA BAIRRO CIDADE ESTADO 1 MANOEL PIMENTEL Fulana de Tal CENTRO São Paulo SP 2 EMANUEL PIMENTEL Presitente Coisa CENTRO São Paulo SP 3 VITÓRIA PIMENTEL General Morto CENTRO São Paulo SP FABRICANTE ID NOME ENDERECO CIDADE UF 1 MANOEL PIMENTEL Fulana de Tal,Centro São Paulo SP 2 EMANUEL PIMENTEL Presitente Coisa,Centro São Paulo SP 3 VITÓRIA PIMENTEL General Morto,Centro São Paulo SP 11
  • Cenários Típicos (Arqueologia em Aplicações Legadas) T001 C001 C002 C003 C004 C005 1 MANOEL PIMENTEL Fulana de Tal,Centro São Paulo SP 2 EMANUEL PIMENTEL Presitente Coisa,Centro São Paulo SP 3 VITÓRIA PIMENTEL General Morto,Centro São Paulo SP 12
  • Catálago de SUGESTÕES de Database Refactorings 13
  • Regra Geral Período de Transição Esquema Ex: Backups, Criação de Campos, Esquema Original Cópias de Dados, Resultante Remoção de campos antigos 14
  • Structural Refactorings ● Drop Column ● Drop Table São mudanças na estrutura de uma ● Drop View tabela, na coluna ou view. ● Merge Columns ● Merge Tables ● Move Column ● Rename Column ● Rename Table ● Rename View ● Replace Column ● Split Column ● Split Table 15
  • Exemplo Structural Refactorings Split Column 16
  • Data Quality Refactorings ● Add Lookup Table É uma mudança que melhora e/ou garante a ● Apply Standard Codes coerência e uso dos valores ● Apply Standard Type armazenados no banco de dados. ● Consolidate Key Strategy ● Drop Column Constraint ● Drop Default Value ● Drop Non-Nullable Constraint ● Introduce Column Constraint ● Introduce Common Format ● Make Column Non-Nullable ● Move Data 17
  • Exemplo Data Quality Refactorings Add Lookup Table 18
  • Referential Integrity Refactorings ● Add Foreign Key Constraint ● Add Trigger for Calculated Column É uma mudança que assegura que existe uma ● Drop Foreign Key Constraint cadeia referenciada dentro ● Introduce Cascading Delete de um contexto, de forma que garanta as atualizações e remoções ● Introduce Hard Delete de maneira adequada. ● Introduce Soft Delete (Normalizações) ● Introduce Trigger for History 19
  • Exemplo Referential Integrity Refactorings Add Foreign Key Constraint Drop Foreign Key Constraint 20
  • Architectural Refactorings ● Add Mirror Table ● Encapsulate Table With View ● Introduce Calculation Method ● Introduce Index É uma mudança global que melhora o ● Introduce Read Only Table modo como as camadas externas interagem com uma base ● Migrate Method From Database de dados. ● Migrate Method to Database ● Replace Method(s) With View ● Replace View With Method(s) 21
  • Exemplo Architectural Refactorings Migrate Method From Database 22
  • Method Refactorings ● Add Parameter ● Consolidate Conditional Expression ● Decompose Conditional ● Extract Method ● Introduce Variable É uma mudança que melhora a qualidade ● Parameterize Methods de uma procedure ou função. ● Remove Parameter ● Rename Method ● Reorder Parameters ● Split Temporary Variable ● Substitute Algorithm 23
  • Exemplo Consolidate Conditional Expression Antes CREATE OR REPLACE FUNCTION GetAccount ( inAccountID IN NUMBER) RETURN NUMBER; AS averageBalance := 0; BEGIN IF inAccountID > 10000 THEN RETURN 0; END IF; Depois IF inAccountID = 123456 THEN CREATE OR REPLACE FUNCTION GetAccount RETURN 0; ( inAccountID IN NUMBER) END IF; RETURN NUMBER; IF inAcountID = 987654 THEN AS RETURN 0; averageBalance := 0; END IF; BEGIN -- Code to calculate the average balance IF inAccountID < 10000 || RETURN averageBalance; inAccountID = 123456 || inAcountID = 987654 END; THEN RETURN 0; END IF; -- Code to calculate the average balance RETURN averageBalance; END; 24
  • Aviso Importante: Organização de SQL SELECT CAMPO1,CAMPO2,CAMPO2,CAMPO3,CAMPO4,SUM(CAMPO5) FROM TABELA1 T1 INNER JOIN TABELA2 T2 ON T1.CAMPO1=T2.CAMPO1 WHERE T2.CAMPO2 LIKE 'A%'GROUP BY CAMPO1,CAMPO2,CAMPO2,CAMPO3,CAMPO4 ORDER BY CAMPO1 select CAMPO1, CAMPO2, CAMPO2, CAMPO3, CAMPO4, SUM(CAMPO5) from TABELA1 T1 inner join TABELA2 T2 on T1.CAMPO1=T2.CAMPO1 where T2.CAMPO2 LIKE 'A%' group by CAMPO1, CAMPO2, CAMPO2, CAMPO3, CAMPO4 order by 25 CAMPO1
  • Questões no FireBird ● Possilidade do uso de domínios ● Possibilidade de alterar os charsets e collations ● Uso de Tabelas Derivadas, Views, Functions, Procedures e Triggers ● Possibilidade de uso de Generators ● Ferramentas de apoio: – IBOConsole e IBUtils. 26
  • Comparação entre bases ● Ferramentas: – IBOConsole - Para extração dos arquivos de metadata. – VIM (VI Improved for Windows) – Para comparação entre arquivos 27
  • Obrigado! visaoagil.wordpress.com 28