SlideShare uma empresa Scribd logo
1 de 22
Refactoring Databases
Por Ismael Soares
rkmael.com
SQL Magazine
Edição 81
Antes e depois…
O que é Refactoring?
Martin	
  Fowler:	
  
“É	
   um	
   processo	
   de	
   alteração	
   em	
   um	
   sistema	
   de	
  
software,	
   de	
   modo	
   que,	
   o	
   comportamento	
   externo	
   do	
  
código	
   não	
   mude,	
   mas	
   que	
   sua	
   estrutura	
   interna	
   seja	
  
melhorada.”.	
  
Refactoring de Banco de dados?
Consiste	
  em	
  simples	
  mudanças	
  no	
  esquema	
  do	
  banco	
  de	
  dados	
  
(tabelas,	
  views,	
  trigger,	
  procedures,	
  etc.)	
  que	
  melhoram	
  o	
  design	
  
sem	
  alterar	
  a	
  semântica	
  e	
  o	
  significado	
  dos	
  dados	
  que	
  já	
  estão	
  
persistido.
Conceitualmente, refactoring de banco de dados é
mais difícil que refactoring de código…
Refactoring de código precisa apenas manter a
semântica comportamental, enquanto refactoring
de banco de dados, além de ter esta obrigação,
ainda precisa assegurar a semântica informacional.
Desafios
O que deve ser
refatorado?
Tabela genérica
Coluna genérica
Dados redundantes
Tabelas com muitas colunas
Tabelas com muitas linhas
Causa	
  problemas	
  de	
  desempenho.	
  
O	
  exemplo	
  mais	
  comum	
  é	
  a	
  tabela	
  de	
  movimento	
  de	
  estoque,	
  onde	
  são	
  armazenadas	
  todas	
  as	
  	
  
movimentações	
  dos	
  produtos.	
  Neste	
  caso,	
  o	
  correto	
  seria	
  criar	
  tabelas	
  de	
  histórico	
  para	
  	
  
guardar	
  os	
  dados	
  antigos,	
  deixando	
  a	
  vista	
  apenas	
  os	
  registros	
  de	
  determinado	
  período	
  
Modelo intocável
Antes de começar…
Verifique	
  se	
  o	
  refactoring	
  é	
  mesmo	
  necessário,	
  	
  
pois	
  talvez	
  a	
  estrutura	
  do	
  modelo	
  atual	
  esteja	
  
correta
#1
É	
  preciso	
  ter	
  em	
  mente	
  que	
  nenhuma	
  estrutura	
  
deve	
  ser	
  tão	
  rígida	
  a	
  ponto	
  de	
  ser	
  inalterável.	
  
Pequenas	
  melhorias	
  sempre	
  irão	
  acontecer
#2
Divida	
  o	
  seu	
  projeto	
  de	
  refactoring	
  em	
  pequenas	
  
etapas	
  para	
  facilitar	
  o	
  controle	
  e	
  a	
  compreensão	
  de	
  
todos	
  os	
  envolvidos.	
  	
  
Entretanto,	
  isto	
  exigirá	
  um	
  controle	
  rigoroso	
  sobre	
  
o	
  versionamento	
  das	
  alterações
#3
Evite	
  duplicações	
  de	
  código	
  SQL	
  
Utilize	
  um	
  framework	
  de	
  persistência	
  para	
  	
  
encapsular	
  o	
  acesso	
  ao	
  banco	
  de	
  dados	
  
#4
Duvidas?
Obrigado
@rkmael
rkmael@hotmail.com
rkmael.com

Mais conteúdo relacionado

Destaque

Product Owner na prática
Product Owner na práticaProduct Owner na prática
Product Owner na práticaPedro Valente
 
Conceitos Historias do Usuario
Conceitos Historias do UsuarioConceitos Historias do Usuario
Conceitos Historias do UsuarioIsmael
 
Clareza nos objetivos
Clareza nos objetivosClareza nos objetivos
Clareza nos objetivosIsmael
 
