database refactoring- manoel pimentel

28
DataBase DataBase Refactoring Refactoring em FireBird 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

Upload: manoel-pimentel-medeiros

Post on 18-Dec-2014

1.247 views

Category:

Business


8 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Database Refactoring-  Manoel Pimentel

DataBaseDataBaseRefactoringRefactoringem FireBirdem 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

Page 2: Database Refactoring-  Manoel Pimentel

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.

Page 3: Database Refactoring-  Manoel Pimentel

3

Planejamento, Análise e Modelagem (Vários Meses)

Desenvolvimento (Vários Meses ou Vários Anos)

Teste(Dias)

Entrega

M odelo 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

Page 4: Database Refactoring-  Manoel Pimentel

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

Page 5: Database Refactoring-  Manoel Pimentel

5

Rápido FeedBack

Constante inspeção

e adaptação.

Page 6: Database Refactoring-  Manoel Pimentel

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

Page 7: Database Refactoring-  Manoel Pimentel

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!

Page 8: Database Refactoring-  Manoel Pimentel

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.

Page 9: Database Refactoring-  Manoel Pimentel

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

Page 10: Database Refactoring-  Manoel Pimentel

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

Page 11: Database Refactoring-  Manoel Pimentel

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

Page 12: Database Refactoring-  Manoel Pimentel

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

Page 13: Database Refactoring-  Manoel Pimentel

13

Catálago de SUGESTÕES de Database Refactorings

Page 14: Database Refactoring-  Manoel Pimentel

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

Page 15: Database Refactoring-  Manoel Pimentel

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.

Page 16: Database Refactoring-  Manoel Pimentel

16

Exemplo Structural Refactorings

Split Column

Page 17: Database Refactoring-  Manoel Pimentel

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.

Page 18: Database Refactoring-  Manoel Pimentel

18

Exemplo Data Quality Refactorings

Add Lookup Table

Page 19: Database Refactoring-  Manoel Pimentel

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)

Page 20: Database Refactoring-  Manoel Pimentel

20

Exemplo Referential Integrity Refactorings

Add Foreign Key Constraint

Drop Foreign Key Constraint

Page 21: Database Refactoring-  Manoel Pimentel

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.

Page 22: Database Refactoring-  Manoel Pimentel

22

Exemplo Architectural RefactoringsMigrate Method From Database

Page 23: Database Refactoring-  Manoel Pimentel

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.

Page 24: Database Refactoring-  Manoel Pimentel

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

Page 25: Database Refactoring-  Manoel Pimentel

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

Page 26: Database Refactoring-  Manoel Pimentel

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.

Page 27: Database Refactoring-  Manoel Pimentel

27

Comparação entre bases● Ferramentas:

– IBOConsole - Para extração dos arquivos de metadata.– VIM (VI Improved for Windows) – Para comparação entre arquivos

Page 28: Database Refactoring-  Manoel Pimentel

28

Obrigado!

visaoagil.wordpress.com