DataBase Refactoring em FireBird - WordPress.com · 2008-07-22 · DataBase Refactoring em FireBird...
Transcript of DataBase Refactoring em FireBird - WordPress.com · 2008-07-22 · DataBase Refactoring em FireBird...
DataBaseDataBaseRefactoringRefactoringem FireBirdem FireBird
Autor: Manoel Pimentel Medeiros
É Engenheiro de Software, com mais de 15 anos na área de TI, atualmente trabalha com projetos Java pela Rhealeza(SP) e como Coach em metodologias pela Fratech Tecnologia(SP). É Diretor Editorial da Revista Visão Ágil, 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.Contato: 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.
3
Planejamento, Análise e Modelagem (Vários Meses)
Desenvolvimento (Vários Meses ou Vários Anos)
Teste(Dias)
Entrega
Modelo em cascata(waterfall)
Qual o problema?
Precisa alterar o modelo e agora?
Tabela Tabela Tabela Tabela
Tabela Tabela
Tabela Tabela Tabela Tabela
Tabela
Tabela
Tabela
Tabela
Tabela Tabela
Tabela Tabela Tabela Tabela
Tabela
Tabela Tabela
4
Solução Iterativa e Incremental
Iteração 01 (2 a 4 Semanas)
(Planejamento, Modelagem, Desenvolvimento, Testes)
Tabela Tabela
Tabela Tabela
Incremento de Software
Iteração 02 (2 a 4 Semanas)
(Planejamento, Modelagem, Desenvolvimento, Testes)
Tabela Tabela
Tabela Tabela
Incremento de Software
Idéia Abrangente
Iteração 03 (2 a 4 Semanas)
(Planejamento, Modelagem, Desenvolvimento, Testes)
Tabela Tabela
Tabela Tabela
Incremento de Software
Iteração 04 (2 a 4 Semanas)
(Planejamento, Modelagem, Desenvolvimento, Testes)
Tabela Tabela
Tabela Tabela
Incremento de Software
5
Rápido FeedBack
Constante inspeção
e adaptação.
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”.
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!
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.
9
Cenários Típicos (Inconsistências entre camadas)
ID_NOTA (INTEGER)DATA (DATE)LOC_ENT (VARCHAR(80)ID_CLIENTE (INTEGER)
Notas
- idVenda (Integer)- dataEmissao (Date)- localEntrega (String)- cliente (Cliente)
Vendas
Mecanismo de Persistência
*Tabela *Classe
10
Cenários Típicos (Inconsistências entre domínios)
CLIENTESID NOME CPF1 MANOEL PIMENTEL 679.679-679-672 EMANUEL PIMENTEL 123.123.123-123 VITÓRIA PIMENTEL 456.456.456-45
FUNCIONARIOSID NOME CPF1 MANOEL PIMENTEL 679679679672 EMANUEL PIMENTEL 123123123123 VITÓRIA PIMENTEL 45645645645
11
Cenários Típicos (Inconsistências entre termos)
FORNECEDORESID_FORNECEDOR NOME_FORNECEDOR RUA BAIRRO CIDADE ESTADO
1 MANOEL PIMENTEL Fulana de Tal CENTRO São Paulo SP2 EMANUEL PIMENTEL Presitente Coisa CENTRO São Paulo SP3 VITÓRIA PIMENTEL General Morto CENTRO São Paulo SP
FABRICANTEID NOME ENDERECO CIDADE UF1 MANOEL PIMENTEL Fulana de Tal,Centro São Paulo SP2 EMANUEL PIMENTEL Presitente Coisa,Centro São Paulo SP3 VITÓRIA PIMENTEL General Morto,Centro São Paulo SP
12
Cenários Típicos (Arqueologia em Aplicações Legadas)
T001C001 C002 C003 C004 C005
1 MANOEL PIMENTEL Fulana de Tal,Centro São Paulo SP2 EMANUEL PIMENTEL Presitente Coisa,Centro São Paulo SP3 VITÓRIA PIMENTEL General Morto,Centro São Paulo SP
13
Catálago de SUGESTÕES de Database Refactorings
14
Regra Geral
Esquema Original
Período de TransiçãoEx: Backups, Criação de Campos,
Cópias de Dados, Remoção de campos antigos
Esquema Resultante
15
Structural Refactorings● Drop Column ● Drop Table ● Drop View ● Merge Columns ● Merge Tables ● Move Column ● Rename Column ● Rename Table ● Rename View ● Replace Column ● Split Column ● Split Table
São mudanças na estrutura de uma tabela, na coluna ou view.
16
Exemplo Structural Refactorings
Split Column
17
Data Quality Refactorings● Add Lookup Table ● Apply Standard Codes ● Apply Standard Type ● 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
É uma mudança que melhora e/ou garante a coerência e uso dos valores
armazenados no banco de dados.
18
Exemplo Data Quality Refactorings
Add Lookup Table
19
Referential Integrity Refactorings● 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
É uma mudança que assegura que existe uma
cadeia referenciada dentro de um contexto, de forma que garanta
as atualizações e remoções de maneira adequada.
(Normalizações)
20
Exemplo Referential Integrity Refactorings
Add Foreign Key Constraint
Drop Foreign Key Constraint
21
Architectural Refactorings● Add Mirror Table ● 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)
É uma mudança global que melhora o modo como as camadas
externas interagem com uma base de dados.
22
Exemplo Architectural RefactoringsMigrate Method From Database
23
Method Refactorings● Add Parameter ● Consolidate Conditional Expression ● Decompose Conditional ● Extract Method ● Introduce Variable ● Parameterize Methods ● Remove Parameter ● Rename Method ● Reorder Parameters ● Split Temporary Variable ● Substitute Algorithm
É uma mudança que melhora a qualidade de uma procedure ou função.
24
ExemploAntesCREATE OR REPLACE FUNCTION GetAccount( inAccountID IN NUMBER)RETURN NUMBER;ASaverageBalance := 0;
BEGINIF inAccountID > 10000 THEN
RETURN 0;END IF; IF inAccountID = 123456 THEN
RETURN 0;END IF;IF inAcountID = 987654 THEN
RETURN 0;END IF;-- Code to calculate the average balanceRETURN averageBalance;
END;
DepoisCREATE OR REPLACE FUNCTION GetAccount( inAccountID IN NUMBER)RETURN NUMBER;AS
averageBalance := 0;BEGIN
IF inAccountID < 10000 || inAccountID = 123456 || inAcountID = 987654
THEN RETURN 0;END IF; -- Code to calculate the average balanceRETURN averageBalance;
END;
Consolidate Conditional Expression
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
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.
27
Comparação entre bases● Ferramentas:
– IBOConsole - Para extração dos arquivos de metadata.– VIM (VI Improved for Windows) – Para comparação entre arquivos
28
Obrigado!
visaoagil.wordpress.com