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	
...
Siga estas orientações
Avalie	
  o	
  impacto	
  antes	
  de	
  alterar	
  a	
  estrutura.	
  
Procure:	
  views,	
  constraints,	
  triggers,	
 ...
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,	
  tabela...
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	
  calcula...
Exemplo
Exemplo
ALTER TABLE Empregado ADD nome_completo VARCHAR(60);
COMMENT ON Empregado.nome_completo 'Esta coluna irá substitui...
Qualidade de dados
•	
  Adicionar	
  tabelas	
  de	
  consulta;	
  
•	
  Padronização	
  de	
  siglas;	
  
•	
  Aplicar	
  tipos	
  padrões	
...
Exemplo
Exemplo
CREATE TABLE Estado (
estado CHAR(2) NOT NULL,
nome VARCHAR(60),
CONSTRAINT PK_Estado PRIMARY KEY (estado)
);
ALTE...
Integridade Referencial
•	
   Adicionar	
  ou	
  remover	
  chave	
  estrangeira;	
  
•	
   Adicionar	
  trigger	
  para	
  coluna	
  calculada;	
...
Exemplo
Exemplo
ALTER TABLE Conta
ADD CONSTRAINT FK_Conta_Status
FOREIGN KEY (status_id)
REFERENCES Status;
ALTER TABLE Conta
ADD ...
Arquitetura
•	
  Adicionar	
  métodos	
  CRUD	
  (procedures	
  para	
  inserção,	
  consulta,	
  atualização	
  e	
  exclusão);	
  
•...
Exemplo
Exemplo
CREATE OR REPLACE PACKAGE EmpregadoCRUD AS
TYPE empregadoType IS REF CURSOR RETURN
Empregado%ROWTYPE;
PROCEDURE ob...
Métodos
•	
  Adicionar	
  ou	
  remover	
  parâmetros	
  dos	
  métodos;	
  
•	
  Renomear	
  métodos;	
  
•	
  Reordenar	
  os	
 ...
Exemplo
Duvidas?
Obrigado
@rkmael
rkmael@hotmail.com
rkmael.com
Próximos SlideShares
Carregando em…5
×

Refactoring Databases - Estrategias

247 visualizações

Publicada em

Quanto vale a informação? Com o avanço tecnológico, esta pergunta ganhou um lugar importante no cenário de negócios corporativos atual. Por este motivo, apenas ter as informações armazenados numa base de dados não é suficiente. É preciso garantir qualidade.
Ismael dá algumas orientações (estratégias) para Refatorar o Banco de dados de forma eficiente.

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
247
No SlideShare
0
A partir de incorporações
0
Número de incorporações
44
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Refactoring Databases - Estrategias

  1. 1. Refactoring Databases (Estratégias) Por Ismael Soares rkmael.com
  2. 2. Na apresentação passada falei: O que e porque devemos refatorar o banco de dados…
  3. 3. Qual a melhor estratégia?
  4. 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.  
  5. 5. Siga estas orientações
  6. 6. Avalie  o  impacto  antes  de  alterar  a  estrutura.   Procure:  views,  constraints,  triggers,  procedures,   etc.   #1
  7. 7. Defina  e  controle  o  período  de  transição   #2
  8. 8. Crie  testes  automatizados  para  garantir   que  as  coisas  vão  continuar  funcionando   #3
  9. 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. 10. Execute  os  testes  antes  de  anunciar  a   refatoração  aos  demais  envolvidos   #5
  11. 11. Alterações  das  dependências  internas  e   externas,  se  possível,  faça  em  paralelo   #6
  12. 12. Categorias de Refatoração
  13. 13. Estrutural Qualidade dos dados Integridade referencial Arquitetura Métodos
  14. 14. Estrutural
  15. 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:
  16. 16. Exemplo
  17. 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;
  18. 18. Qualidade de dados
  19. 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:
  20. 20. Exemplo
  21. 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';
  22. 22. Integridade Referencial
  23. 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
  24. 24. Exemplo
  25. 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
  26. 26. Arquitetura
  27. 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
  28. 28. Exemplo
  29. 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;/
  30. 30. Métodos
  31. 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
  32. 32. Exemplo
  33. 33. Duvidas?
  34. 34. Obrigado @rkmael rkmael@hotmail.com rkmael.com

×