Home > Framework, Java, Technologies, 技術 > LiquiBase – A Database Refactoring Tool

LiquiBase – A Database Refactoring Tool

December 16, 2007 (Sunday) Leave a comment Go to comments

Change is the only thing unchanged. 軟體當然也脫離不了這個道理,但改變通常是會對軟體造成一些衝擊和影響的,有名的軟體技術很多都是教導如何面對改變而出現的。Refactoring 的技術鼓勵大家勇於面對改變,只有發現有不夠好的地方,馬上藉由 refactoring 的手法讓 code 變得更好。因此我們可以經由 refactoring 讓程式一步一步的改善,但 enterprise software 一般都會有 database,如果程式能夠一直改進,但 database 的 schema 沒有辦法修改的話,在改善的程度上會有很大的限制。因此 Database refactoring 也是有被研究討論的技術,Refactoring Database 正是討論這部份的一本好書。

既然 refactoring code 的時候需要使用工具的幫忙 (Eclipse 等 IDE 都有 support source code refactoring),那麼 Database refactoring 也需要有工具才會容易使用。LiquiBase 就是做 database refactoring 的工具,由 developer 提供的 change log file,裡面寫上想要做的 change set (如:Step 2 的樣子)。在執行 liquibase 的時候,它會去看目前的 database 是在哪一個 change set version,執行還沒有 apply 的 change set。當中 change set 版本的管理也是由 liquibase 來做。來舉一個實際的例子:

如果我想要建立一個 Table PERSON, 裡面的 column 有 ID, NAME。那我把它寫成 change set 1。這時執行 liquibase,由於我的 DB 裡本來沒有任何 table  所以 liquibase 會幫我執行 change set 1,也就是建立 PERSON table,同時會在 DB 裡記錄目前是在 change set 1。

接下來我可能覺得 PERSON 需要記錄更多的東西,所以想要增加 AGE 這個 column ,我就把它寫成 change set 2。這時執行 liquibase,它會發現剛剛的 DB 是在 change set 1 這個 version,所以就執行 change set 2。如果我把 DB 砍掉再執行 liquibase,這時它就會一次執行 change set 1, 2。

有了這個工具之後,我們對於 database 的修改都可以一一被記錄下來,加上 VCS (Version Control System) 的機制,就可以回去任何一個 DB 的版本。另外,liquibase 支援 MySQL, PostgreSQL , Oracle, MS-SQL, Sybase, DB2, Derby, HSQL, H2 等等,即使使用不一樣的 DB 也可以用同樣的語法寫 change set,這也是 liquibase 的一大功能。有了 liquibase 再搭配上針對 database schema 所做的測試,就可以隨時做 database refactoring,而且就跟 refactoring source code 一樣的簡單又有保障。

Advertisements
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: