SlideShare una empresa de Scribd logo
1 de 34
Refactoring Databases
(Estratégias)
Por Ismael Soares
rkmael.com
Na apresentação passada
falei:
O que e porque devemos
refatorar o banco de dados…
Qual a melhor estratégia?
Não	
   existe	
   uma	
   resposta	
   exata	
   para	
   esta	
   pergunta.	
   Uma	
  
série	
  de	
  fatores	
  pode	
  influenciar:	
  arquitetura,	
  modelo	
  de	
  dados,	
  
quantidades	
  de	
  sistemas	
  externos,	
  os	
  relacionamentos	
  entre	
  os	
  
objetos	
  internos	
  (triggers,	
  procedures,	
  functions),	
  etc.	
  
Siga estas orientações
Avalie	
  o	
  impacto	
  antes	
  de	
  alterar	
  a	
  estrutura.	
  
Procure:	
  views,	
  constraints,	
  triggers,	
  procedures,	
  
etc.	
  
#1
Defina	
  e	
  controle	
  o	
  período	
  de	
  transição	
  
#2
Crie	
  testes	
  automatizados	
  para	
  garantir	
  
que	
  as	
  coisas	
  vão	
  continuar	
  funcionando	
  
#3
Crie	
  os	
  scripts	
  necessários	
  para	
  
refatoração	
  e	
  adicione	
  comentários	
  nas	
  
colunas,	
  tabelas	
  e	
  triggers	
  que	
  serão	
  
removidas	
  no	
  futuro	
  
#4
Execute	
  os	
  testes	
  antes	
  de	
  anunciar	
  a	
  
refatoração	
  aos	
  demais	
  envolvidos	
  
#5
Alterações	
  das	
  dependências	
  internas	
  e	
  
externas,	
  se	
  possível,	
  faça	
  em	
  paralelo	
  
#6
Categorias de Refatoração
Estrutural
Qualidade dos dados
Integridade referencial
Arquitetura
Métodos
Estrutural
•	
  Renomear	
  colunas,	
  tabelas,	
  views,	
  functions	
  e	
  procedures;	
  
•	
  Introduzir	
  colunas	
  calculadas	
  para	
  melhorar	
  a	
  performance	
  dos	
  sistemas;	
  
•	
  Introduzir	
  surrogate	
  keys	
  para	
  aumentar	
  a	
  consistência	
  dos	
  dados;	
  
•	
  Mesclar	
  colunas	
  e	
  tabelas	
  para	
  evitar	
  redundâncias;	
  
•	
  Mover	
  coluna	
  para	
  outra	
  tabela;	
  
•	
  Particionar	
  tabelas	
  com	
  muitas	
  colunas	
  para	
  melhorar	
  a	
  coesão	
  do	
  esquema	
  do	
  
banco	
  de	
  dados;	
  
•Substituir	
  associações	
  um	
  para	
  muitos	
  por	
  tabelas	
  associativas	
  
A categoria estrutural engloba mudanças em estruturas como:
Exemplo
Exemplo
ALTER TABLE Empregado ADD nome_completo VARCHAR(60);
COMMENT ON Empregado.nome_completo 'Esta coluna irá substituir a coluna nome que será excluída em 20/12/2010';
COMMENT ON Empregado.nome 'Esta coluna foi renomeada para nome_completo
e será excluída em 20/12/2010';
UPDATE Empregado SET nome_completo = nome;
CREATE OR REPLACE TRIGGER SincronizarNomeCompleto
BEFORE INSERT OR UPDATE
ON Empregado
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
BEGIN
IF INSERTING THEN
IF :NEW.nome_completo IS NULL THEN
:NEW.nome_completo := :NEW.nome;
END IF;
IF :NEW.nome IS NULL THEN
:NEW.nome := :NEW.nome_completo;
END IF;
END IF;
IF UPDATING THEN
IF NOT(:NEW.nome_completo =:OLD.nome_completo) THEN
:NEW.nome:=:NEW.nome_completo;
END IF;
IF NOT(:NEW.nome=:OLD.nome) THEN
:NEW.nome_completo:=:NEW.nome;
END IF;
END IF;
END;
/
Em 20/12/2010
DROP TRIGGER SincronizarNomeCompleto;
ALTER TABLE Empregado DROP COLUMN nome;
Qualidade de dados
•	
  Adicionar	
  tabelas	
  de	
  consulta;	
  