Habilidade sensorial em Equipes Auto-Organizáveis
Habilidade sensorial em Equipes Auto-OrganizáveisHabilidade sensorial em Equipes Auto-Organizáveis
Habilidade sensorial em Equipes Auto-OrganizáveisIsmael
 
SPED no Sistema Bluesoft
SPED no Sistema BluesoftSPED no Sistema Bluesoft
SPED no Sistema BluesoftIsmael
 
Quando a tecnologia se torna um problema
Quando a tecnologia se torna um problemaQuando a tecnologia se torna um problema
Quando a tecnologia se torna um problemaIsmael
 
Testando JavaScript com Spock
Testando JavaScript com SpockTestando JavaScript com Spock
Testando JavaScript com SpockIsmael
 
Emoções do Lider
Emoções do LiderEmoções do Lider
Emoções do LiderIsmael
 
Novidades Groovy 2.0
Novidades Groovy 2.0Novidades Groovy 2.0
Novidades Groovy 2.0Ismael
 
Introdução ao EasyTest
Introdução ao EasyTestIntrodução ao EasyTest
Introdução ao EasyTestIsmael
 
Business Intelligence
Business IntelligenceBusiness Intelligence
Business IntelligenceIsmael
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloIsmael
 
Como você testa seu software
Como você testa seu softwareComo você testa seu software
Como você testa seu softwareIsmael
 
Geb - Acceptance Test
Geb - Acceptance TestGeb - Acceptance Test
Geb - Acceptance TestIsmael
 
Java one
Java oneJava one
Java oneIsmael
 
Os testes ainda vao salvar sua pele
Os testes ainda vao salvar sua peleOs testes ainda vao salvar sua pele
Os testes ainda vao salvar sua peleIsmael
 
Java one
Java oneJava one
Java oneIsmael
 
Equipes auto organizaveis
Equipes auto organizaveisEquipes auto organizaveis
Equipes auto organizaveisIsmael
 
Refactoring Data base parte 2
Refactoring Data base parte 2Refactoring Data base parte 2
Refactoring Data base parte 2Ismael
 
BDD com Easyb
BDD com EasybBDD com Easyb
BDD com EasybIsmael
 

Destaque (20)

Product Owner na prática
Product Owner na práticaProduct Owner na prática
Product Owner na prática
 
Conceitos Historias do Usuario
Conceitos Historias do UsuarioConceitos Historias do Usuario
Conceitos Historias do Usuario
 
Clareza nos objetivos
Clareza nos objetivosClareza nos objetivos
Clareza nos objetivos
 
Habilidade sensorial em Equipes Auto-Organizáveis
Habilidade sensorial em Equipes Auto-OrganizáveisHabilidade sensorial em Equipes Auto-Organizáveis
Habilidade sensorial em Equipes Auto-Organizáveis
 
SPED no Sistema Bluesoft
SPED no Sistema BluesoftSPED no Sistema Bluesoft
SPED no Sistema Bluesoft
 
Quando a tecnologia se torna um problema
Quando a tecnologia se torna um problemaQuando a tecnologia se torna um problema
Quando a tecnologia se torna um problema
 
Testando JavaScript com Spock
Testando JavaScript com SpockTestando JavaScript com Spock
Testando JavaScript com Spock
 
Emoções do Lider
Emoções do LiderEmoções do Lider
Emoções do Lider
 
Novidades Groovy 2.0
Novidades Groovy 2.0Novidades Groovy 2.0
Novidades Groovy 2.0
 
Introdução ao EasyTest
Introdução ao EasyTestIntrodução ao EasyTest
Introdução ao EasyTest
 
Business Intelligence
Business IntelligenceBusiness Intelligence
Business Intelligence
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São Paulo
 
Como você testa seu software
Como você testa seu softwareComo você testa seu software
Como você testa seu software
 
Geb - Acceptance Test
Geb - Acceptance TestGeb - Acceptance Test
Geb - Acceptance Test
 
Java one
Java oneJava one
Java one
 
Os testes ainda vao salvar sua pele
Os testes ainda vao salvar sua peleOs testes ainda vao salvar sua pele
Os testes ainda vao salvar sua pele
 
