Sunday, September 16, 2007

FAGBOK: "Refactoring Databases: Evolutionary Database Design" av Scott W Ambler og Pramod J Sadalage

Smidige metoder baserer seg på stadige refactoringer. "Refactor Mercilessly" er en av XP sine viktigste utsagn. Problemet er at det ikke er lett å refactore databaser. Databasene er vanligvis store og tunge å endre. Det er også et problem at det ofte er forskjellige avdelinger i en organisasjon som har ansvar for programkode og for databaser. Det kan også eksistere programmer som bruker databasen og som det faktisk ikke er mulig å endre.

Denne boken prøver å avhjelpe disse vanskene. Den beskriver teknikker for å endre en database i små, kontrollerte steg. Akkurat som den klassiske boken "Refactoring - Improving the Design of Existing Code" av Martin Fowler så inneholder den en lang liste av navngitte refactoringer. En slik refactoring skal gjøre en veldefinert endring uten at systemets oppførsel skal endres. Alle enhetstester skal altså kjøres uten feil før og etter endringen. Det er dessverre et praktisk problem at det ikke finnes gode rammeverk for å lage og kjøre enhetstester for databaser.

Boken beskriver hver refactoring detaljert slik at det skal være enkelt å både analysere og å utføre tilsvarende endringer.

En refactoring vil ha følgende steg:
  • Kjøre tester.
  • Endre databaseskjema.
  • Endre kode på programmene som bruker databasen.
  • Migrere eller endre data som påvirkes av skjemaendringen. Dette er ikke nødvendig for alle typer refactoring.
  • Lage mekanismer som gjør at databasen også kan støtte programmer som ikke er endret. Dette kan for eksempel være triggere som gjør at gammel og ny versjon av et felt i databasen blir synkront oppdatert. Det er ikke mulig å lage slike mekanismer for alle typer refactoringer.
  • Kjøre tester.
Det er et viktig poeng at man ikke skal gjøre mere enn ett slik steg om gangen. Først når man er helt ferdig med en endring og alle tester går riktig kan man gå videre med et nytt steg.

Refactoringene som beskrives kan deles i grupper. De viktigste er:

Strukturelle refactoringer.
Dette omfatter metoder for å endre struktur på database. For eksempel fjerning, sammenslåing og splitting av kolonner.


Refactoringer for å forbedre datakvalitet.
Her finner vi for eksempel metoder for å innføre kodeverk, organisere primærnøkler og for å flytte data.

Refactoringer for å innføre referanseintegritet.
Eldre databaser er ofte laget uten å benytte tilgjengelige mekanismer for referanseintegritet. I denne gruppen finner vi metoder for å innføre slik referanseintegritet.


Jeg var egentlig litt skeptisk til denne boken. Ofte synes jeg at XP og smidige metoder kan være litt vel lettvinte og kjappe når det gjelder endringsvilje. Men heldigvis var min skepsis unødvendig. Det er ikke noe lettvint med denne boken. Den er meget grundig både i beskrivelse av analyse av endringer og gjennomføring av dem. Denne boken bør være en del av verktøykassen for alle som jobber med databaseorienterte systemer.

Amazon sier:
This is an excellent book that, in my opinion, serves two purposes. First, it is a compendium of well thought-out ways to evolve a database design. Each refactoring includes descriptions of why you might make this change, tradeoffs to consider before making it, how to update the schema, how to migrate the data, and how applications that access the data will need to change. Some of the refactorings are simple ones that even the most change-resistant DBAs will have used in the past ("Add index"). Most others (such as "Merge tables" or "Replace LOB with Table") are ones many conventional thinking DBAs avoid, even to the detriment of the applications their databases support.


This brings me to the second purpose of this book. Many DBAs view their jobs as protectors of the data. While that is admirable, they sometimes forget that they are part of a software development team whose job is to provide value to the organization through the development of new (and enhancement of existing) applications. One of the best DBAs I ever worked with viewed himself as a "Data Valet." He said his job was to make sure the data was presented to applications when and where they wanted and to protect the doors from getting dinged while under his care. Through its first five chapters and then the refactorings that follow, this book will help DBAs expand their view of their role in the organization from one of simply protecting data to one of enhancing the value of data to the organization.


This book is one that you'll keep on your reference shelf for many years to come. Highly recommended.


Kan kjøpes på play.com.


Terningkast 5

No comments: