SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
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

Mais conteúdo relacionado

Semelhante a Database Refactoring- Manoel Pimentel

Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Fabrízio Mello
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring DatabasesIsmael
 
Design System: Dominando o Design at Scale
Design System: Dominando o Design at ScaleDesign System: Dominando o Design at Scale
Design System: Dominando o Design at ScaleGuilherme Gonzalez
 
Andre Piucci CV 2012
Andre Piucci CV 2012Andre Piucci CV 2012
Andre Piucci CV 2012Andre Piucci
 
Mudando a Cultura de uma Organização para o Pensamento Ágil
Mudando a Cultura de umaOrganização para o Pensamento ÁgilMudando a Cultura de umaOrganização para o Pensamento Ágil
Mudando a Cultura de uma Organização para o Pensamento ÁgilLuiz C. Parzianello
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Fabrízio Mello
 
Gestão Ágil de Projetos com Scrum e FDD - Manoel Pimentel
Gestão Ágil de Projetos com Scrum e FDD - Manoel PimentelGestão Ágil de Projetos com Scrum e FDD - Manoel Pimentel
Gestão Ágil de Projetos com Scrum e FDD - Manoel PimentelManoel Pimentel Medeiros
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De SoftwareFelipe Goulart
 
Apresentação Final
Apresentação FinalApresentação Final
Apresentação Finalbetinho87
 
Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisAgile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisSuelen Carvalho
 
A Evolucao dos Processos de Desenvolvimento de Software
A Evolucao dos Processos de Desenvolvimento de SoftwareA Evolucao dos Processos de Desenvolvimento de Software
A Evolucao dos Processos de Desenvolvimento de SoftwareRobson Silva Espig
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioRalph Rassweiler
 

Semelhante a Database Refactoring- Manoel Pimentel (20)

Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
 
Design System: Dominando o Design at Scale
Design System: Dominando o Design at ScaleDesign System: Dominando o Design at Scale
Design System: Dominando o Design at Scale
 
Andre Piucci CV 2012
Andre Piucci CV 2012Andre Piucci CV 2012
Andre Piucci CV 2012
 
Mudando a Cultura de uma Organização para o Pensamento Ágil
Mudando a Cultura de umaOrganização para o Pensamento ÁgilMudando a Cultura de umaOrganização para o Pensamento Ágil
Mudando a Cultura de uma Organização para o Pensamento Ágil
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010
 
Gestão Ágil de Projetos com Scrum e FDD - Manoel Pimentel
Gestão Ágil de Projetos com Scrum e FDD - Manoel PimentelGestão Ágil de Projetos com Scrum e FDD - Manoel Pimentel
Gestão Ágil de Projetos com Scrum e FDD - Manoel Pimentel
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Curso Scrum
Curso ScrumCurso Scrum
Curso Scrum
 
Programacao Extrema
Programacao ExtremaProgramacao Extrema
Programacao Extrema
 
Aula2 paradigmas
Aula2 paradigmasAula2 paradigmas
Aula2 paradigmas
 
Apresentação Final
Apresentação FinalApresentação Final
Apresentação Final
 
Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos ÁgeisAgile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
Agile Brazil 2012 - Padrões Para Implantar Métodos Ágeis
 
A Evolucao dos Processos de Desenvolvimento de Software
A Evolucao dos Processos de Desenvolvimento de SoftwareA Evolucao dos Processos de Desenvolvimento de Software
A Evolucao dos Processos de Desenvolvimento de Software
 
20141128-Carlos-Eduardo-Capparelli
20141128-Carlos-Eduardo-Capparelli20141128-Carlos-Eduardo-Capparelli
20141128-Carlos-Eduardo-Capparelli
 
Apresentacao PBL Site
Apresentacao PBL SiteApresentacao PBL Site
Apresentacao PBL Site
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Analise de Requisitos Software
Analise de Requisitos SoftwareAnalise de Requisitos Software
Analise de Requisitos Software
 
Curso gpr pdca_fiema
Curso gpr pdca_fiemaCurso gpr pdca_fiema
Curso gpr pdca_fiema
 

Mais de Manoel Pimentel Medeiros

The DNA for Catalysing Organisational Improvements
The DNA for Catalysing Organisational ImprovementsThe DNA for Catalysing Organisational Improvements
The DNA for Catalysing Organisational ImprovementsManoel Pimentel Medeiros
 
How to evolve your career as Agile Coach using The Agile Coaching DNA
How to evolve your career as Agile Coach using The Agile Coaching DNAHow to evolve your career as Agile Coach using The Agile Coaching DNA
How to evolve your career as Agile Coach using The Agile Coaching DNAManoel Pimentel Medeiros
 
Como não ficar careca em Agile Transformations
Como não ficar careca em Agile TransformationsComo não ficar careca em Agile Transformations
Como não ficar careca em Agile TransformationsManoel Pimentel Medeiros
 
How to use the emergent learning as an enabler for product innovation
How to use the emergent learning as an enabler for product innovationHow to use the emergent learning as an enabler for product innovation
How to use the emergent learning as an enabler for product innovationManoel Pimentel Medeiros
 
The Cone of Change - Manoel Pimentel (keynote)
The Cone of Change - Manoel Pimentel (keynote)The Cone of Change - Manoel Pimentel (keynote)
The Cone of Change - Manoel Pimentel (keynote)Manoel Pimentel Medeiros
 
Fusing the Agile Testing into an Agile Team
Fusing the Agile Testing into an Agile TeamFusing the Agile Testing into an Agile Team
Fusing the Agile Testing into an Agile TeamManoel Pimentel Medeiros
 