Java one
Java oneJava one
Java one
 
Equipes auto organizaveis
Equipes auto organizaveisEquipes auto organizaveis
Equipes auto organizaveis
 
Refactoring Data base parte 2
Refactoring Data base parte 2Refactoring Data base parte 2
Refactoring Data base parte 2
 
BDD com Easyb
BDD com EasybBDD com Easyb
BDD com Easyb
 

Semelhante a Refactoring Databases - parte 1

Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoraçãoelliando dias
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Fabrízio Mello
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Fabrízio Mello
 
Principais processos de criação de um Banco de Dados e comuns erros de aplica...
Principais processos de criação de um Banco de Dados e comuns erros de aplica...Principais processos de criação de um Banco de Dados e comuns erros de aplica...
Principais processos de criação de um Banco de Dados e comuns erros de aplica...Perla Coutinho Barbosa
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016Roberto Fonseca
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - TreinamentoCaio Lima
 
Devops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL ServerDevops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL ServerIgor Rosa Macedo
 
Alta disponibilidade com o oracle _11gpdf
Alta disponibilidade com o oracle _11gpdfAlta disponibilidade com o oracle _11gpdf
Alta disponibilidade com o oracle _11gpdfRodrigo Raposo
 
Aula01 administrador de banco de dados dba
Aula01 administrador de banco de dados  dbaAula01 administrador de banco de dados  dba
Aula01 administrador de banco de dados dbajjuniorlopes
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalierGleicon Moraes
 
Conceitos gerais de etl - Qlikview
Conceitos gerais de etl - QlikviewConceitos gerais de etl - Qlikview
Conceitos gerais de etl - QlikviewRoberto Oliveira
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Fabrízio Mello
 
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
 
Tutorial Database Refactoring
Tutorial Database RefactoringTutorial Database Refactoring
Tutorial Database RefactoringFabrízio Mello
 
ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?Rodrigo Almeida
 

Semelhante a Refactoring Databases - parte 1 (20)

Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoração
 
Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)Refatoração Banco de Dados (Agileweekend2009)
Refatoração Banco de Dados (Agileweekend2009)
 
Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009Database Refactoring com PostgreSQL PGDay RS 2009
Database Refactoring com PostgreSQL PGDay RS 2009
 
Principais processos de criação de um Banco de Dados e comuns erros de aplica...
Principais processos de criação de um Banco de Dados e comuns erros de aplica...Principais processos de criação de um Banco de Dados e comuns erros de aplica...
Principais processos de criação de um Banco de Dados e comuns erros de aplica...
 
Novidades do Sql Server 2016
Novidades do Sql Server 2016Novidades do Sql Server 2016
Novidades do Sql Server 2016
 
Pgbr2013
Pgbr2013Pgbr2013
Pgbr2013
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - Treinamento
 
Devops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL ServerDevops: Gestão e publicação de Dados no SQL Server
Devops: Gestão e publicação de Dados no SQL Server
 
Dojo banco de dados
Dojo   banco de dadosDojo   banco de dados
Dojo banco de dados
 
TechEd_OFC302
TechEd_OFC302TechEd_OFC302
TechEd_OFC302
 
Banco de dados parte 01
Banco de dados parte 01Banco de dados parte 01
Banco de dados parte 01
 
Alta disponibilidade com o oracle _11gpdf
Alta disponibilidade com o oracle _11gpdfAlta disponibilidade com o oracle _11gpdf
Alta disponibilidade com o oracle _11gpdf
 
Aula01 administrador de banco de dados dba
Aula01 administrador de banco de dados  dbaAula01 administrador de banco de dados  dba
Aula01 administrador de banco de dados dba
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
Conceitos gerais de etl - Qlikview
Conceitos gerais de etl - QlikviewConceitos gerais de etl - Qlikview
Conceitos gerais de etl - Qlikview
 
Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010Database refactoring postgresql_consegi2010
Database refactoring postgresql_consegi2010
 
Sql Server
Sql ServerSql Server
Sql Server
 
Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009Database Refactoring PostgreSQL Urcamp Alegrete 2009
Database Refactoring PostgreSQL Urcamp Alegrete 2009
 
