Refactoring Data base parte 2

1,105
-1

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,105
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
23
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Refactoring Data base parte 2

  1. 1. Refactoring Databases<br />2<br />Por: IsmaelSoares<br />
  2. 2. Agenda<br /><ul><li>Objetivo
  3. 3. Dicas e considerações
  4. 4. As categorias de refactoring
  5. 5. Exemplos práticos</li></li></ul><li>Objetivo<br />Apresentarestratégias de Refactoring Databases e algunsexemplospráticos de cadacategoria.<br />
  6. 6. Dicas e considerações<br />Nenhuma arquitetura deve ser tão rígida <br />a ponto de ser inalterável.<br />
  7. 7. Dicas e considerações<br />Não se iluda! Pequenas melhorias <br />sempre irão acontecer.<br />
  8. 8. Dicas e considerações<br />Alterações menores são mais fáceis de aplicar.<br /><ul><li>Implementar uma mudança grande em partes pequenas.
  9. 9. Identificar as refactorings de forma individual.</li></ul>Controlar as alterações fará muita diferença.<br /><ul><li>Criar uma tabela de configuração do banco de dados.
  10. 10. Atualização ou sincronização em lote.
  11. 11. Escolher um período de depreciação/transição suficiente.
  12. 12. Encapsular o acesso ao banco de dados para não duplicar SQLs.</li></li></ul><li>As categorias de Refactoring<br />Estrutural<br />Qualidade dos dados<br />Integridade referencial<br />Arquitetura<br />Métodos<br />Transformação sem refactoring<br />
  13. 13. Estrutural<br /><ul><li>Drop Column
  14. 14. Drop Table
  15. 15. Drop View
  16. 16. Introduce Calculated Column
  17. 17. Introduce Surrogate Key
  18. 18. Merge Columns
  19. 19. Merge Tables
  20. 20. Move Column
  21. 21. Rename Column
  22. 22. Rename Table
  23. 23. Rename View
  24. 24. Replace Large Object (LOB) With Table
  25. 25. Replace Column
  26. 26. Replace One-to-Many With Associative Table
  27. 27. Replace Surrogate Key With Natural Key
  28. 28. Split Column
  29. 29. Split Table</li></li></ul><li>Estrutural – problemas comuns<br /><ul><li>Selects em views
  30. 30. Definições de Triggers
  31. 31. Definições de Procedures
  32. 32. Tabelas (foreign key)</li></li></ul><li>Estrutural – problemas comuns<br /><ul><li>Período de transição
  33. 33. Triggers circulares</li></li></ul><li>Estrutural – problemascomuns<br />CREATE OR REPLACE TRIGGER SynchronizeColunaTabelaToTabela2 BEFORE INSERT OR UPDATE OR DELETE ON TABELA REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE BEGIN IF DELETING THEN delete from tabela2 from where id=:new.id; END IF; IF INSERTING THENjaTemRegistonumber := (select distinct 1 from tabela2 where id=:new.id); IF NOT(jaTemRegistro = 1) THEN insert into tabela2(id, coluna) values(:new.id, :new.coluna); END IF; END IF; IF UPDATING THEN IF NOT(:NEW.coluna = :OLD.coluna) THEN IF (:NEW.coluna IS NOT NULl) THEN update tabela2 set coluna = :new.coluna where id= :new.id; END IF; END IF; END IF; END;<br />
  34. 34. Estrutural – Renomear coluna<br />
  35. 35. Estrutural – Rename Column<br />
  36. 36. Estrutural – Introduce Calculated Column<br />Determine a estratégia de sincronização.<br />Determine a seleção que fará parte do calculo.<br />Adicione a coluna.<br />Implemente a estratégia.<br />
  37. 37. Estrutural – Introduce Calculated Column<br />
  38. 38. Estrutural – Merge Column<br />
  39. 39. Estrutural – Merge Column<br />
  40. 40. Estrutural – Merge Table<br />
  41. 41. Estrutural – Merge Table<br />
  42. 42. Estrutural – Merge Table<br />
  43. 43. Estrutural – Move column<br />
  44. 44. Estrutural – Move column<br />
  45. 45. Qualidade de Dados<br /><ul><li>Add lookup Table (*)
  46. 46. Apply Standard Codes (*)
  47. 47. Apply Standard Type (*)
  48. 48. ConsolidateKeyStrategy
  49. 49. DropColumnConstraint
  50. 50. Drop Default Value
  51. 51. DropNon-Nullable
  52. 52. IntroduceColumnConstraint (*)
  53. 53. IntroduceCommonFormat (*)
  54. 54. Introduce Default Value
  55. 55. MakeColumnNon-Nullable
  56. 56. Move Data
  57. 57. Replace Type Code With Property Flags</li></li></ul><li>Qualidade de Dados - problemas comuns<br />Constraints fixas quebradas (check constraint).<br />Views com condições fixas nacláusula where. <br />Procedures que usam variavéis fixas para fazer cálculos.<br />Update dos dados (concorrência).<br />
  58. 58. Qualidade de Dados – Add Lookup table <br />
  59. 59. Qualidade de Dados – Apply Standard Codes<br />
  60. 60. Qualidade de Dados – Apply Standard Type<br />
  61. 61. Qualidade de Dados – IntroduceColumnConstraint<br />
  62. 62. Qualidade de Dados – IntroduceColumnFormat<br />UPDATE Customer SET PhoneNumber = REPLACE(PhoneNumber,'-','');<br /> <br />UPDATE Customer SET PhoneNumber = REPLACE(PhoneNumber,' ','');<br /> <br />UPDATE Customer SET PhoneNumber = REPLACE(PhoneNumber,'(','');<br /> <br />UPDATE Customer SET PhoneNumber = REPLACE(PhoneNumber,')','');<br /> <br />UPDATE Customer SET PhoneNumber = REPLACE(PhoneNumber,'+1','');<br /> <br />UPDATE Customer SET PhoneNumber = REPLACE(PhoneNumber,'.','');<br />
  63. 63. Integridade referencial<br /><ul><li>AddForeignKeyConstraint (*)
  64. 64. Add Trigger For Calculated Column (*)
  65. 65. DropForeignKeyConstraint
  66. 66. IntroduceCascading Delete (*)
  67. 67. IntroduceHard Delete
  68. 68. IntroduceSoft Delete
  69. 69. IntroduceTrigger For History</li></li></ul><li>Integridade referencial - AddForeignKeyConstraint<br />Checkedimmediately<br />Checkedcommit<br />
  70. 70. Integridade referencial - Add Trigger For Calculated Column<br />
  71. 71. Integridade referencial - Add Trigger For Calculate Column<br />
  72. 72. Integridade referencial - IntroduceCascading Delete<br />Cuidado com:<br /><ul><li>Deadlock
  73. 73. Accidentalmassdeletion
  74. 74. Duplicatedfunctionality</li></li></ul><li>Integridade referencial - IntroduceCascading Delete<br />
  75. 75. Arquitetura<br /><ul><li>Add CRUD Methods (*)
  76. 76. Add Mirror Table (redundância)
  77. 77. Add Read Method
  78. 78. Encapsulate Table With View
  79. 79. Introduce Calculation Method (*)
  80. 80. Introduce Index
  81. 81. Introduce Read-Only Table (*)
  82. 82. Migrate Method From Database
  83. 83. Migrate Method To Database
  84. 84. Replace Method(s) With View
  85. 85. Replace View With Method(s)
  86. 86. Use Official Data Source</li></li></ul><li>Arquitetura- Add CRUD Methods<br />
  87. 87. Arquitetura- Introduce Calculation Method<br />
  88. 88. Arquitetura- Introduce Read-Only Table<br />
  89. 89. Arquitetura- Introduce Read-Only Table<br />Uma trigger para cada tabela<br />
  90. 90. Transformações<br /><ul><li>Insert Data
  91. 91. Introduce New Column
  92. 92. Introduce New Table
  93. 93. Introduce View
  94. 94. Update Data</li></li></ul><li>Bibliografia<br />Ambler, Scott W., Pramod J. Sadalage (2006). Refactoring Databases: Evolutionary Databases Design. New York: Addison Wesley Professional. http://www.ambysoft.com/books/refactoringDatabases.html<br /> <br />Ambler, Scott W., Pramod J. Sadalage (2006). Refactoring Databases: The Process.<br />http://www.simple-talk.com/sql/database-administration/refactoring-databases-the-process/<br /> <br />Ambler, Scott W. (2007). Presentation Databases Refactoring.<br />http://www.infoq.com/presentations/ambler-database-refactoring<br /> <br />Ambler, S. W. (2003). Agile Databases Techniques: Effective Strategies for the Agile Software Developer. New York: John Wiley & Sons. www.ambysoft.com/agileDatabasesTechniques.html<br />Sato, Danilo e Ferreira, João Eduardo (2007). Banco de Dados Ágeis e Refatoração. Curso de Verão 2007 - IME/USP. <br />http://ccsl.ime.usp.br/agilcoop/files/4-BDs-Ageis.pdf<br />
  95. 95. Perguntas<br />
  96. 96. Agradecimentos<br />Obrigado<br />

×