•	
  Padronização	
  de	
  siglas;	
  
•	
  Aplicar	
  tipos	
  padrões	
  para	
  evitar,	
  por	
  exemplo,	
  que	
  em	
  uma	
  tabela	
  uma	
  informação	
  seja	
  do	
  
tipo	
  varchar	
  e	
  em	
  outra	
  ela	
  seja	
  do	
  tipo	
  numérico;	
  	
  
•	
  Adicionar	
  ou	
  remover	
  chaves	
  estrangeiras;	
  
•	
  Adicionar	
  ou	
  remover	
  valores	
  padrões	
  em	
  colunas;	
  
•	
  Mover	
  dados	
  de	
  uma	
  tabela	
  para	
  outra.	
  
As implementações feitas nesta categoria visam melhorar a
qualidade das informações contidas no banco de dados:
Exemplo
Exemplo
CREATE TABLE Estado (
estado CHAR(2) NOT NULL,
nome VARCHAR(60),
CONSTRAINT PK_Estado PRIMARY KEY (estado)
);
ALTER TABLE Endereco ADD CONSTRAINT FK_Endereco_estado
FOREIGN KEY (estado) REFERENCES estado;
INSERT INTO Estado (estado)
SELECT DISTINCT UPPER(estado) FROM Endereco;
UPDATE Endereco SET estado = 'TX' WHERE UPPER(estado) ='TX';
UPDATE Estado SET nome = 'Florida' WHERE estado='FL';
UPDATE Estado SET nome = 'Illinois' WHERE estado='IL';
UPDATE Estado SET nome = 'California' WHERE estado='CA';
Integridade Referencial
•	
   Adicionar	
  ou	
  remover	
  chave	
  estrangeira;	
  
•	
   Adicionar	
  trigger	
  para	
  coluna	
  calculada;	
  
•	
   Adicionar	
  exclusão	
  em	
  cascata;	
  
•	
   Adicionar	
  trigger	
  para	
  armazenar	
  em	
  log	
  as	
  alterações.	
  
As implementações feitas nesta categoria visam
garantir a integridade dos dados
Exemplo
Exemplo
ALTER TABLE Conta
ADD CONSTRAINT FK_Conta_Status
FOREIGN KEY (status_id)
REFERENCES Status;
ALTER TABLE Conta
ADD CONSTRAINT FK_Conta_Status
FOREIGN KEY (status_id)
REFERENCES Status
INITIALLY DEFERRED;
Imediata
Commit
Arquitetura
•	
  Adicionar	
  métodos	
  CRUD	
  (procedures	
  para	
  inserção,	
  consulta,	
  atualização	
  e	
  exclusão);	
  
•	
  Adicionar	
  encapsulamento	
  à	
  tabela	
  através	
  de	
  views;	
  
•	
  Adicionar	
  métodos	
  de	
  cálculos;	
  
•	
  Adicionar	
  tabelas	
  apenas	
  para	
  leituras;	
  
•	
  Migrar	
  métodos	
  dos	
  sistemas	
  externos	
  para	
  o	
  banco	
  de	
  dados.	
  
As implementações feitas nesta categoria visam melhorar de forma
global as interações entre os programas externos e o banco de dados
Exemplo
Exemplo
CREATE OR REPLACE PACKAGE EmpregadoCRUD AS
TYPE empregadoType IS REF CURSOR RETURN
Empregado%ROWTYPE;
PROCEDURE obterEmpregado
(empregadoId IN NUMBER,empregadoReturn OUT empregadoType);
PROCEDURE AdicionarEmpregado(....);
PROCEDURE AtualizarEmpregado(....);
PROCEDURE ExcluirEmpregado(....);
END EmpregadoCRUD; /
CREATE OR REPLACE PACKAGE BODY EmpregadoCRUD AS
PROCEDURE obterEmpregado
(empregadoId IN NUMBER, empregadoReturn OUT
empregadoType) IS
BEGIN
OPEN refEmpregado FOR
SELECT * FROM Empregado WHERE empregadoId =
empregadoId;
END obterEmpregado;
END EmpregadoCRUD;/
Métodos
•	
  Adicionar	
  ou	
  remover	
  parâmetros	
  dos	
  métodos;	
  
•	
  Renomear	
  métodos;	
  
•	
  Reordenar	
  os	
  parâmetros	
  dos	
  métodos;	
  
•	
  Substituir	
  vários	
  métodos	
  por	
  um	
  método	
  genérico;	
  
•	
  Substituir	
  um	
  método	
  genérico	
  por	
  vários	
  outros	
  métodos.	
  
Como o próprio nome sugere, as refatorações desta categoria têm por objetivo
melhorar a qualidade de stored procedures, triggers ou funções armazenadas no
banco de dados
Exemplo
Duvidas?
Obrigado
@rkmael
rkmael@hotmail.com
rkmael.com

Más contenido relacionado

La actualidad más candente

Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Emiliano Barbosa
 
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8Emiliano Barbosa
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Emiliano Barbosa
 
Fundamentos de SQL - Parte 5 de 8
Fundamentos de SQL - Parte 5 de 8Fundamentos de SQL - Parte 5 de 8
Fundamentos de SQL - Parte 5 de 8Emiliano Barbosa
 
Fundamentos de SQL - Parte 6 de 8
Fundamentos de SQL - Parte 6 de 8Fundamentos de SQL - Parte 6 de 8
Fundamentos de SQL - Parte 6 de 8Emiliano Barbosa
 
Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8Emiliano Barbosa
 
Oracle 11g resumo
Oracle 11g resumoOracle 11g resumo
Oracle 11g resumomarcosgama
 

La actualidad más candente (10)

Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8Fundamentos de SQL - Parte 1 de 8
Fundamentos de SQL - Parte 1 de 8
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 1/8
 
Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8Fundamentos de SQL - Parte 3 de 8
Fundamentos de SQL - Parte 3 de 8
 
Fundamentos de SQL - Parte 5 de 8
Fundamentos de SQL - Parte 5 de 8Fundamentos de SQL - Parte 5 de 8
Fundamentos de SQL - Parte 5 de 8
 
Fundamentos de SQL - Parte 6 de 8
Fundamentos de SQL - Parte 6 de 8Fundamentos de SQL - Parte 6 de 8
Fundamentos de SQL - Parte 6 de 8
 
Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8Fundamentos de SQL - Parte 4 de 8
Fundamentos de SQL - Parte 4 de 8
 
Oracle 11g resumo
Oracle 11g resumoOracle 11g resumo
Oracle 11g resumo
 
Views Oracle Database
Views Oracle DatabaseViews Oracle Database
Views Oracle Database
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 

Destacado

DevCamp 2016
DevCamp 2016DevCamp 2016
DevCamp 2016Ismael
 
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
 
Novidades Groovy 2.0
Novidades Groovy 2.0Novidades Groovy 2.0
Novidades Groovy 2.0Ismael
 
Feedback dos Testes
Feedback dos TestesFeedback dos Testes
Feedback dos TestesIsmael
 
Conceitos por trás do Ágil
Conceitos por trás do ÁgilConceitos por trás do Ágil
Conceitos por trás do ÁgilIsmael
 
