Escalando a Gestão Ágil com SAFe - Manoel Pimentel
Database Refactoring- Manoel Pimentel
1. 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
2. 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
3. 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
4. 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
6. 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
7. 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
8. 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
10. 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
11. 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
12. 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
17. 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
19. 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
21. 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
23. 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
24. 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
25. 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
26. 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
27. Comparação entre bases
● Ferramentas:
– IBOConsole - Para extração dos arquivos de metadata.
– VIM (VI Improved for Windows) – Para comparação entre arquivos
27