Hacking the World - Keynote - TaSafoConf2015
Hacking the World - Keynote - TaSafoConf2015Hacking the World - Keynote - TaSafoConf2015
Hacking the World - Keynote - TaSafoConf2015Manoel Pimentel Medeiros
 
Os beatos ágeis e os pecados mundanos das grandes empresas
Os beatos ágeis e os pecados mundanos das grandes empresasOs beatos ágeis e os pecados mundanos das grandes empresas
Os beatos ágeis e os pecados mundanos das grandes empresasManoel Pimentel Medeiros
 
Como escalar algo essencialmente artesanal?
Como escalar algo essencialmente artesanal?Como escalar algo essencialmente artesanal?
Como escalar algo essencialmente artesanal?Manoel Pimentel Medeiros
 
Escalando a Gestão Ágil com SAFe - Manoel Pimentel
Escalando a Gestão Ágil com SAFe - Manoel PimentelEscalando a Gestão Ágil com SAFe - Manoel Pimentel
Escalando a Gestão Ágil com SAFe - Manoel PimentelManoel Pimentel Medeiros
 

Mais de Manoel Pimentel Medeiros (20)

The DNA for Catalysing Organisational Improvements
The DNA for Catalysing Organisational ImprovementsThe DNA for Catalysing Organisational Improvements
The DNA for Catalysing Organisational Improvements
 
The Agile Coaching DNA - Overview
The Agile Coaching DNA -  OverviewThe Agile Coaching DNA -  Overview
The Agile Coaching DNA - Overview
 
Organisational Plasticity - Agile 2018
Organisational Plasticity - Agile 2018Organisational Plasticity - Agile 2018
Organisational Plasticity - Agile 2018
 
How to evolve your career as Agile Coach using The Agile Coaching DNA
How to evolve your career as Agile Coach using The Agile Coaching DNAHow to evolve your career as Agile Coach using The Agile Coaching DNA
How to evolve your career as Agile Coach using The Agile Coaching DNA
 
Como não ficar careca em Agile Transformations
Como não ficar careca em Agile TransformationsComo não ficar careca em Agile Transformations
Como não ficar careca em Agile Transformations
 
How to use the emergent learning as an enabler for product innovation
How to use the emergent learning as an enabler for product innovationHow to use the emergent learning as an enabler for product innovation
How to use the emergent learning as an enabler for product innovation
 
The Cone of Change - Manoel Pimentel (keynote)
The Cone of Change - Manoel Pimentel (keynote)The Cone of Change - Manoel Pimentel (keynote)
The Cone of Change - Manoel Pimentel (keynote)
 
Fusing the Agile Testing into an Agile Team
Fusing the Agile Testing into an Agile TeamFusing the Agile Testing into an Agile Team
Fusing the Agile Testing into an Agile Team
 
Creating Great Teams using Management 3.0
Creating Great Teams using Management 3.0Creating Great Teams using Management 3.0
Creating Great Teams using Management 3.0
 
The Conflict Fast Model - Agile2016
The Conflict Fast Model - Agile2016The Conflict Fast Model - Agile2016
The Conflict Fast Model - Agile2016
 
Hacking the World - Keynote - TaSafoConf2015
Hacking the World - Keynote - TaSafoConf2015Hacking the World - Keynote - TaSafoConf2015
Hacking the World - Keynote - TaSafoConf2015
 
Problem Pitch
Problem PitchProblem Pitch
Problem Pitch
 
Thinking Hack - Workouts
Thinking Hack - WorkoutsThinking Hack - Workouts
Thinking Hack - Workouts
 
Thinking Hack - in 18 minutes
Thinking Hack - in 18 minutesThinking Hack - in 18 minutes
Thinking Hack - in 18 minutes
 
10 dicas para escalar Agile usando SAFe
10 dicas para escalar Agile usando SAFe10 dicas para escalar Agile usando SAFe
10 dicas para escalar Agile usando SAFe
 
SAFe - Como escalar algo artesanal?
SAFe - Como escalar algo artesanal?SAFe - Como escalar algo artesanal?
SAFe - Como escalar algo artesanal?
 
Estratégias para Transição Ágil
Estratégias para Transição ÁgilEstratégias para Transição Ágil
Estratégias para Transição Ágil
 
Os beatos ágeis e os pecados mundanos das grandes empresas
Os beatos ágeis e os pecados mundanos das grandes empresasOs beatos ágeis e os pecados mundanos das grandes empresas
Os beatos ágeis e os pecados mundanos das grandes empresas
 
Como escalar algo essencialmente artesanal?
Como escalar algo essencialmente artesanal?Como escalar algo essencialmente artesanal?
Como escalar algo essencialmente artesanal?
 
Escalando a Gestão Ágil com SAFe - Manoel Pimentel
Escalando a Gestão Ágil com SAFe - Manoel PimentelEscalando a Gestão Ágil com SAFe - Manoel Pimentel
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
  • 5. Rápido FeedBack Constante inspeção e adaptação. 5
  • 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
  • 9. 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
  • 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
  • 13. Catálago de SUGESTÕES de Database Refactorings 13
  • 14. 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
  • 15. 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
  • 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
  • 18. Exemplo Data Quality Refactorings Add Lookup Table 18
  • 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
  • 20. Exemplo Referential Integrity Refactorings Add Foreign Key Constraint Drop Foreign Key Constraint 20
  • 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