Conceitos gerais de etl - Qlikview
Conceitos gerais de etl - QlikviewConceitos gerais de etl - Qlikview
Conceitos gerais de etl - QlikviewRoberto Oliveira
 

Destacado (6)

DevCamp 2016
DevCamp 2016DevCamp 2016
DevCamp 2016
 
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
 
Novidades Groovy 2.0
Novidades Groovy 2.0Novidades Groovy 2.0
Novidades Groovy 2.0
 
Feedback dos Testes
Feedback dos TestesFeedback dos Testes
Feedback dos Testes
 
Conceitos por trás do Ágil
Conceitos por trás do ÁgilConceitos por trás do Ágil
Conceitos por trás do Ágil
 
Conceitos gerais de etl - Qlikview
Conceitos gerais de etl - QlikviewConceitos gerais de etl - Qlikview
Conceitos gerais de etl - Qlikview
 

Similar a Refactoring Databases - Estrategias

Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggersflaviognm
 
Refactoring Data base parte 2
Refactoring Data base parte 2Refactoring Data base parte 2
Refactoring Data base parte 2Ismael
 
Net Coders Ladies SQL
Net Coders Ladies SQL Net Coders Ladies SQL
Net Coders Ladies SQL Aline Lavorato
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring DatabasesIsmael
 
Banco de dados comandos sql
Banco de dados   comandos sqlBanco de dados   comandos sql
Banco de dados comandos sqlNilson Augustini
 
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 2/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 2/8Fundamentos SQL - Microsoft SQL Server 2019 - Parte 2/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 2/8Emiliano Barbosa
 
um breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesum breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesWilliam Costa
 
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsBD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsRodrigo Kiyoshi Saito
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Principais instruções em sql
Principais instruções em sqlPrincipais instruções em sql
Principais instruções em sqlCharleston Anjos
 

Similar a Refactoring Databases - Estrategias (20)

Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
Refactoring Data base parte 2
Refactoring Data base parte 2Refactoring Data base parte 2
Refactoring Data base parte 2
 
Net Coders Ladies SQL
Net Coders Ladies SQL Net Coders Ladies SQL
Net Coders Ladies SQL
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 
Refactoring Databases
Refactoring DatabasesRefactoring Databases
Refactoring Databases
 
Banco de dados comandos sql
Banco de dados   comandos sqlBanco de dados   comandos sql
Banco de dados comandos sql
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Java13
Java13Java13
Java13
 
Aula 7 pc - estrutura
Aula 7   pc - estruturaAula 7   pc - estrutura
Aula 7 pc - estrutura
 
Apostila de sql
Apostila de sqlApostila de sql
Apostila de sql
 
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 2/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 2/8Fundamentos SQL - Microsoft SQL Server 2019 - Parte 2/8
Fundamentos SQL - Microsoft SQL Server 2019 - Parte 2/8
 
Aula1
Aula1Aula1
Aula1
 
Angular js
Angular jsAngular js
Angular js
 
um breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesum breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidades
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub SelectsBD I - Aula 14 A - Limitando Conj Dados e Sub Selects
BD I - Aula 14 A - Limitando Conj Dados e Sub Selects
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Principais instruções em sql
Principais instruções em sqlPrincipais instruções em sql
Principais instruções em sql
 
JDBC
JDBCJDBC
JDBC
 

Más 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
 
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
 
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
 
Refactoring Databases - parte 1
Refactoring Databases - parte 1Refactoring Databases - parte 1
Refactoring Databases - parte 1Ismael
 
Como você testa seu software
Como você testa seu softwareComo você testa seu software
Como você testa seu softwareIsmael
 
Conceitos Historias do Usuario
Conceitos Historias do UsuarioConceitos Historias do Usuario
Conceitos Historias do UsuarioIsmael
 
Inove suas retrospectivas
Inove suas retrospectivasInove suas retrospectivas
Inove suas retrospectivasIsmael
 
Truques da mente
Truques da menteTruques da mente
Truques da menteIsmael
 