Tutorial Database Refactoring
Tutorial Database RefactoringTutorial Database Refactoring
Tutorial Database Refactoring
 
ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?ENPO - RMAN: Vilão ou Heroí?
ENPO - RMAN: Vilão ou Heroí?
 

Mais de Ismael

TDC 2020 - Trilha de Management 3.0 e Gestão Ágil
TDC 2020 - Trilha de Management 3.0 e Gestão ÁgilTDC 2020 - Trilha de Management 3.0 e Gestão Ágil
TDC 2020 - Trilha de Management 3.0 e Gestão ÁgilIsmael
 
Introducao ao Pensamento Sistemico
Introducao ao Pensamento SistemicoIntroducao ao Pensamento Sistemico
Introducao ao Pensamento SistemicoIsmael
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basicoIsmael
 
Bluesoft Culture
Bluesoft CultureBluesoft Culture
Bluesoft CultureIsmael
 
Como dar e receber feedbacks
Como dar e receber feedbacksComo dar e receber feedbacks
Como dar e receber feedbacksIsmael
 
Eficiencia de fluxo
Eficiencia de fluxoEficiencia de fluxo
Eficiencia de fluxoIsmael
 
Como você testa seu software TDC 2017
Como você testa seu software  TDC 2017Como você testa seu software  TDC 2017
Como você testa seu software TDC 2017Ismael
 
Como ter Entregas Frequentes
Como ter Entregas FrequentesComo ter Entregas Frequentes
Como ter Entregas FrequentesIsmael
 
JUnit 5 vs JUnit 4
JUnit 5 vs JUnit 4JUnit 5 vs JUnit 4
JUnit 5 vs JUnit 4Ismael
 
Conceitos por trás do Ágil
Conceitos por trás do ÁgilConceitos por trás do Ágil
Conceitos por trás do ÁgilIsmael
 
Boas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros MacetesBoas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros MacetesIsmael
 
8 passos para mudança de John Kotter
8 passos para mudança de John Kotter8 passos para mudança de John Kotter
8 passos para mudança de John KotterIsmael
 
Curva da Mudança Kubler-Ross
Curva da Mudança Kubler-RossCurva da Mudança Kubler-Ross
Curva da Mudança Kubler-RossIsmael
 
DevCamp 2016
DevCamp 2016DevCamp 2016
DevCamp 2016Ismael
 
7 Caracteristicas de um bom Lider Agil
7 Caracteristicas de um bom Lider Agil7 Caracteristicas de um bom Lider Agil
7 Caracteristicas de um bom Lider AgilIsmael
 
Law of demeter
Law of demeterLaw of demeter
Law of demeterIsmael
 
Junit Lambda
Junit LambdaJunit Lambda
Junit LambdaIsmael
 
Feedback dos Testes
Feedback dos TestesFeedback dos Testes
Feedback dos TestesIsmael
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - EstrategiasIsmael
 
Inove suas retrospectivas
Inove suas retrospectivasInove suas retrospectivas
Inove suas retrospectivasIsmael
 

Mais de Ismael (20)

TDC 2020 - Trilha de Management 3.0 e Gestão Ágil
TDC 2020 - Trilha de Management 3.0 e Gestão ÁgilTDC 2020 - Trilha de Management 3.0 e Gestão Ágil
TDC 2020 - Trilha de Management 3.0 e Gestão Ágil
 
Introducao ao Pensamento Sistemico
Introducao ao Pensamento SistemicoIntroducao ao Pensamento Sistemico
Introducao ao Pensamento Sistemico
 
Testes de unidade alem do basico
Testes de unidade alem do basicoTestes de unidade alem do basico
Testes de unidade alem do basico
 
Bluesoft Culture
Bluesoft CultureBluesoft Culture
Bluesoft Culture
 
Como dar e receber feedbacks
Como dar e receber feedbacksComo dar e receber feedbacks
Como dar e receber feedbacks
 
Eficiencia de fluxo
Eficiencia de fluxoEficiencia de fluxo
Eficiencia de fluxo
 
