近來,我和一幫老客戶一起工作,他們讓花時間給他們說一下在他們新環境中使用的新工具。其中,我發現的一個非常有用的工具是SchemaSpy。
SchemaSpy是Java開發的的工具(要求java 5或更高版本的支持),主要用來分析數據庫中數據模型的元數據,并且能生成基于瀏覽器可視化的顯示。通過點擊就可了解數據表的層次結構,父子表關系等,主要通過HTML 鏈接或者實體關系圖來表達。它也被設計成用來幫助解決由于約束而導致的數據庫關聯失敗的遲鈍錯誤。
我所喜歡ERD工具所能做的一件事是能快速的生成一個圖形表達,來展現數據庫那個表被引用最多,那些表已經被代替了是可以刪除的(為什么要保存你不需要的的數據呢?)。通過了解數據庫表關系而不是僅僅看查詢語句,這可以加快的開始步伐,并且還促進開發的過程使其更有效。SchemaSpy的另一個優點是,他是一個命令行工具,在每次執行后才生成html頁面,所以特別適合用于crontab中,使得模型改變后能自動調整頁面。很不錯,是吧?
這個工具使用起來簡單明了,可以幫你做很多的事。主要是,如果你的數據庫有一個外鍵,你就偷著樂吧,如果沒有,也不要太絕境,你還有更多的工作等著你。絕大多數情況下,SchemSpy可以出色的完成任務,但是有時候你需要以元數據文件的形式給它一點點的信息。
安裝SchemaSpy及其相關
下載 SchemaSpy最新版的jar文件(書寫本文時的版本是5.0.0)
確認你有一個能運行于你的操作平臺的Java JRE
你需要一個你所用數據庫的Java驅動——我在使用 MySQL Connector/J
安裝graphiz 包
創建 mysql.properties文件
當需求尚不明確時,我喜歡這樣建立一下,以便讓命令行能又短又整潔。這是我為我的Percona Server 5.6.10沙箱所使用的屬性文件:
Schema的例子:
| CREATE TABLE `parent` ( `parent_id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`parent_id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1CREATE TABLE `child_A` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1CREATE TABLE `child_B` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `parent_id` (`parent_id`), CONSTRAINT `child_B_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`parent_id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 |