Más 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
 
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
 
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
 
Refactoring Databases - parte 1
Refactoring Databases - parte 1Refactoring Databases - parte 1
Refactoring Databases - parte 1
 
Como você testa seu software
Como você testa seu softwareComo você testa seu software
Como você testa seu software
 
Conceitos Historias do Usuario
Conceitos Historias do UsuarioConceitos Historias do Usuario
Conceitos Historias do Usuario
 
Inove suas retrospectivas
Inove suas retrospectivasInove suas retrospectivas
Inove suas retrospectivas
 
Truques da mente
Truques da menteTruques da mente
Truques da mente
 

Último

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 

Último (6)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Refactoring Databases - Estrategias

  • 2. Na apresentação passada falei: O que e porque devemos refatorar o banco de dados…
  • 3. Qual a melhor estratégia?
  • 4. Não   existe   uma   resposta   exata   para   esta   pergunta.   Uma   série  de  fatores  pode  influenciar:  arquitetura,  modelo  de  dados,   quantidades  de  sistemas  externos,  os  relacionamentos  entre  os   objetos  internos  (triggers,  procedures,  functions),  etc.  
  • 6. Avalie  o  impacto  antes  de  alterar  a  estrutura.   Procure:  views,  constraints,  triggers,  procedures,   etc.   #1
  • 7. Defina  e  controle  o  período  de  transição   #2
  • 8. Crie  testes  automatizados  para  garantir   que  as  coisas  vão  continuar  funcionando   #3
  • 9. Crie  os  scripts  necessários  para   refatoração  e  adicione  comentários  nas   colunas,  tabelas  e  triggers  que  serão   removidas  no  futuro   #4
  • 10. Execute  os  testes  antes  de  anunciar  a   refatoração  aos  demais  envolvidos   #5
  • 11. Alterações  das  dependências  internas  e   externas,  se  possível,  faça  em  paralelo   #6
  • 13. Estrutural Qualidade dos dados Integridade referencial Arquitetura Métodos
  • 15. •  Renomear  colunas,  tabelas,  views,  functions  e  procedures;   •  Introduzir  colunas  calculadas  para  melhorar  a  performance  dos  sistemas;   •  Introduzir  surrogate  keys  para  aumentar  a  consistência  dos  dados;   •  Mesclar  colunas  e  tabelas  para  evitar  redundâncias;   •  Mover  coluna  para  outra  tabela;   •  Particionar  tabelas  com  muitas  colunas  para  melhorar  a  coesão  do  esquema  do   banco  de  dados;   •Substituir  associações  um  para  muitos  por  tabelas  associativas   A categoria estrutural engloba mudanças em estruturas como:
  • 17. Exemplo ALTER TABLE Empregado ADD nome_completo VARCHAR(60); COMMENT ON Empregado.nome_completo 'Esta coluna irá substituir a coluna nome que será excluída em 20/12/2010'; COMMENT ON Empregado.nome 'Esta coluna foi renomeada para nome_completo e será excluída em 20/12/2010'; UPDATE Empregado SET nome_completo = nome; CREATE OR REPLACE TRIGGER SincronizarNomeCompleto BEFORE INSERT OR UPDATE ON Empregado REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE BEGIN IF INSERTING THEN IF :NEW.nome_completo IS NULL THEN :NEW.nome_completo := :NEW.nome; END IF; IF :NEW.nome IS NULL THEN :NEW.nome := :NEW.nome_completo; END IF; END IF; IF UPDATING THEN IF NOT(:NEW.nome_completo =:OLD.nome_completo) THEN :NEW.nome:=:NEW.nome_completo; END IF; IF NOT(:NEW.nome=:OLD.nome) THEN :NEW.nome_completo:=:NEW.nome; END IF; END IF; END; / Em 20/12/2010 DROP TRIGGER SincronizarNomeCompleto; ALTER TABLE Empregado DROP COLUMN nome;
  • 19. •  Adicionar  tabelas  de  consulta;   •  Padronização  de  siglas;   •  Aplicar  tipos  padrões  para  evitar,  por  exemplo,  que  em  uma  tabela  uma  informação  seja  do   tipo  varchar  e  em  outra  ela  seja  do  tipo  numérico;     •  Adicionar  ou  remover  chaves  estrangeiras;   •  Adicionar  ou  remover  valores  padrões  em  colunas;   •  Mover  dados  de  uma  tabela  para  outra.   As implementações feitas nesta categoria visam melhorar a qualidade das informações contidas no banco de dados:
  • 21. Exemplo CREATE TABLE Estado ( estado CHAR(2) NOT NULL, nome VARCHAR(60), CONSTRAINT PK_Estado PRIMARY KEY (estado) ); ALTER TABLE Endereco ADD CONSTRAINT FK_Endereco_estado FOREIGN KEY (estado) REFERENCES estado; INSERT INTO Estado (estado) SELECT DISTINCT UPPER(estado) FROM Endereco; UPDATE Endereco SET estado = 'TX' WHERE UPPER(estado) ='TX'; UPDATE Estado SET nome = 'Florida' WHERE estado='FL'; UPDATE Estado SET nome = 'Illinois' WHERE estado='IL'; UPDATE Estado SET nome = 'California' WHERE estado='CA';
  • 23. •   Adicionar  ou  remover  chave  estrangeira;   •   Adicionar  trigger  para  coluna  calculada;   •   Adicionar  exclusão  em  cascata;   •   Adicionar  trigger  para  armazenar  em  log  as  alterações.   As implementações feitas nesta categoria visam garantir a integridade dos dados
  • 25. Exemplo ALTER TABLE Conta ADD CONSTRAINT FK_Conta_Status FOREIGN KEY (status_id) REFERENCES Status; ALTER TABLE Conta ADD CONSTRAINT FK_Conta_Status FOREIGN KEY (status_id) REFERENCES Status INITIALLY DEFERRED; Imediata Commit
  • 27. •  Adicionar  métodos  CRUD  (procedures  para  inserção,  consulta,  atualização  e  exclusão);   •  Adicionar  encapsulamento  à  tabela  através  de  views;   •  Adicionar  métodos  de  cálculos;   •  Adicionar  tabelas  apenas  para  leituras;   •  Migrar  métodos  dos  sistemas  externos  para  o  banco  de  dados.   As implementações feitas nesta categoria visam melhorar de forma global as interações entre os programas externos e o banco de dados
  • 29. Exemplo CREATE OR REPLACE PACKAGE EmpregadoCRUD AS TYPE empregadoType IS REF CURSOR RETURN Empregado%ROWTYPE; PROCEDURE obterEmpregado (empregadoId IN NUMBER,empregadoReturn OUT empregadoType); PROCEDURE AdicionarEmpregado(....); PROCEDURE AtualizarEmpregado(....); PROCEDURE ExcluirEmpregado(....); END EmpregadoCRUD; / CREATE OR REPLACE PACKAGE BODY EmpregadoCRUD AS PROCEDURE obterEmpregado (empregadoId IN NUMBER, empregadoReturn OUT empregadoType) IS BEGIN OPEN refEmpregado FOR SELECT * FROM Empregado WHERE empregadoId = empregadoId; END obterEmpregado; END EmpregadoCRUD;/
  • 31. •  Adicionar  ou  remover  parâmetros  dos  métodos;   •  Renomear  métodos;   •  Reordenar  os  parâmetros  dos  métodos;   •  Substituir  vários  métodos  por  um  método  genérico;   •  Substituir  um  método  genérico  por  vários  outros  métodos.   Como o próprio nome sugere, as refatorações desta categoria têm por objetivo melhorar a qualidade de stored procedures, triggers ou funções armazenadas no banco de dados