Como você testa seu software TDC 2017
Como você testa seu software  TDC 2017Como você testa seu software  TDC 2017
Como você testa seu software TDC 2017
 
Como ter Entregas Frequentes
Como ter Entregas FrequentesComo ter Entregas Frequentes
Como ter Entregas Frequentes
 
JUnit 5 vs JUnit 4
JUnit 5 vs JUnit 4JUnit 5 vs JUnit 4
JUnit 5 vs JUnit 4
 
Conceitos por trás do Ágil
Conceitos por trás do ÁgilConceitos por trás do Ágil
Conceitos por trás do Ágil
 
Boas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros MacetesBoas Praticas de Testes, Bad Smell e Outros Macetes
Boas Praticas de Testes, Bad Smell e Outros Macetes
 
8 passos para mudança de John Kotter
8 passos para mudança de John Kotter8 passos para mudança de John Kotter
8 passos para mudança de John Kotter
 
Curva da Mudança Kubler-Ross
Curva da Mudança Kubler-RossCurva da Mudança Kubler-Ross
Curva da Mudança Kubler-Ross
 
DevCamp 2016
DevCamp 2016DevCamp 2016
DevCamp 2016
 
7 Caracteristicas de um bom Lider Agil
7 Caracteristicas de um bom Lider Agil7 Caracteristicas de um bom Lider Agil
7 Caracteristicas de um bom Lider Agil
 
Law of demeter
Law of demeterLaw of demeter
Law of demeter
 
Junit Lambda
Junit LambdaJunit Lambda
Junit Lambda
 
Feedback dos Testes
Feedback dos TestesFeedback dos Testes
Feedback dos Testes
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - Estrategias
 
Inove suas retrospectivas
Inove suas retrospectivasInove suas retrospectivas
Inove suas retrospectivas
 

Refactoring Databases - parte 1

  • 4.
  • 5. O que é Refactoring? Martin  Fowler:   “É   um   processo   de   alteração   em   um   sistema   de   software,   de   modo   que,   o   comportamento   externo   do   código   não   mude,   mas   que   sua   estrutura   interna   seja   melhorada.”.  
  • 6. Refactoring de Banco de dados? Consiste  em  simples  mudanças  no  esquema  do  banco  de  dados   (tabelas,  views,  trigger,  procedures,  etc.)  que  melhoram  o  design   sem  alterar  a  semântica  e  o  significado  dos  dados  que  já  estão   persistido.
  • 7. Conceitualmente, refactoring de banco de dados é mais difícil que refactoring de código… Refactoring de código precisa apenas manter a semântica comportamental, enquanto refactoring de banco de dados, além de ter esta obrigação, ainda precisa assegurar a semântica informacional.
  • 9. O que deve ser refatorado?
  • 14. Tabelas com muitas linhas Causa  problemas  de  desempenho.   O  exemplo  mais  comum  é  a  tabela  de  movimento  de  estoque,  onde  são  armazenadas  todas  as     movimentações  dos  produtos.  Neste  caso,  o  correto  seria  criar  tabelas  de  histórico  para     guardar  os  dados  antigos,  deixando  a  vista  apenas  os  registros  de  determinado  período  
  • 17. Verifique  se  o  refactoring  é  mesmo  necessário,     pois  talvez  a  estrutura  do  modelo  atual  esteja   correta #1
  • 18. É  preciso  ter  em  mente  que  nenhuma  estrutura   deve  ser  tão  rígida  a  ponto  de  ser  inalterável.   Pequenas  melhorias  sempre  irão  acontecer #2
  • 19. Divida  o  seu  projeto  de  refactoring  em  pequenas   etapas  para  facilitar  o  controle  e  a  compreensão  de   todos  os  envolvidos.     Entretanto,  isto  exigirá  um  controle  rigoroso  sobre   o  versionamento  das  alterações #3
  • 20. Evite  duplicações  de  código  SQL   Utilize  um  framework  de  persistência  para     encapsular  o  acesso  ao  banco  de  dados   #4