《Mysql實例MySQL結合使用數據庫分析工具SchemaSpy的方法》要點:
本文介紹了Mysql實例MySQL結合使用數據庫分析工具SchemaSpy的方法,希望對您有用。如果有疑問,可以聯系我們。
MYSQL入門?近來,我和一幫老客戶一起工作,他們讓花時間給他們說一下在他們新環境中使用的新工具.其中,我發現的一個非常有用的工具是SchemaSpy.
MYSQL入門SchemaSpy是Java開發的的工具(要求java 5或更高版本的支持),主要用來分析數據庫中數據模型的元數據,并且能生成基于瀏覽器可視化的顯示.通過點擊就可了解數據表的層次結構,父子表關系等,主要通過HTML 鏈接或者實體關系圖來表達.它也被設計成用來幫助解決由于約束而導致的數據庫關聯失敗的遲鈍錯誤.
MYSQL入門我所喜歡ERD工具所能做的一件事是能快速的生成一個圖形表達,來展現數據庫那個表被引用最多,那些表已經被代替了是可以刪除的(為什么要保存你不需要的的數據呢?).通過了解數據庫表關系而不是僅僅看查詢語句,這可以加快的開始步伐,并且還促進開發的過程使其更有效.SchemaSpy的另一個優點是,他是一個命令行工具,在每次執行后才生成html頁面,所以特別適合用于crontab中,使得模型改變后能自動調整頁面.很不錯,是吧?
MYSQL入門這個工具使用起來簡單明了,可以幫你做很多的事.主要是,如果你的數據庫有一個外鍵,你就偷著樂吧,如果沒有,也不要太絕境,你還有更多的工作等著你.絕大多數情況下,SchemSpy可以出色的完成任務,但是有時候你需要以元數據文件的形式給它一點點的信息.
MYSQL入門安裝SchemaSpy及其相關
MYSQL入門??? 下載 SchemaSpy最新版的jar文件(書寫本文時的版本是5.0.0)
??? 確認你有一個能運行于你的操作平臺的Java JRE
??? 你需要一個你所用數據庫的Java驅動――我在使用 MySQL Connector/J
??? 安裝graphiz 包
MYSQL入門創建 mysql.properties文件
MYSQL入門當需求尚不明確時,我喜歡這樣建立一下,以便讓命令行能又短又整潔.這是我為我的Percona Server 5.6.10沙箱所使用的屬性文件:
MYSQL入門Schema的例子:
MYSQL入門
CREATE TABLE `parent` (
`parent_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
CREATE 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=latin1
CREATE 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
MYSQL入門請注意,在表child_A里有一個隱含的通過parent_id作為外鍵關聯到parent的關系,但在表child_B中建立了一個顯式的外鍵parent_id.這會影響SchemaSpy如何辨別關系,以及你是否需要提供一個提示.
?運行SchemaSpy(有外鍵)
MYSQL入門如果沒有元數據文件,你運行SchemaSpy,你將能看到parent 表和child_B表的關系如下圖所示:
MYSQL入門
MYSQL入門表child_A也能被加進來顯示,如果你的標簽指出了他們關系框,但是這個通常只能在你的子表和父表使用完全一樣的名字(本例中parent_id)時候才能起作用.你的環境看起里就像是許多商店,在父表中名字是id,在他其的子表他們代表為parent_id――這情景對開發者可能比較熟悉,但是對SchemaSpy根本沒有任何的幫助.那就是需要元數據文件來大顯身手的時候.
MYSQL入門
MYSQL入門?配置元數據文件
MYSQL入門元數據文件是一個XML格式的.下面的配置實例是用來把child_A表鏈接到parent表.
MYSQL入門
<?xml version="1.0" encoding="UTF-8"?>
<schemaMeta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schemaspy.sourceforge.net/xmlschema/2011/02/05/schemaspy.meta.xsd">
<comments>
Main Production Database. Percona, Michael Coburn
</comments>
<tables>
<table name="parent" comments="Parent table">
<column name="parent_id" primaryKey="true">
</column>
</table>
<table name="child_A" comments="Non-FK relationship, implicit relationship to parent">
<column name="id" primaryKey="true">
</column>
<column name="parent_id">
<foreignKey table="parent" column="parent_id"/>
</column>
</table>
</tables>
</schemaMeta>
MYSQL入門更多的復雜配置例子的可以 訪問.
運行SchemaSpy
MYSQL入門下面的語法是連接MySQL數據庫,SchemaSy同時對其他大多數流行的關系數據有很好支持.
MYSQL入門
java -jar schemaSpy_5.0.0.jar -t mysql -u msandbox_ro -p msandbox -meta schemaspy.meta.xml -o /var/www/schemaspy/
MYSQL入門-o選項,標識SchemaSpy的輸出文件目錄,要確定這個目錄可以被web服務器所操作.需要提及的是,我通過在jar包所在目錄建立一個mysql.properties文件,這樣我可以不用輸入任何的服務器:端口以及數據庫名稱的信息.
瀏覽SchemaSpy輸出
MYSQL入門三個表的完整的關系視圖如下圖所示:
MYSQL入門
MYSQL入門收尾感想
MYSQL入門盡管我提及到了關系欄,SchemaSpy最有用的功能.為了避免SchemaSpy只有這個功能這樣的假象,我要提及一下更多的功能欄:
MYSQL入門最后,你不要忘了,把配置好的SchemaSpy寫到crontab來實現自動化.
MYSQL入門如果正在使用其他的ERD工具,和SchemaSpy相比較怎么樣?請通過評論暢所欲言.謝謝你有耐心讀完本文.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/2659.html